C Sharp
Материал из Lurkmore
![]() | НЯ! Эта статья полна любви и обожания. Возможно, стоит добавить ещё больше? |
| Эту статью или раздел следует развикифицировать. Эта статья выглядит как или даже является копипастой из википедии. Здесь полностью отсутствуют лулзы, описание драм и прочие ништяки, зато присутствуют нейтральная точка зрения™ и унылая спискота, а также в ней много узкоспециализированной информации сомнительной ценности и энциклопедических терминов. Необходимо срочно привести статью в удобоваримый вид, пока не случилось страшное. |
C# (Си-шарп и прочие неверные произношения: Си-сярп, Си-решетка, До-диез, Цэ-решетка, Си-вафля, Цесарка, Сисетка, C-Pound) — мейнстримовый язык для промышленной разработки на платформе .Net, объединивший в себе мощь Java и простоту C++. Наряду с жабой же является стандартом де-факто энтерпрайза (чем и обуславливаются высококультурные диалоги между адептами противоборствующих сторон). В силу своей молодости ещё достаточно девственнен, но уже успел подобрости говном.
Содержание |
[править] История
Давным-давно корпорация Sun решила разработать язык для стиральных машинок, но ввиду отсутствия в те времена в них интернетов, перенесённом на серверы. Разработки его велись более 5 лет с привлечением истинных гуру вроде Никлауса Вирта, чья реализация сборщика мусора попала в код первых версий.
И вот 23 мая 1995 года вышла наконец 1.0 версия языка. C этого момента начинается стремительный рост популярности языка, который в очередной раз вытащил Sun из могилы. Корпорация Sun всовывает поддержку Java всюду где только можно. Java уже поддерживали как Интернет-браузеры, так и самые распоследние мобильники.
Версия 1.2, вышедшая в 1998 году, уже имела поддержку GUI интерфейса (стиральные машинки решили дополнить экранами) под названием SWING, а до этого был ужас под названием AWT. Впрочем, для желающих поддержка его сохранилась до сих пор. И, что самое интересное, за этот относительно небольшой промежуток времени хомячки успели наделать гуев на AWT столько, что до сих пор в интернетах сложно найти НЕ AWT апплетик). В этот момент Билл Гейтс, глава Microsoft, осознав фатальный недостаток языка, принял решение о создании клона Java для Windows. Была реализована Microsoft JVM и поддержка языка J++ была включена в фирменные средства разработки. Sun это сильно не понравилось и они подали на Гейтса в суд. От J++ пришлось отказаться, но наработки были использованы в новом проекте: всего за 3 года в ударных темпах родился язык C#.
Существует так же альтернативная версия, что создатель C# придумал .NET пока работал на Borland. Но там его не поняли, и он ушел в Microsoft писать J++, а потом умело пропихнул свою идею и все завертелось. И что были даже какие-то разборки между Borland и Microsoft на тему авторства.
[править] Особенности языка
- Компиляция в промежуточный язык.
- Достаточно низкий порог вхождения. Человеку, обученному C++ и тем более имеющему опыт с Java, освоить язык для полноценного его использования не составит труда, а то и вовсе не потребуется.
- НИКАКАЯ защита кода. Если программа на С++ поддаётся декомпиляции только при глубоких познаниях в (диз-)ассемблере и Дао, то в C# исходный код программы легко и просто получается программками типа Reflector в доли секунды и декомпилируется без ошибок вплоть до названия переменных. Полученная декомпиляция отличается от авторской разве что отсутствием комментариев — такой вот Open Source поневоле. Единственная защита[ЩИТО?] — сторонние программы-обфускаторы, знатно унавоживающие код бесполезными инструкциями, после чего рабочий исходник компилируется в тормозное говно, но абсолютно не читабелен и выглядит как говно же.
[править] Минусы языка
- Требует наличия соответствующей версии рантайма, установленной на машине. Проблема похожа на оную с DirectX у геймеров.
- Чтобы вести нормальную коммерческую деятельность в этой стране, придётся затариться лицензиями винды, лицензиями на Visual Studio (впрочем, существует и довольно функциональная бесплатная версия) и лицензиями на Resharper.
- Сборщик мусора аналогичен дефолтовому явовскому, но никаких real-time версий не существует. Следствие — абсолютно бессмысленно писать что-либо, требующее предсказуемых задержек.
- В разработке языка участвовали отцы Хаскелля и Delphi.
- Возможности функционального программирования.
- В синтаксическом сахаре зарыты неочевидные для индусов способы выстрелить себе в ногу. Так как сахар индусы любят, стреляют практически все.
- Присутствует возможность работать с памятью напрямую, что убивает зайчатки надёжности, но позволяет делать эпичнейшие по своей убойности костыли. Сделано, как это обычно бывает у Microsoft, из маркетинговых соображений[1].
- Неймспейсы. Нет, сами по себе они очень даже хороши, но как Windows реализовала идею (особенно со стандартными пространствами имен, коих дохуя) — это, братцы, просто …[2].
- Язык создан Империей добра. Впрочем, с покупкой Sun компанией примерно такого же зла альтернатива стала ещё опасней.
[править] Плюсы языка
- Средний порог входа. Кодить с наскоку как в пыхе не выйдет.
- JIT-компиляция производится уже в команды целевой архитектуры (правда, чуть более, чем одной). Ну да, windows mobile за платформу не считают.
- Огромное количество уже готовых классов на все случаи жизни, только и ждущих чтобы ими воспользовались. Не надо ничего придумывать. Всё уже есть, осталось только скопипастить примеры из документации.
- Для языка запилена собственная среда разработки. (спойлер: подробности опускаются во избежание IDE срача)
- В разработке языка участвовали отцы Хаскелля и Delphi.
- Возможности функционального программирования.
- Тонны свистелок и перделок, как то: делегаты, интерфейсы, properties и многие тысячи других, завязанных на использование в Visual Studio и позволяющие практически достичь идеала быдлокодеров — программирования мыщкой.
- Присутствует возможность работать с памятью напрямую, что критикуется тру-программистами.
- Есть служба «Microsoft .NET Framework NGEN», которая сразу компилит в нативный бинарь и кэширует этот бинарник его для последующих запусков.
- Неймспейсы. Таки приятно, когда знаешь, что подключаешь, и что где сидит.
- Есть настоящие (а не только вложенные) многомерные массивы и опционально — проверка переполнения.
[править] Mono
Свободная кроссплатформенная реализация данного C# и .NET. Главный разработчик — Мигель де Иказа, до этого прославившийся как один из разработчиков Gnome. Сейчас уже реализована поддержка .NET 4.0 (кроме, разве что, OLE).
Эта среда породила немало специальных олимпиад, в частности, на ЛОРе. Срачи обострились после призыва одного полоумного бомжа отказаться от C# для разработки свободных приложений, поскольку патенты на данный язык принадлежат Microsoft. Устные обещания не предъявлять по ним претензии бомжа также не устроили, так как, по его, бомжа, мнению, они — филькина грамота.
Аргументы сторонников моно и Мигелюшки следующие:
- Во всех странах, кроме пиндостана, патенты на ПО не действуют.
- В тех же, в которых действуют, они распространяются только на коммерческое использование патентованных технолоний. Аргумент не совсем состоятельный, посколько свободное ПО по определению может использоваться и в коммерческих целях. А ПО, которое обладает всеми критериями свободности, за исключением коммерческого использования, в терминологии Столлмана называется полусвободным и относится к несвободному.
- Для некоторых задач более свободной альтернативы нет, а изобретать велосипед смысла не имеет, по вышесказанным причинам. Тоже не очевидно, противники Mono предлагают, например, Python. Раньше предлагалось использовать жабу, но после недавних событий она тоже стала не нужна.
- Большая часть .NET изложена в стандарте ECMA, а эту часть Microsoft сам выпустил под свободной патентной (не софтварной) лицензией. Остальное для работы линуксового монософта не нужно (только для совместимости с виндовым). Это мнение указано в FAQ проекта Mono.
Позже Столлман назвал Мигеля предателем сообщества за то, что тот интегрирует Mono в Gnome, а также за другие не очень хорошие дела, например, за сотрудничество с MS с цельют переноса свободных программ на Windows. В ответ Мигель заметил, что Господь любит всех живых существ, даже Столлмана.
Вообще весь .NET является причиной попоболи всех красноглазых, поскольку уже сам факт его существования часто становится доказательством того что линукс не нужен не только на десктопе, но и на сервере(никто ведь не будет запускать серьезный проект под Mono). Множество успешных проектов на ASP.NET и вебсервисов тому доказательство.
[править] Интересные факты
- На C# (а точнее, на его двух наследниках spec# и sing#) уже имеет готовое ядро и шелл очень быстрая операционка singularity с уникальным микроядром (на асме и си) и кучей новшеств. Её довольно часто обсуждают и выдвигают, как основной аргумент прыщеконца. Также известна SharpOS.
- На c# уже написаны кросс-компиляторы, такие как script# для компиляции с# в javascript и jsc compiler для компиляции на IL в javascript, actionscript,
- Для помощи начинающим разработчикам MS запилила бесплатный учебник, который можно невозбранно скачать с сайта
- «C-Pound» стал локальным мемом сайта http://thedailywtf.com.
[править] Примечания
- ↑ От C# ждут относительно безопасной работы с памятью — вот вам ссылки. Но если не дать возможность работать с указателями, все кто мнят себя труЪ си-кодерами сразу завопят об убогости и ущербности языка. Так что вот вам unsafe.
- ↑ Анонимус сам однажды полчаса ебался с шарпом, пытаясь осознать следующее: к проге через референсес подключена длл с неймспейсом вида a.b.c, из которой нужна буквально одна вшивая функция. Каково же было удивление анонимуса, когда оказалось, что класс одного из аргументов находится в этом же неймспейсе, но в другой длл(а если с названиями самих пространств более-менее все понятно, то названия библиотек исходят порой из принципа минимализма), которую хер найдешь, а возвращаемый тип содержится в неймспейсе a.b, который хоть и подключен вместе с либой, да версия-то не та! (Хотя про версии — тоже детская болезнь на сегодняшний день)
|
[ + ] Любой программист без словаря поймёт, что такое C Sharp
|
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
|||||||||||

