« Отговор #30 -: May 09, 2010, 09:14 »
Не става дума на какво е писан Spellbook(днес между другото ще пусна най-сетне версия 0.3). Просто помня времето, когато преди 5 години във форума се водеха много смислени дискусии и беше полезно човек да прекарва време тук. Напоследък като преглеждам темите - всичко е или безсмислени спорове с не особено солидна обосновка от всяка страна и предъвкване на елементарни неща, които са дискутирани по хиляда пъти. Затова и рядко пиша вече - ама тая тема като я видях - не можах да се сдържа. Аз съм сигурно съм критикувал Java (езика) повече от всеки друг - но критиката от мен е в духа - "Грануляритета на многонишковите програми можеше да е по-добър", "Ех, да имаше поддръжка на closures", "Кой идиот направи switch-а без поддръжка на низове", "Не можеха ли да сложат някакъв културен ситанксис за директно манупулиране на колекции", "Ама от getter-и и setter-и", "Кой измисли тая грешка на природата checked exceptions" и т.н. За JVM-а единственото, което ме дразни е малко големия memory footprint като boot-не, и че няма поддръжка за динамично изпълнение на методи. Много от тези неща ще бъдат оправени в Java 7, която ще излезе тази година между другото...
Та мисълта ми е следната - едно е да се впуска човек в градивна критика - друго е да повтаря едни и същи не особено верни нещо. JVM беше действително много неефективен до 1.4, в 1.6 имаше огромни подобрения в тази сфера - повечето хора, обаче, не следят, тези развития. Те просто си говорят каквото си знаят. Едно дългроработещо Java приложение поне на теория е възможно в един момент да заработи по-бързо дори от приложение компилирано директно до машинен код благодарение на това, че виртуалната машина идентифицира с времето ключовите места в приложението, кешира и оптимизира генерирания код за конкретната микроархитектура. Като компилирате едно С приложение е малко досадно да правите отделен билд за всяка възможна целева платформа за да използва човек всички възможни процесорни възможности - за това приложенията обикновено се компилират с консервативни опции, за да работят на най-много машини.
И още нещо - не обичам Java чак толкова много :-) Любовта ми към Lisp не познава граници, но ми е неприятно да чета тоя flame подобен контент и просто затова се издразних толкова. Мир, братя! (и код и бира) ;-)
@dvd - статия от 2007ма не е мерило - JRuby се развива изключително активно. Версия 1.5 е почти готова и тя се очаква съвсем да ликвидира задочния спор с MRI. Въвеждането на invoke dynamic инструкцията в JDK 7 ще вдигне производителността на JRuby в пъти - алтернативните имплементации да му мислят...
@backtolife,
Аз съм дългогодишен C/C++ програмист - на С можеш да направиш абсолютно всичко! Въпроса, обаче, е - искаш ли да си го причиниш. Хората рядко си дават сметка, че най-ценния ресурс на един програмист е неговото време и понякога е безумно да си загубиш много време за да спечелиш малко производителност. Много лоша идея е да тръгнеш да пишеш уеб или enterprise приложения на C - за леко натоварените сайтове php, ruby, python царуват(а дори и за не толкова леки), java и .net са ествествения избор за супер тежки enterprise приложения.
На Java не можеш да пишеш системен софтуер - примерно ядро на OS, драйвери и т.н., т.е. ти можеш да ги пишеш на езика Java, ама това ще трябва да си компилирал до машинен код, освен ако не намериш начин да bootstrap-неш някаква малка jvm преди да ти напали ядрото на системата. Помня, че имаше нещо такова писано на .нет, а навремето имаше и едно недоразумение JavaOS. Във всеки случай - системния софт е едно от местата, където ефективността е критична и С и асемблер се очертава да царуват там вечно. Подобно е ситуацията с игрите - никой не иска да играя Doom 6/7/8 върху виртуална машина, всеки иска максимум производителност и затова почти всички игри се разработват на C++. Всеки език и платформа си имат предимствата и минусите - важно е човек да е запознат с тях, която селектира технологиите, в който и да е нов проект.