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, освоить язык для полноценного его использования не составит труда, а то и вовсе не потребуется. Впрочем, с выходом .NET 3.5, и последующих версий платформы, ситуация меняется в сторону повышения порога вхождения, из-за функциональщины, о которой Жабист никогда и не слышал.
- НИКАКАЯ защита кода. Если программа на С++ поддаётся декомпиляции только при глубоких познаниях в (диз-)ассемблере и Дао, то в C# исходный код программы легко и просто получается программками типа Reflector в доли секунды и декомпилируется без ошибок вплоть до названия переменных. Полученная декомпиляция отличается от авторской разве что отсутствием комментариев — такой вот Open Source поневоле. Единственная защита — сторонние программы-обфускаторы, переименовывающие все названия функций и переменных в рандомный бред и знатно унавоживающие код бесполезными инструкциями, после чего рабочий исходник компилируется в тормозное говно, но абсолютно не читабелен и выглядит как говно же.
[править] Минусы языка
- Железная привязка к винде. Наличие всяких DllImport и использование Handle контролов для WinApi/WMI хоронит всю сферическую кроссплатформенность на корню. Существует опенсорсный проект Mono, о котором читайте ниже.
- Требует наличия соответствующей версии рантайма, установленной на машине. Проблема похожа на оную с DirectX у геймеров.
- Чтобы вести нормальную коммерческую деятельность в этой стране, придётся затариться лицензиями винды, лицензиями на Visual Studio (впрочем, существует и довольно функциональная бесплатная версия) и лицензиями на Resharper.
- Сборщик мусора аналогичен дефолтовому явовскому, но никаких real-time версий не существует. Следствие — абсолютно бессмысленно писать что-либо, требующее предсказуемых задержек.
- В синтаксическом сахаре зарыты неочевидные для индусов способы выстрелить себе в ногу. Так как сахар индусы любят, стреляют практически все.
- Присутствует возможность работать с памятью напрямую, что убивает зайчатки надёжности, но позволяет делать эпичнейшие по своей убойности костыли. Сделано, как это обычно бывает у 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. В ответ Мигель заметил, что Господь любит всех живых существ, даже Столлмана.
[править] Интересные факты
- На C# (а точнее, на его двух наследниках spec# и sing#) уже имеет готовое ядро и шелл очень быстрая операционка singularity с уникальным микроядром (на асме и си) и кучей новшеств. Её довольно часто обсуждают и выдвигают, как основной аргумент прыщеконца. Также известна SharpOS.
- На c# уже написаны кросс-компиляторы, такие как script# для компиляции с# в javascript и jsc compiler для компиляции на IL в javascript, actionscript, php, java.
- Для закрепления анальной оккупации MS запилил бесплатный учебник для школоты, который можно невозбранно скачать с сайта
- Лондонская фондовая биржа (London Stock Exchange, LSE) в 2010 завершила предварительное тестирование своей новой торговой системы Millennium Exchange. Millennium Exchange основана на Linux/Solaris и технологиях Oracle. Уже в ноябре она должна заменить прежнюю систему — печально известную TradElect, созданную на основе Microsoft .Net, работающую под управлением Windows и ответственную за серию тяжелых сбоев в работе биржи в течение нескольких последних лет, в том числе восьмичасового простоя в 2008 году. Millennium Exchange будет одной из самых быстрых торговых систем: характерное время обработки составляет 125 мкс. Прежде LSE прилагало все усилия, чтобы снизить время обработки в TradElect хотя бы ниже 2000 мкс, что все равно очень медленно по сравнению с конкурентами LSB, например, компанией Chi-X, которая использует основанную на Linux систему MarketPrizm с временем обработки 400 мкс.
- Что самое пикантное — проект внедрения системы TradElect в LSE долгое время (до сбоев и простоев) использовался самой Microsoft в рамках рекламной компании Get The Facts (о якобы преимуществах ее решений над Linux и т. д.)
- Еще более пикантным стал сбой LSE буквально через две недели после перехода на «быстрый и безотказный» Millennium Exchange. Видимо, на зеркало неча пенять, коли рожа крива.
- «C-Pound» стал локальным мемом сайта http://thedailywtf.com.
[править] Примечания
- ↑ От C# ждут относительно безопасной работы с памятью — вот вам ссылки. Но если не дать возможность работать с указателями, все кто мнят себя труЪ си-кодерами сразу завопят об убогости и ущербности языка. Так что вот вам unsafe.
- ↑ Анонимус сам однажды полчаса ебался с шарпом, пытаясь осознать следующее: к проге через референсес подключена длл с неймспейсом вида a.b.c, из которой нужна буквально одна вшивая функция. Каково же было удивление анонимуса, когда оказалось, что класс одного из аргументов находится в этом же неймспейсе, но в другой длл(а если с названиями самих пространств более-менее все понятно, то названия библиотек исходят порой из принципа минимализма), которую хер найдешь, а возвращаемый тип содержится в неймспейсе a.b, который хоть и подключен вместе с либой, да версия-то не та! (Хотя про версии — тоже детская болезнь на сегодняшний день)
[ + ] Любой программист без словаря поймёт, что такое C Sharp
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|