Как бы не хотелось в это не верить, но тем не менее NET-овская виртуальная машина жрёт памяти
меньше, чем Java-машина. Да и работают C# приложения побыстрее. 2 главных недостатка же у C# -
он не кроссплатформенный и не бесплатный при том, что мало чем от Java отличается.
> Как бы не хотелось в это не верить, но тем не менее NET-овская виртуальная машина жрёт памяти меньше, чем Java-машина.
а код на сях/плюсах все равно быстрее. да и вообще, языки со сборщиками мусора нужны для унылых мозгом. если программу продумать заранее, то проблем с утечками памяти будет мало/небудет.
1. жрёт более ресурсов, раза в полтора-два, по сравнению с .NET 1.0. Например, сравни Студии 2003, 2005.
2. поломали совместимость в платформе, 1.0->2.0->3.5. Хотя местами не сильно, местами серьёзно. То есть смысл его как "кроссплатформенной платформы" не ясен.
3. Язык C# постепенно усложняется и превращается в свалку. То хотели сделать простой язык как Ява, с чуть более удобным синтаксисом, то стали туда добавлять замыкания, лямбды (это ладно, это хорошо) и LINQ, SQL, XML запросы (а это уже свалка).
4. По Mono -- ну наверно самый его большой недостаток что оно вечно будет в позиции догоняющего а .NET сам по себе не шибко стабильный в языке и платформе.
5. ASP.NET с визуальным билдером веб-формочек потенциально приводит к тому, что быдлокодеры, кидающие кнопки на форму в стиле Дельфи продолжают лепить в студии аналогичным образом веб-приложения. Вместо изучения нормального MVC итп.
Самый быстрый код в машинных кодах. Да и вообще языки со словами нужны для унылых мозгом, если программу продумать заранее то проблем с программированием в машинных кодах будет мало/не будет.
> языки со сборщиками мусора нужны для унылых мозгом
Ты забываешь про огромный фреймворк, который они предоставляют. Писать enterprise, например, на С/С++ бредово.
А по-поводу унылых мозгом: в Lisp тоже сборщик мусора есть, и ты будешь утверждать, что он для унылых мозгом?
Сборщик мусора в функциональном языке не понадобится, так как у чистых функций нет побочных эффектов, а всё, что происходило во время вызова функции (кроме результата) уничтожится при завешении вызова.
> Сборщик мусора в функциональном языке не понадобится, так как у чистых функций нет побочных эффектов, а всё, что происходило во время вызова функции (кроме результата) уничтожится при завешении вызова.
Угу, вот в том-то и фишка, что результат может тянуть за собой всё, что было во время вызова функции. Отсюда и необходимость сборщика мусора.
> ASP.NET с визуальным билдером веб-формочек потенциально приводит к тому, что быдлокодеры, кидающие кнопки на форму в стиле Дельфи продолжают лепить в студии аналогичным образом веб-приложения. Вместо изучения нормального MVC итп.
Результат может быть сложной структурой, или замыканием, или ещё чем-то там. Соответственно, структура зависимостей между различными частями информации в памяти столь же сложна, как и в ООП-языке. Добавь сюда ещё принципиальную невозможность явно освободить некоторые вещи (например, то, что лежит в замыкании), даже если бы язык поддерживал ручное управление памятью. Итого получаем: функциональный язык без сборки мусора невозможен.
То, о чём вы толкуете, молодой человек, известно как "подсчёт ссылок". Это и есть один из методов уборки мусора. Он не так прост, как вам могло показаться на первый взгляд, хотя бы из-за очевидных проблем с циклами. Кроме того, наивный подсчёт ссылок приводит к более низкой производительности по сравнению с современными отслеживающими сборщиками, так что приходится идти на разные ухищрения и оптимизации (что отнюдь не прибавляет коду простоты). А когда дело доходит до многопоточности, то ситуация ещё более того усложняется. Так-то.