C Sharp

Материал из Lurkmore.

(Перенаправлено с C sharp)
Перейти к: навигация, поиск
НЕНАВИСТЬ!
Данный текст содержит зашкаливающее количество НЕНАВИСТИ.
Мы настоятельно рекомендуем убрать от мониторов людей, животных со слабой психикой, кормящих женщин и детей.
Осторожно! Срач в примечаниях!
Примечания к данной статье противоречат ей самой, поскольку кто-то использовал их в полемических целях.
Необходимо либо исправить статью в соответствии с примечаниями, либо удалить их нахуй.
В эту статью нужно добавить как можно больше копирастии Солнца и коварных планов Мелко$офта.
Также сюда можно добавить интересные факты, картинки и прочие кошерные вещи.
Что какбэ намекае...
Что какбэ намекае...

C# — (Си-шарп, Си-решетка, До-диез, Цэ-решетка) — мейнстримовый язык, для промышленной кодогенерации на платформе .Net, наряду с жабой, является стандартом де-факто толстожопого энтерпрайза (чем и обуславливаются высококультурные диалоги, с вытекающим сравнением возможностей, доступных инструментариев, при встрече между адептами противоборствующих сторон). Язык является попыткой собрать все нужные (и ненужные) возможности, посему чуть более, чем полностью состоит из тонн синтаксического сахара и продолжает ими обрастать со сверхсветовой скоростью.

Содержание

[править] Как дело было или история возникновения[1]

Эта статья должна быть до- или даже полностью переписана.
Перед вами — очередная безблагодатная статья.
Сия халтура нам не нравится, и только вера в светлое будущее удерживает её на этом свете.
Указана следующая причина: в действительности всё было совсем не так, а на самом деле ещё и веселее.
На странице обсуждения могут быть подробности.

В далёком 1995 году на свет вышел язык Java, разработанный в корпорации Sun для стиральных машинок[2], но ввиду отсутствия в те времена в них интернетов перенесённом на серверы. Разработки его велись более 5 лет с привлечением истинных тру людей вроде Никлауса Вирта, чья реализация сборщика мусора попала в код первых версий. И вот 23 мая вышеозначенного года вышла наконец 1.0 версия языка. C этого момента начинается стремительный рост популярности вбашливание денег[3] в раскрутку этого языка[4] и корпорация Sun всовывает поддержку Java всюду где только можно. Java уже поддерживали и Интернет-браузеры и даже самые распоследние мобильники. Версия 1.2, вышедшая в 1998 году, уже имела поддержку гуиного интерфейса[5] (там он называется swing[6][7]). В этот момент до Билла Гейтса из компании Мелко$офт, наконец, дошло, куда дует ветер и что если он и дальше будет сидеть и ничего не предпринимать, то скоро выйдет уже целая операционная система под Java[8][9], которая по надёжности и глобальности оставит в глубоких лузерах жалкое поделие Мелкософта под названием Windows. И тут конечно Гейтс, не мудрствуя лукаво, покопался в воспоминаниях своей молодости (как он воровал BASIC и DOS) и принял решение сделать такой же Java как и у Sun, но с блекджеком и шлюхами. И вот закипела работа с привлечением перебежчиков из Borland: всего за 3 года в ударных темпах родился язык C#.[10]

[править] Особенности языка

  • Компиляция в промежуточный язык
  • Низкий порог вхождения. Быдлокодеры, welcome!
  • НИКАКАЯ защита кода (поскольку защита кода нужна только быдлокодерам чтобы спрятать свой кривой код). Если программа на С++ поддаётся декомпиляции [11] только при глубоких познаниях в (диз-)ассемблере и Дао, то в C# исходный код программы легко и просто получается программками типа Reflector в доли секунды и декомпилируется без ошибок вплоть до названия переменных. Полученная декомпиляция отличается от авторской разве что отсутствием комментариев - такой вот Open Source поневоле. Единственная защита — сторонние программы-обфускаторы, знатно унавоживающие код бесполезными инструкциями, после чего рабочий исходник компилируется, но абсолютно не читабелен и выглядит как говно.[12][13][14]
  • Исторически-уникальная по своей наглости 95%-я пизженность концепций[15], технологий и дерева классов с Java с заменой названий и термоядерным пиаром велосипедов. В результате некоторые молодые быдлокодеры свято верят, что JIT-компиляцию и garbage collection придумал майкрософт, а раньше все построчно интерпретировали байткод явы и мучительно боролись с утечками памяти.

