Жаба
Материал из Lurkmore.
Эта статья сделана из уныния и отчаяния. Сделайте с ней что-нибудь. Пожалуйста. |
НЯ! Эта статья полна любви и обожания. Возможно, стоит добавить ещё больше? |
Жа́ба (жарг.) — искажённое название языка программирования Java — быдлокодерского языка, из которого выпилили беззнаковые типы данных и указатели. Определённой эмоциональной окраски не несёт, но, ввиду плохого отношения к Java значительной части населения ЛОРа, чаще употребляется в уничижительных выражениях (жабокодер, жабобыдлокодер и т. д.). Это значение популяризовано Луговским. Алсо, жабонебыдлокодеры имеют зарплату, на которую можно купить не только хлеб, воду и сало, как похапекодерам. А некоторым хватает еще и на черную икру, феррари и 25-летний виски [1].
Наиболее характерной (и уже много лет как не слишком актуальной) претензией является низкая скорость работы, связанная, в основном, с особенностями национального программирования.
Есть версия, что миф о «тормознутости» Java еще связан с тем, что в доисторические времена в браузерах были апплеты, которые адски тормозили.
Виртуальная машина тогда была очень паршивая. Соответственно, открытие странички с Java-апплетом вызывало «подвисание» браузера на минуту-другую, часто с надписями типа «Апплет com.something.else загружается…»«Приложеньице загружается…». Что не могло не радовать пользователей. Особенно цинично это выглядело, когда причиной тормозов был апплет с анимированной кнопкой «e-mail» размером 100 на 50 пикселей. Были даже спецпрограммы, чтобы генерировать такие апплеты для говносайтов.
Алсо, в доисторические времена не было JIT-компиляции, машина занималась лишь интерпретацией. JIT сильно ускорил процесс. При обращении к какому-либо участку кода, который исполняется уже сотню-другую раз(как известно, 80% всего рантайма исполняется 20% кода), он компилируется виртуальной машиной в реальный машинный код, что, естественно, прибавляет скорости.
Также Java облегчает труд девелопера с помощью использования GC (garbage collector, тоже довольно тяжёлой штуки). В связи с этим программы на Java плохо переносят использование свопа, так как при удалении объектов из памяти, GC проходится по множеству объектов.
К достоинствам джавы можно отнести следующее:
- долгий цикл поддержкиж
- отличная обратная совместимость: все новые версии обратно совместимы вплоть до java 1.1 (да, это камень в сторону .NET)
- полная кроссплатформенность: Windows, Linux, BSD, Solaris, AIX, канувшем в Лету Irix, HP-UX, QNX, а также совсем безумные реализации типа en.w:NanoVM для микроконтроллеров — подо все есть совместимая реализация JDK, причем правильно написанная программа будет под всем этим работать одинаково успешно
- безопасность: такие вещи, как SQL Injection (разумеется, если не использовать raw sql), уязвимости при неправильной работе с памятью и ряд других не существуют в джаве. Что не может не радовать.
Билл Гейтс, естественно, не мог пройти мимо такого факта, поэтому его фирмочка Micro$oft в довольно скором времени выпустила язык C#, который чуть менее чем полностью на три четверти был слизан с Java (и чуть более чем на четверть — с Delphi) и в последствие сильно дополнен. Алсо, ещё раньше они же выпустили свою виртуальную машину с блэкджеком и шлюхами, но с солнцевскими шутки плохи, и мелкомягким пришлось атправить свой высер фтопку
Но не так давно (2007 год) Google для реализации плана захвата мира сделал мобильную ОС для КПК, коммуникаторов, роботов... с именем Android. Ну так вот, для исполнения приложений в ОС в гугл написали свою жаба виртуальную машину по имени Dalvik. Отличается она от солнечной тем, что она основана на регистрах, а не на стеке. Dalvik оптимизирован для низкого потребления памяти, это нестандартная регистр-ориентированная виртуальная машина. Стандартный солнечный байт-код не используется, так что солнечные приложения не запустишь (но в Android SDK есть утилита dx, которая преобразует .class файлы в формат .dex, пригодный для интерпретации в Dalvik). Вместо солнечного жаба формата .class в нём используется формат .dex (Dalvik Executable). Андроид также поддерживает написание библиотек на C/C++. JIT-компиляции в Dalvik'e нет, но зато он очень оптимизированный, вылизанный и шустрый (высокая скорость работы на слабом железе коммуникатора гарантирована[1]).
Если же немного отойти от технической стороны и обратиться к технологической, то Java максимально заточена на написание и поддержку кроссплатформенных сетевых приложений и программных продуктов (которые по технической сложности могут превосходить самотрансформирующуюся шатл-субмарину) с минимальными затратами человеко-часов за счёт таких особенностей как:
- Принудительное ООП. Напомню, что в правильных (то есть выпрямленных суровой необходимостью) руках управляемых средней тупости головой (этими качествами обладают большинство прогеров на западе) ООП приводит к более интуитивной модульности кода с меньшим числом концептуально лишних зависимостей.
- Программы пишутся не под и исполняются не на физической машине, а виртуальной, которая без лишних выебонов заточена на поддержку именно таких программ, которые на жабе и пишутся, что разом устраняет тонны (но не надо думать, что их остается так уж мало) матана, брэйнфака и задротства из проектной документации и списков требований к работникам. Это всё равно, что дорогого анонимуса вместо реального мира с его трудностями самоопределения в бурном потоке перемен, проблемой обретения финансовой независимости или даже состоятельности в условиях крысиса и сложностями репродукции поместить в Эдем с блэкджеком и шлюхами. Каково? Ништяк ведь?
- Совместимость языка и платформы с точки зрения ребят из Солнца — это не только когда вы можете перекомпилить старый код под новую версию платформы новой версией компилера, и всё будет работать также, а когда вы можете перекомпиленный кусок (модуль) программы вставить в программу вместо старого, не меняя больше ничего, и всё будет работать также.
- Отсутствие пойнтеров и адресной арифметики, что исключает как класс примерно 93,7438935621 % всех ошибок и уж точно ВСЕ самые сложные и дорогостоящие из них (ошибки общего дизайна продукта здесь не к месту, так как такими вещами рядовые кодеры не занимаются). ЧСХ, на практике оказывается, что никакой нужды в адресной арифметике нет.
- Тысячи их!
Этим всем жаба бессовестно и нагло лишила программинг романтики и обеспечила возможность добиваться сносного результата в приемлемые сроки даже с кудрявыми руками и не очень мощным мозгом. Чем конечно же вызвала неприятие Ъ прогеров.
Содержание |
[править] НЕНАВИСТЬ!!!!!111
Основными обоснованными претензиями в сторону жабы являются:
- Не слишком вменяемые стандартные библиотеки, тянущиеся ещё с 1й версии. Часто приходится писать свою имплементацию стандартного механизма. Ситуация серьезно улучшена в версии 1.6, но нет предела совершенству.
- Необходимость тонкой оптимизации (как кода, так и настроек JVM) для получения приличной скорости работы (да, она возможна, но часто нетривиальна).
- До сих пор не слишком вменяемые средства для работы с GUI.
- Отсутствие нормального метапрограммирования. В версии 1.5 запилили генерики, но они не решают всех проблем. Любители C++ досадуют на стирание типов, т.е. невозможность получения информации о параметризованном типе в рантайме, о чем годно пишет Б. Эккель в своей книжонке «Thinking in JAVA».
Еще есть не слишком обоснованные претензии:
- Жаба тормозит (но надо учесть, что для основного целевого применения покупка сервера за 9000+ денег проблемой не является).[2]
- Жаба кривая (уж не потому ли, что держат её кривые руки?).
- Жаба убогая (да, в ней действительно нет прямой работы с памятью[3] и перегрузки операторов).
[править] Связанные мемы
В основном мемы связаны со скоростью работы программ на Java, а также с тем, что это индустриальный язык программирования, точнее, с тем, что на нём пишет большое количество быдлокодеров-индусов. Типичные примеры:
- «Жаба не тормозит», «просто gc невовремя запустился», «просто всё остальное слишком быстро работает» и тому подобное по вкусу.
- «Томми», «убей себя как Томми». Применяется в основном к быдложабокодерам. Мем, связанный с тем, что на одной из гонок машин-роботов имени DARPA одна из машин по имени Томми, софт для которой был написан на Java, сошла с дистанции в связи со сбоем чипа, приведшей к убиению оного об стену. Что интересно, неполадка была чисто аппаратной, но всем похуй.
- «Серверная Java». Используется при обсуждении любых проблем с производительностью жабоприложений. Заявляется, что проблема в десктопной жабе, а с серверными настройками все нормально.
[править] Про бенчмарки и тормоза
Java is high performance. By high performance we mean adequate. By adequate we mean slow. |
В холиварах жабакодеры любят приводить в качестве главного аргумента того, что жаба не тормозит, линки на бенчмарки, в которых сравнивается скорость нативного кода и жабо-байткода. Обычно заголовки таких тестов выглядят в духе «Жаба обгоняет по производительности С++» и приводится код, где Java быстрее C/C++ (нужное подчеркнуть). Это происходит по нескольким причинам:
- Такие бенчмарки примитивны: они работают только со скалярными типами (с такими, как int, double), память под которые выделяется на стеке, используются простые операции и, наконец, весь код находится только в одном классе.
- Обычно такие тесты содержат много циклов, а замеры проводятся не во время первого запуска, а когда JIT-компилятор уже отработал. Значит, меряется скорость хорошо оптимизированного динамически скомпилированного кода. Да и garbage collector не успевает в таких программах отработать.
- Авторы бенчмарков зачастую поверхностно знают C/C++ и используют его в «жабьем» стиле, например используя кучу там, где она не нужна (и ноют про необходимость free и delete).
В реальных же приложениях ситуация с быстродействием несколько иная. Причина тому:
- Все объекты ссылочные и хранятся в куче, а значит самые элементарные составные типы такие, как Point, будут каждый раз создаваться в ней. А таких объектов тысячи. Даже при хорошей оптимизации кучи, она медленнее стека.
- Большое потребление памяти: один только хелловорлд при запуске отъедает 10 МБ. Также с каждой инстанцией класса связаны метаданные и монитор (по предыдущей причине), в результате какой-нибудь массив значений RGB будет занимать в 4-5 раз больше памяти, чем в даже хотя бы в C#.[4] На венде, которая свопит всё подряд, это приводит к известным результатам.[5]
- Динамическая природа языка: динамическое связывание кода подразумевает постоянные проверки при кастинге типов, например при работе с коллекциями. Генерики здесь не дают ничего, так как они были введены в язык позже и, для сохранения обратной совместимости, действуют только на уровне исходного кода, в конечном байткоде их нет.
- Garbage collector: хотя он проходится по памяти нечасто, на GUI приложениях это ощутимо.
- Всякие там веб-приложения активно используют базу данных, так что большую часть времени займет обработка запросов на стороне этой базы (в основном I/O диска), так что хоть на чем пиши — разница в скорости будет небольшая. Более того, сервлет на Java может запросто обогнать какой-нибудь кривой cgi-скрипт на Си, потому что сервлету надо инициализироваться один раз, а cgi-скрипту может понадобиться стучаться на базу при ответе на каждый запрос для получения каких-нибудь там настроек.
- На embedded системах зачастую недостаточно ресурсов для работы JIT'а, в результате приходится выполнять байт-код. Даже если это происходит на JVM-процессоре, то оно все равно работает не слишом быстро, т.к. вся оптимизация происходит не в javac, а в JIT. К слову, JIT написан на C++ и асме, а javac на Java.
Но всё же большинство причин тормозов жабы идут от работы с либами, ибо солнцевские пытаются обеспечить безопасную среду исполнения. Но, с другой стороны, вам никто не запрещает реализовать, скажем, собственный быстрый сетевой интерфейс (или что угодно) с использованием вызовов в С системные библиотеки[6]. Кроме того, для многих стандартных механизмов существует несколько реализаций, которые, в зависимости от способа использования, могут отличаться по скорости на порядки. Но быдлокодеры берут первый попавшийся, со всеми вытекающими.
Поэтому стоит заметить, что большинство тормозов кода написанного на жабе, являются прямым следствием кривого кода, кривизна которого по мнению автора является прямым следствием других её недостатков и ёё, развращающих молодое поколение программистов, концепций. Возьмём среду разработки Eclipse 3.4 написанную жабокодерами для жабокодеров (и не только) запустим её и немного поработаем. Убогая и совершенно упоротая 2005 студия, и её более удачная 2008 версия покажутся вам рекордсменами по спринту, я гарантирую это[7][8]. Конечно, если вы отведёте 4-х процессорную машину для обслуживания написанного на Джаве приложения — всё будет, скорее всего, прекрасно работать. Но не надо забывать, что будучи (грамотно) написанным на том же Си-плюсь-плюсе, приложению хватило бы ресурсов вашего ноутбука. В данном контексте, встаёт вопрос о целесообразности. И такая целесообразность возникает для энтерпрайза, где выгоднее сбагрить проект индусам, которые быстро набыдлокодят и поставить его на сервера помощнее.
Алсо в соревнованиях по программированию алгоритмического толка ACM, авторы задач просто вынуждены удваивать\утраивать ограничение по времени или вовсе устанавливать специальные ограничения для жабы (пример: [2] [3] ), чтобы каждый жабакодер мог сдать задачу. Для одинаковых лимитов времени часто бывало, что кривой алгоритм на жабе, не укладывающийся в рамки времени и/или памяти, будучи переписанным один-в-один на си, проходил. Обратные случаи неизвестны. Решения жюри[9] NEERC [4] пишутся на жабе, потому что если можно уложиться в данные ограничения на жабе, то заведомо возможно на плюсах и писать код на плюсах для проверки этого не надо. Что ещё раз неиллюзорно подтверждает реальное положение вещей. Также, в ACM'е каждый жабокодер вынужден писать свой класс для чтения чисел из файла, т.к. встроенный в языкпоставляемый со стандартной библиотекой (в Sun JRE) Scanner работает слишком медленно[10].
И все-же самая большая проблема в быстродействии, это не тормоза жабы, а тормоза быдлокодеры. С одной стороны, новомодные штуки типа ORM до ужаса распадлючивают народ, который вообще перестает думать о малейшей оптимизации и считают память бесконечной большой, а проц бесконечно быстрым. Потянуть тысячи объектов из базы через ORM, что-бы посчитать какую-то простую статистику, для среднего кодера, сука, аксиома. Точно так-же ни один жабокодер не занимается мало-мальскими оптимизациями по алгоритмы, поэтому инициализировать соединение к БД по несколько раз на один запрос или инитить какую-то хуету[11] на тэгах каждый раз, когда вызывается тэг в рамках генерации страницы - это общепринято. Куча уровней абстракций и простота языка позволила вырасти целому поколению дебилов, которые кодят сука быстро, но работает оно потом сука медленно. С другой стороны толпы не менее дебильных индусов сбивают цену и заказчик не хочет переплачивать за оптимизацию. Зато потом такие индусо-поделки приходят на рефактор, после которого, как правило, памяти жрется в 10 раз меньше, а работает оно в 5 раз быстрее. Тем не менее, регулярные пиздюлины быдлокодерам заставляют жабу работать в разы быстрее. Если пиздюлины дает реально грамотный разработчик, который начинал с древних машин, где память сука была дорогой, а проц - тормозным, скорость жабы возрастает до невъебических размеров. Улучшение по параметрам в разы после грамотного опиздюливания - для жабокодеров типично. Как тимлид-кун, я гарантирую это. К.О. напоминает, что при равной степени криворукости кодеров жабокод будет медленнее нативного.
[править] Простота кода Java
Когда язык разрабатывался, простота кода была одним из самых важных его параметров и это легко увидеть. Например, так Ъ жабакодеры пишут факториал.
package com.java.brainfuck.ported;
import java.lang.reflect.Method;
import java.math.BigInteger;
import java.util.ArrayList;
public class Test2 {
static Partial fix;
static Partial fac;
public static void main(String[] args) throws Exception {
fix = new Partial(Test2.class.getMethod("fix", new Class[]{Partial.class}));
fac = new Partial(Test2.class.getMethod("fac", new Class[]{Partial.class, BigInteger.class}));
for (int i = 0; i < 60; i++) {
System.out.println("i=" + i + " fac=" + factorial(BigInteger.valueOf(i)));
}
}
public static BigInteger factorial(BigInteger n) throws Exception {
return (BigInteger) fix(fac).apply(n);
}
public static Partial fix(Partial method) throws Exception {
return (Partial) method.apply(new Partial(fix, method));
}
public static BigInteger fac(Partial partial, BigInteger n) throws Exception {
return n.equals(BigInteger.ZERO) ? BigInteger.valueOf(1) : n.multiply((BigInteger)(partial.apply(n.subtract(BigInteger.ONE))));
}
}
class Partial {
private Method method;
private ArrayList parameters;
public Partial(Method method) {
this.method = method;
this.parameters = new ArrayList();
}
public Partial(Partial partial, Object object) {
this.method = partial.method;
this.parameters = (ArrayList)partial.parameters.clone();
this.parameters.add(object);
}
public Object apply(Object object) throws Exception {
switch (method.getParameterTypes().length - parameters.size()) {
case 1: return new Partial(this, object).eval();
case 0: return ((Partial) eval()).apply(object);
default: return new Partial(this, object);
}
}
private Object eval() throws Exception {
return method.invoke(null, parameters.toArray());
}
}
Ещё более Ъ вариант:
import java.math.BigInteger;
public class Factorial {
public static BigInteger factorial(int i) {
if (i < 0) {
throw new IllegalArgumentException("Факториал от отрицательного числа");
}
BigInteger r = BigInteger.ONE;
for (; i > 1; i--) {
r = r.multiply(BigInteger.valueOf(i));
}
return r;
}
public static void main(String[] args) {
System.out.println(factorial(30));
}
}
Разработчики решили не добавлять перегрузку операторов, в итоге:
[править] Фетишизм
Первоначально язык назывался Oak, что как бы намекает на дровосексуальность разработчиков. Потом у языка появился маскот в виде клизмы с глазом. Также, усилия были приложены, чтобы Math.sin(Math.PI) возвращала не 1.2246063538223773e-16, а 1.2246467991473532E-16, что доставляет тем, кто хоть что-то понимает в машинной арифметике или метрологии. Похуй, что нет неполностью поддерживается стандарт IEE 754, похуй, что нельзя иметь плавучку точнее, чем 53 бита, зато можно воспроизвести погрешности, свойственные технике, которая была на момент разработки языка. О недостатках есть длинная бумага.
По мнению Никлауса Вирта, язык Java/JVM была слизана с его языка Oberon чуть менее чем полностью и испорчена сишным синтаксисом.
[править] J2ME
Сия отрасль является, пожалуй, самой популярной версией жабы среди быдла, но не в плане программинга, а в плане юзинга, ибо круто вечером в подъезде показать пацанам, что у тебя на мобиле есть ещё игры, вроде "Трахни шлюху", которую ты бесплатно скачал, отправив смс на номер (а потом куда-то всё бабло ушло в минус, но это другая история).
Итак, мобильная жаба весьма доставляет тем, у кого не хватает денег или мозгов на смартфон, а хочется игр или софта. Отличается она всё той же мультиплатформенностью (типа, пох на модель мобилы и её производителя), хотя, как обычно, всех наебали, ибо реализация ява-машины у разных контор разные, и несчастным разработчикам, разрабатывая очередной хит на мультиплатформенном языке нужно выкладывать десяток версий для нокий новых, нокий старых, нокий смартфонов, эриксонов, сименсов, моторов и прочей хуиты. Именно из-за мультиплатформенности на яве игр не просто over_9000, а over_9000^2 ато и в ^3.
Так же интересен тот факт, что на моделях разных возрастов ява-машина хоть и стоит MIDP 2.0, но количество поддерживаемых функций в них разное. Так, на эриксонах видеоплеер стало возможным писать лишь начиная где-то с K790, в то время как K750 отсасывал в этом плане (и сейчас отсасывает, ибо с новыми прошивками яву никто допиливать не собирается - покупайте новые модели, кони!). На данный момент найти мобилу без поддержки явы достаточно трудно, как правило такие аппараты выпускаются всемирно известной компанией NOKLA или её филлиалами Song-erikson, Motorota и т.д.
Стоит так же отметить систему безопасности явы на мобилках. Как правило, наиболее опасные функции (отправка смс, выход в инет и т.д.) требуют подтверждения пользователем каждый раз, что, по сути, сделало написание вирусов под эту платформу бессмысленным. Но нашлось куча долбоёбов, которые-таки пишут своих "троянов" и выкладывают их по инету. Самое интересное, что находится ещё больше долбоёбов, которые, запустив какую-нибудь игру или "антивирус касперского", получая запрос на отправку смс тут же её подтверждают, после чего теряют всё своё бабло. По сути, естественный отбор никто не отменял.
Эпичнейшим проектом на яве по праву можно назвать браузер Opera Mini. Им, как ни странно, очень многие пользуются даже на смартфонах, где своих браузеров со свистелками и перделками (флеш и т.д.) жопой ешь. А разгадка проста - неебическая экономия трафика + сотни модов, позволяющих творить чудеса.
Что касается скорости сей жабы - здесь важную роль чаще всего играет производитель аппарата, а номер модели - во вторую очередь.
Sony-Ericsson: обычные звонилки - бесспорно, лидер по производительности. Сумрачные гении настолько глубоко пропилили свою ява-машину, что на ней летает практически всё. При чём уже древние модели типа K500 и K700 производительностью своей ява-машины рвали конкурентов в разы. Примечательно, что эрики с определённых моделей научились сворачивать мидлеты, аки на смартфоне, а начиная где-то с K790 научились запускать несколько мидлетов одновременно. В результате этой фишки куча быдла начали сравнивать K790\K800 со смартфонами типа Nokia N73 в плане функциональности. Смешно конечно, но это - решительный вин эриков.
Смартфоны - даёшь инфу, анонимус!
Nokia: Обычные звонилки - более-менее новые модели худо-бедно справляются с жабой без каких-либо корчей. Некоторые аппараты даже позволяют юзать эмуляторы NES на весьма приличной скорости (хотя до эриксонов, конечно, не тянут).
Смартфоны - полнейший, глубочайший отсос не только у эриксонов, но и у многих других. Конечно, ява там, по сути, нахуй всралась вообще, но если уж вы привыкли к какому ява-приложению (Opera Mini) и не хотите от него отказываться - готовьтесь к мукам. А разгадка проста - при запуске одного сраненького мидлетика весом 50 кб система срартует дохуищу отдельных процессов, одни из которых, видимо рисуют, другие думают, третьи пердят в динамик, а четвёртые следят за тремя первыми и т.д. В результате имеем 5-20 просраных полимеров метров оперативы и тупейшие тормоза на тех функциях, кои на других аппаратах нареканий не вызывали. Конкретно, информация для геймеров-кунов: на данной оси ява в разы больше думает при загрузке уровней, и столько же при сохранении какой-либо инфы в родное хранилище rms. Так, автосохранение в игре, которое на допотопном K500 занимало десятую-двадцатую долю секунды, на смартфонах нокии занимает секунд 10-20.
Так же одна лишь установка ява (без использования) на многих смартах со временем вызывает тупейшие якоря в главном меню, а потом и какой-либо эпик-фейл, вынуждающий делать хард-ресет.
Motorola: Обычные звонилки - кое-как тянут не требовательные игры и приложения типа Оперы Мини, но как только появлелся намек на 3D начинаются лютые, бешеные тормоза. Неведомо почему разрабы из моторолы поленились запилить подержку 3d в свои телефоны.
Смартофоны - построены на системе Linux-Java, видимо поэтому на них летает любое ява приложение.
Siemens:
- даёшь инфу, анонимус!
[править] Алсо
Также «Ява» — винрарная марка чешских байков. А еще — марка еще более винрарных сигарет. А еще — остров на юг от Сингапура, на котором расположена столица Индонезии Джакарта.
Яванский человек — ископамый человек вида хомо эректус.
Говорят, что язык программирования был назван в честь сорта кофе, но я не знаю, не пробовал.
[править] Информация к размышлению
- Весьма и весьма доставляющее наглядное сравнение всей мощи Java с простотой нормальных языков [5]
- Квака на жабе [6] (к вопросу о тормозах в разделе выше)
- Моно опережает Java на Linux Desktop [7]
- Java, какой я ее увидел десять лет назад.
- Жалобы на исключение GMP из Kaffee JVM [8]
- Опасности обучения на Java
- Quirks of Java language
[править] См. также
[править] Примечания
- ↑ Тем не менее, даже самая заоптимизированная виртуальная машина невозбранно просирает 75 и более процентов производительности и так не больно шустрого мобильного проца, с чем и связан запоздавший, но все-таки изначально неизбежный выход native SDK.
- ↑ Ну конечно же Жаба не тормозит! Тормозит только свинго-гуй, и то только написанный криворукими быдлокодерами. А сама Жаба только медленно стартует и жрёт памяти больше чем дофига (ну надо же где-то хранить два-три десятка форм одного и того же кода?).
- ↑ Частично реализуется через грязный хак.
- ↑ Стоит отметить, что кодер на жабе без энтерпрайза головного мозга в данном случае будет хранить данные, упакованные в виде одного (для всех RGB переменных) массива скаляров, правда, ценой приближения читаемости такого кода к индусскому (при отсутствии вменяемых комментариев). Костыль, но такова, как говорится, селяви
- ↑ Потребление памяти программами на разных языках в shootout
- ↑ Правда, в таком случае, все джавовские прелести (вроде полной кроссплатформенности, упрощённости обслуживания готового кода, безопасности среды исполнения — ибо ошибка при выполнении native call с успехом может завесить и JVM и всю систему в целом — и практически всего прочего, включённого в рекламный видеоклип от Солнышка) полностью утрачиваются. И порой вообще перестаёт быть понятным, зачем, собственно, Жаба учавствует в данном програмном продукте.
- ↑ Странно, не замечал такого. Имею проект из 2,2к файлов и 210к строк кода (без учета пустых строк и комментариев), всё летает. Возможно, автору никто не говорил, что его Pentium 2 давно устарел, а 128 мегов памяти давно уже называются склерозом? Кому как, а мне, жабокодеру, купить i7 975 под домашнерабочую машинку никакой сложности не составляет. И даже Жаба™ не душит.
- ↑ Предыдущая сноска показывает, на сколько сильно может деформироваться понятие «всё летает» у жабабыдлокодеров.
- ↑ пишутся с целью убедиться, что все участники могут сдать задачу
- ↑ исключительно по причине криворукости быдлокодеров из Sun
- ↑ Взаимоисключающие параграфы в статье, ОРМы обычно сами держат пул соединений или каким-то другим способом оптимизируют издержки на открытие новых соединений с БД. Хотя, как признак быдлокода -- годно. Правда, непонятно, это к Жаве или к быдлокодерам предъявы, в чем критика языка заключается? (нефанатЖабы-кун)
[ + ] Любой программист без словаря поймёт, что такое Жаба
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
[ + ] Жаба — это не баг, это фича!
|
|||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|