C Sharp
Материал из Lurkmore.
НЕНАВИСТЬ! Данный текст содержит зашкаливающее количество НЕНАВИСТИ. Мы настоятельно рекомендуем убрать от мониторов людей, животных со слабой психикой, кормящих женщин и детей. |
Осторожно! Срач в примечаниях! Примечания к данной статье противоречат ей самой, поскольку кто-то использовал их в полемических целях. Необходимо либо исправить статью в соответствии с примечаниями, либо удалить их нахуй. |
В эту статью нужно добавить как можно больше копирастии Солнца и коварных планов Мелко$офта. Также сюда можно добавить интересные факты, картинки и прочие кошерные вещи. |
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 по какой-то причине не владеет, поэтому исключение и выбрасывается.
- На c# (а точнее, на его двух наследниках spec# и sing#, написаны дрова и прочая поебень)
уже написанауже имеет готовое едро и шелл очень быстрая (echo там и правда работает быстро, я гарантирую) операционка singularity[24] с уникальным микроядром (на асме и си) и кучей новшеств. Её довольно часто обсуждают и выдвигают, как основной аргумент прыщеконца. Также известна SharpOS. - На c# уже написаны кросс-компиляторы такие как script# для компиляции с# в javascript и jsc compiler для компиляции с#[25] в javascript, actionscript, php, java.
- Для закрепления анальной оккупации M$ запилил бесплатный (!) учебник для школоты, который можно невозбранно скачать с сайта
[править] Примечания
- ↑ более правдивая история - в обсуждении статьи
- ↑ Там он не прижился, но в системах управления умным домом X10 и 1-Wire обосновалась намертво
- ↑ Какие деньги, Java буквально спасла Sun из могилы.
- ↑ Да нифига. У жавы было тяжёлое детство. Sun изначально позиционировала её как универсальный язык для веб-сервисов, но до них было ещё рано.
- ↑ Стиральные машинки решили дополнить экранами
- ↑ До этого был ужас под названием AWT. Впрочем, для желающих поддержка его сохранилась до сих пор.
- ↑ И, что самое интересное, за этот относительно небольшой промежуток времени хомячки успели наделать гуев на AWT столько, что до сих пор в интернетах сложно найти НЕ AWT апплетик.
- ↑ И, что характерно, есть
- ↑ И, что характерно, никому не нужна и уже умерла.
- ↑ На самом деле, конечно же, не так всё было. По поводу истории проконсультируйтесь лучше с википедией: en.w:Java, en.w:J++, en.w:C_Sharp_(programming_language)
- ↑ Бинарный код, выдаваемый современными с++-компиляторами декомпиляции не поддаётся в силу хотя бы той же оптимизации: компиляторы давно научились переносить переменные в регистры, раскрывать циклы, инлайнить функции и делать прочие чудеса, в том числе на уровне отдельных машинных инструкций. Поэтому формально декомпилировть с++ можно, но в результате получится
хуитапрога, формально компиляемая, но по сути представляющая собой машинные инструкции, реализованные на с++. Т.е. разобраться в ней без стакангенса ничуть не легче, чем загрузив бинарник вбиореактордизассемблер. - ↑ Вообще-то это проблема .NET как такового, а не языка. БТВ, никто не заставляет транслировать C# в легко разбираемый CIL, можно делать прекомпиляцию.
- ↑ Курите DotFuscator и .NET Protector
- ↑ Быдлокодер интересуется, какие-такие сверхсекретные велосипеды собственного изобретения собрались прятать в прикладных программах труъ-программисты?
- ↑ Насмешил. Сам-то наверное по опенсорсным сайтам типа кодепроджекта шаришься, дабы скопипиздить какую-нить херню.
- ↑ и тут хотелось бы увидеть в этой чудо-библиотеке функцию split, которая работает с basic_string
- ↑ Подумаешь, среди верховых разрабов Java полно звёзд хакерской культуры. Кто-то ими был и до этого, кто-то (в том числе Отец) стал как раз из-за жабы, что символизирует. Причём в отличие от, они были инициаторами и драйверами проекта, а не просто бегали за пивом для лабающих в проекте индусов дабы хоть как-то отмотать проплаченные им за ниибацо крутой скилл рабочие часы.
- ↑ Ололо, это то лямда-исчисления - новомодный синтаксический сахар?
- ↑ А так же созданием клона рассово верного Norton Commander'а для Linux - Midnight Commander aka mc
- ↑ Кроме того участвовал в портировании ядра на Sparc
- ↑ Аргумент не совсем состоятельный, посколько свободное ПО по определению может использоваться и в коммерческих целях. А ПО, которое обладает всеми критериями свободности, за исключением коммерческого использования, в терминологии Столлмана называется полусвободным и относится к несвободному.
- ↑ Тоже не очевидно, противники mono предлагают, например, Python и ту же Жабу.
- ↑ Ответный пост в блоге Мигеля по поводу Столлмана доставляет Пруф
- ↑ Убогая cosmos едёт нахуй.
- ↑ На самом деле не c#, а IL
[ + ] Любой программист без словаря поймёт, что такое C Sharp
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|