[править] Минусы языка

  • Железная привязка к винде. Наличие всяких DllImport и использование Handle контролов для WinApi/WMI хоронит всю сферическую кроссплатформенность на корню. Существует опенсорсный проект mono, который уже потеснил жабу на Linux Desktop'е [1]. С мобильными платформами всё ещё хуже, а вернее совсем никак (кроме Windows Mobile, где все ok).
  • Необходимость тащить с собой огромный runtime, причем свой для каждой версии .NET (до преемственности версий java — как до луны). Поняв, что обычные пользователи ни за что не станут качать 200 мегабайт с сайта майкрософта ради того, чтобы запустить чей-то «МегаКалькулятор.Net», платформу насильственно запилили в Висту и семёрку, и теперь она довольно кушает ночами сотни интернета в рамках Microsoft Update.
  • Связанные с простотой синтаксического анализа плюшки быстрой разработки в IDE (вроде запиливания целых экранов кода двумя кнопками, рефакторинга одним тыком мышки и пр.) по-нормальному присутствуют только в Visual Studio, написанной сами-знаете кем и сами-знаете-для-чего. Чтобы вести нормальную коммерческую деятельность в этой стране, придётся затариться лицензиями винды, лицензиями на VS (впрочем, существует и кастрированная бесплатная версия) и лицензиями на Resharper. И всё это за треть того, что доступно яверам нахаляву в NetBeans/Eclipse/Idea (да, Idea тоже уже бесплатна).
  • Сборщик мусора аналогичен дефолтовому явовскому, но никаких real-time версий не существует. Следствие — абсолютно бессмысленно писать что-либо, требующее предсказуемых задержек.
  • В синтаксическом сахаре зарыты неочевидные для индусов способы выстрелить себе в ногу. Так как сахар индусы любят, стреляет практически всё.
  • Присутствует возможность работать с памятью напрямую, что убивает зайчатки надёжности, но позволяет делать эпичнейшие по своей убойности костыли (см. Плюсы языка)

[править] Плюсы языка

  • JIT-компиляция производится уже в команды целевой архитектуры (правда, чуть более, чем одной).
  • Огромное количество уже готовых классов на все случаи жизни, только и ждущих чтобы ими воспользовались. Не надо ничего придумывать. Всё уже есть, осталось только скопипастить примеры из документации.
    Впрочем, автор этого пункта сосет хуй: огромное колчество готового кода есть под все более-менее мейнстримовые языки программирования. Так w:Фортран считается копилкой всяких математических алгоритмов. Частью Цпп является стандартная библиотека языка, которая какбе позволяет не заниматся велосипедо-строением и круче вареных яиц при правильном применении[16]. То же самое относится к популярным библиотекам (см. Qt Assistant). На жабе, пхп и т.п. есть туева хуча сорцов, как официальных, так и самопальных. Но как читатель уже понял...
  • Для языка запилена весьма недурственная среда разработки (помноженная на няшный решарпер), которая сама читает мысли быдлокодера и тут же их предугадывает, временами почти как NetBeans. Весь кодинг сводится к нажиманию клавиши EnterTabEnter, Enter (А Таб делают олд-студисты, которые пейсале на Вижуал Бэйсике; хуита, табом создаются в коде реализации функций, реализующих обработку события - набери в VS, допустим, Application.Current.Activated += и зацени что покажет IntelliSense) как знаку согласия, что таки да, компьютер правильно угадал ход мыслей быдлокодера.
  • В разработке языка таки участвовали отцы насквозь матанистого Хаскелля. А они плохого не напридумывают.[17]
  • Примитивные, но всё таки существующие возможности функционального программирования. Без Forced Indention of Code.
  • Тонны новомодного синтаксического сахара, как то: делегаты, интерфейсы, лямбды, setters-getters, итераторы, и многие тысячи свистелок и перделок завязанных на использование в Visual Studio и позволяющие практически достичь идеала быдлокодеров — программирования мыщкой.[18]
  • Присутствует возможность работать с памятью напрямую, что критикуется тру-программистами (см. Минусы языка)
  • Есть виндовая служба "Microsoft .NET Framework NGEN", которая сразу компилит в нативный бинарь (но только, для текущего компа) и кеширует этот бинарник его для последующих запусков.
  • Есть лямбды
  • Есть настоящие (а не только вложенные) многомерные массивы и опционально — проверка переполнения.

[править] Mono

Свободная кроссплатформенная реализация данного C# и .NET. Главный разработчик — Мигель Антифашист де Сервантес Иказа, до этого прославившийся как один из разработчиков Gnome[19][20]. На данный момент более-менее полно реализованы фичи только версии 2.0 микрософтовского поделия.Сейчас уже реализована поддержка .NET 4.0 (кроме, разве что, сугубо анально-виндовской OLE), даже раньше самой Microsoft.

Данная среда породила немало специальных олимпиад, в частности, на ЛОРе. Срачи обострились после призыва Столлмана отказаться от C# для разработки свободных приложений, поскольку патенты на данный язык принадлежат Microsoft. Устные обещания не предъявлять по ним претензии РМС также не устроили, так как, по его мнению, они — филькина грамота, а m$ — известный патентный тролль.

Аргуметны сторонников моно и Мигелюшки следующие:

  • Во многих странах патенты на ПО не действуют.
  • В тех же, в которых действуют, они распространяются только на коммерческое использование патентованных технолоний.[21]
  • Для некоторых задач более свободной альтернативы нет, а изобретать велосипед смысла не имеет, по вышесказанным причинам.[22]

