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»
Личные инструменты
Инструменты
На других языках