Последнее время заметил наличие на LOR любителей Mono. Вспомнил про письмо, которое когда-то отправил одному знакомому вендузятнику и решил запостить здесь. Обычно поклонники Mono говорят что-то вроде "оставьте нас, мы никому не мешаем". Так вот, это - не так.
Chapter one: Почему на Венде .Net - приемлемо (даже, может, нормально)
Windows изначально создавали и потом совершенствовали тяп-ляп: лишь бы быстрей выпустить новую версию и начать пиар. На пиар уходило максимум средств. Программистам платили мало (сейчас вроде более-менее). + Сама архитектура и идея в корне были расчитаны именно на десктопное применение. На начальных ступенях своего развития идея NT еще могла держаться, но потом ей заперла путь огромная куча дерьма из ужасно неудобных (точнее трижды 193ых) и по самой своей сути небезопасных API и архитектуры. Чтобы на ней что-то строить дальше нужно было что-то предпринять. И они это сделали. Они посмотрели, как соседи стоили свой.... гамак и решили, что те изобрели нечто гениальное, но долго не могли понять, почему же те дураки не живут в гамаке и не поставили туда даже мебели. MS соорудила мощные шесты, воткнула их в говно, растянула великую ткань, поставила туда кровать ;) и еще шкаф, телевизор, тумбочку и пр. пр. пр.. Да... Стало гораздо удобнее. Не спорю. Но только чтобы зайти туда, нужно сначало пройти по колено в дерьме, а при выходе в дерьмо же попадаешь. Я уж не говорю про то, что для дома гамак, мягко говоря, не есть лучший выбор ;) (тем более весь в грязных следах и запахах). Но и не спорю: так стало гораздо лучше, даже чем-то очень неплохо.
Chapter two: Почему Common Language Runtime - угроза человечеству
Все бы ничего, если бы .Net жила себе и никого не трогала. Но нет же. Во первых нас насильно переводят на эту технологию. Под Венду уже проблематично найти компилятор, создающий машинный код (gcc разве что). Вся Студия ориентирована на .Net (нативные проекты есть только в Enterprise, но они являются не более чем от JITиным кодом, который все-равно запускается под VM). Да даже не в этом дело. Сама тенденция не оставляет выбора. Более того, MS уже давно готовит .NET OS (Singularity), в которой в принципе нельзя будет программировать ни ни чем, кроме Фреймворка. Это значит, что те языки, на которые программисты молились десятилетиями (Си, assembler, классический Си++, ....) будут ликвидированы. Такого в практике еще не было никогда. Языки теряли популярность (далеко не все), но использовать ты мог всегда все, что угодно. Функциональное и линейное программирование отомрут как класс (не class, а класс, хотя я был бы рад увидеть смерть class'а). Объектная ориетированность будут насаждаться сверху. Без объектов ты уже ничего не сделаешь. Нельзя будет, как в UNIX, восхищаться простотой архитектуры, ибо ОС превратится в спагетти из объектов. Даже их консоль уже объектно-ориентированная! Низкоуровневое программирование, Кнут - все будет забыто. Воцарится мир кодеров, им будут мало платить, а настоящих программистов выкинут на помойку. Недостаток .Net еще и в том, что он стремится все решить в самом общем случае, в то время как каждая задача требует конкретного подхода, своих типов данных, своих алгоритмов. Например Фреймворк заточен на статическую типизацию, с Perl и Python он справится хуже. Real-Time требует экономии каждого такта процессора, а один сборщик мусора жрет ресурсы как.... эээмм... ну чудо-юдище например. Его нельзя и не нужно использовать для всех переменных. Они хотят отнять свободу, а для нас это самое ценное. +Производительность это не "не главное", а в наше время, когда процессоры приближаются к своему пределу, очень важно. А в будущем еще важней - когда-нибудь прогресс остановится вообще. К тому же не понимаю, зачем нужна виртуальная машина .Net? Для Явы она служила средством кроссплатформенности. Здесь, если даже говорить про безопасность (которую должна обеспечивать в первую очередь ОС), .Net нужна лишь для тех программ, которые подключаются к портам (веб-сервер, фтп-сервер,...). Через Word компьютер не взломаешь. К тому же многоязыковость эта мнимая. Все языки .Net имеют общий каркас библиотек, который приводит к потере индивидуальности и отличию языков только синтаксисом. В итоге выходит как-бы один язык с массой вариаций. Это, в свою очередь, приведет к тому, что кроме C# никто ничем пользоваться не будет, ибо он использует возможности Фреймворма по максимому и позиционируется как лучший. Нечто похожее уже было в истории - Borland стремилась сделать Pascal и C++ совместимыми, а получила 2 практически идентичные среды разработки.
Chapter tree: Почему Mono - позор и наркотик Linux'а
Linux - идеальная среда разработчика. Помимо удобнейшего API, тебе даже не обязательно им пользоваться: очень многие задачи можно решить через файловую систему, переменные среды и команды консоли (вызов через функцию system(char*) ). например нужно тебе найти какой-то файл (программу, библиотеку, ...) ты пишешь /usr/lib/abc.so или /bin/abc или ~/myhome. Тебе не нужны ф-ии GetSystemDirectory, Get<че-то там еще, не помню>. Эти диски еще проклятые: C:, D:,... Надо записать образ на флопик - пожалуйста! Открываешь файл /dev/fd0 и пишешь туда (если надо, то в нужную позицию). Пишешь драйвер? Открой /dev/<устройство> и говори с ним (пиши/читай). Плюс все программы взаимосвязаны и легко управляемы. Ты можешь расчитывать (или потребовать в зависимостях), что у пользователя стоит программа записи CD, менеджер закачек или еще какая-то лабуда и не писать сто раз одно и тоже, а использовать прогу. Я например никогда на качаю по http/ftp из инета функциями Си. Юзаю wget. Список можно продолжать. И это при том, что и само API замечательное. И безопасное по своей сути. Ах, забыл сказать, что в UNIX входит куча интерпретаторов (awk, Perl, Python, TCL/Tk, Ruby, Java, shell, Lua, ......). На Венде ты не попишешь на таких языках, ибо ни у кого их нет. Еще есть библиотека GTK. Она на Венду плохо портируется. А Mono на LOR ненавидят. Она призвана создавать проблемы. Проклятая и продажная Novell!! Mono разрушает баланс, созданный тысячилетиями. Притом в ней нет смысла: Java есть, а по простоте кодинга Mono/.Net примерно равны Си++ на *nix.