Позже Столлман назвал Мигеля предателем сообщества за то, что тот интегрирует Mono в Gnome, а также за другие не очень хорошие дела, например, за сотрудничество с m$ с цельют переноса свободных программ на Windows.[23]

[править] Интересные факты

  • В компиляторе имеются малоизвестные баги, которым уже 4-5 лет, микрософт закрывает на это глаза. Баг, изображенный на картинке, не в компиляторе шарпа, а в CLR'овском JIT-компиляторе. Компилятор шарпа проверяет тип T2, T2 действительно наследуется от T1, а T1 является ссылочным типом - все кошерно. А вот JIT-компилятор информацией об иерархии наследования T1 при создании конкретной реализации Intermediate по какой-то причине не владеет, поэтому исключение и выбрасывается.
Новый DOS Консоль singularity
Новый DOS Консоль singularity
  • На c# (а точнее, на его двух наследниках spec# и sing#, написаны дрова и прочая поебень) уже написана уже имеет готовое едро и шелл очень быстрая (echo там и правда работает быстро, я гарантирую) операционка singularity[24] с уникальным микроядром (на асме и си) и кучей новшеств. Её довольно часто обсуждают и выдвигают, как основной аргумент прыщеконца. Также известна SharpOS.
  • На c# уже написаны кросс-компиляторы такие как script# для компиляции с# в javascript и jsc compiler для компиляции с#[25] в javascript, actionscript, php, java.
  • Для закрепления анальной оккупации M$ запилил бесплатный (!) учебник для школоты, который можно невозбранно скачать с сайта

[править] Примечания

  1. более правдивая история - в обсуждении статьи
  2. Там он не прижился, но в системах управления умным домом X10 и 1-Wire обосновалась намертво
  3. Какие деньги, Java буквально спасла Sun из могилы.
  4. Да нифига. У жавы было тяжёлое детство. Sun изначально позиционировала её как универсальный язык для веб-сервисов, но до них было ещё рано.
  5. Стиральные машинки решили дополнить экранами
  6. До этого был ужас под названием AWT. Впрочем, для желающих поддержка его сохранилась до сих пор.
  7. И, что самое интересное, за этот относительно небольшой промежуток времени хомячки успели наделать гуев на AWT столько, что до сих пор в интернетах сложно найти НЕ AWT апплетик.
  8. И, что характерно, есть
  9. И, что характерно, никому не нужна и уже умерла.
  10. На самом деле, конечно же, не так всё было. По поводу истории проконсультируйтесь лучше с википедией: en.w:Java, en.w:J++, en.w:C_Sharp_(programming_language)
  11. Бинарный код, выдаваемый современными с++-компиляторами декомпиляции не поддаётся в силу хотя бы той же оптимизации: компиляторы давно научились переносить переменные в регистры, раскрывать циклы, инлайнить функции и делать прочие чудеса, в том числе на уровне отдельных машинных инструкций. Поэтому формально декомпилировть с++ можно, но в результате получится хуита прога, формально компиляемая, но по сути представляющая собой машинные инструкции, реализованные на с++. Т.е. разобраться в ней без стакангенса ничуть не легче, чем загрузив бинарник в биореактор дизассемблер.
  12. Вообще-то это проблема .NET как такового, а не языка. БТВ, никто не заставляет транслировать C# в легко разбираемый CIL, можно делать прекомпиляцию.
  13. Курите DotFuscator и .NET Protector
  14. Быдлокодер интересуется, какие-такие сверхсекретные велосипеды собственного изобретения собрались прятать в прикладных программах труъ-программисты?
  15. Насмешил. Сам-то наверное по опенсорсным сайтам типа кодепроджекта шаришься, дабы скопипиздить какую-нить херню.
  16. и тут хотелось бы увидеть в этой чудо-библиотеке функцию split, которая работает с basic_string
  17. Подумаешь, среди верховых разрабов Java полно звёзд хакерской культуры. Кто-то ими был и до этого, кто-то (в том числе Отец) стал как раз из-за жабы, что символизирует. Причём в отличие от, они были инициаторами и драйверами проекта, а не просто бегали за пивом для лабающих в проекте индусов дабы хоть как-то отмотать проплаченные им за ниибацо крутой скилл рабочие часы.
  18. Ололо, это то лямда-исчисления - новомодный синтаксический сахар?
  19. А так же созданием клона рассово верного Norton Commander'а для Linux - Midnight Commander aka mc
  20. Кроме того участвовал в портировании ядра на Sparc
  21. Аргумент не совсем состоятельный, посколько свободное ПО по определению может использоваться и в коммерческих целях. А ПО, которое обладает всеми критериями свободности, за исключением коммерческого использования, в терминологии Столлмана называется полусвободным и относится к несвободному.
  22. Тоже не очевидно, противники mono предлагают, например, Python и ту же Жабу.
  23. Ответный пост в блоге Мигеля по поводу Столлмана доставляет Пруф
  24. Убогая cosmos едёт нахуй.
  25. На самом деле не c#, а IL
Источник — «http://lurkmore.ru/C_Sharp»
Личные инструменты
Инструменты
На других языках