Нужна. При некоторых условиях ты можешь захвосторекурсить в пределах одного метода. К примеру, если метод - final, хвостовой рекурсивный вызов - это просто переприсваивание параметров метода (если они не final, конечно) и прыжок на на чало функции. Но вот если метод не final или идет хвостовой вызов метода другого класс - не выйдет. Нужна поддержка на уровне JVM.
Сказал В.С.Луговский, великий знаток "English read only", который не участвовал НИ В ОДНОМ серьезном проекте, а работал библиотекарем в Институте Физики Высоких Энергий и немного сопроводителем пакетов в ALT Linux.
Ява вообще предназначалась для бытовой техники, если мне не изменяет склероз для процессоров с максимум с 4-мя регистрами на все-провсе и еще с каким-то ограничением... не помню, знающие поправят. И смысл ее был в том чтобы язык был легко-осваиваемым и читабельным, и были процессоры поддерживающие ее нативно, как родной байт-код. На бытовой технике это не пошло, но малый размер получавшихся приложений прижился в интернет-технологиях. Удобство и простота разработки привели к нежелательным последствиям тыкать ее стали там где надо и не надо. Появились неучи называющие себя "программистами" (просьба не путать с программистами работающими с явой), у которых вся разработка сводится к сливанию из и-нета готовых классов, кривое их склеивание и оп-ля-ля аппликуха готова. Ткнули работает и хрен с ним, а потом начинаются настоящие проблемы....
Тут да. Но основной идеей было наличие явы в стиральных машинках, телевизорах, магнитофонах, автомобилях и их полное взаимодействие. Эдакая идея "разумного дома".
> Что такое "склеивание классов"? Ссылочку на такой термин в UML-спецификациях, pls..
Насколько понятно из моего поста, ява интересует меня не более чем исторический факт, и я не знаком с точной терминологией... и кстати каким тут местом UML ? Под склеиванием подразумевался подход к разработке Мол "Это у нас что база ..... ага вот у нас класс ёклмнjdbc а это у нас в почту пойдет.... ага вот у нас тут класс smtpbox чичас мы тут сюда а вот это сюда... все работает. Ах так вам кодировку ? А вот чего-то-там encoder вот сюда его прикрутим"... Вот это я и называю кривым склеиванием.
> Насколько понятно из моего поста, ява интересует меня не более чем исторический факт.
Тогда не стоит строить из себя крутого перца и выдумывать, нарушая принцип Оккама, какие-то свои термины, а также придумыать мифических горе-"программистов" и героически с ними бороться. Вообще, самореализация за счет других весьма сомнительна.
> Появились неучи называющие себя "программистами" (просьба не путать с программистами работающими с явой), у которых вся разработка сводится к сливанию из и-нета готовых классов, кривое их склеивание и оп-ля-ля аппликуха готова. Ткнули работает и хрен с ним, а потом начинаются настоящие проблемы....
Нужна поддержка на уровне VM, такая, как в .NET - там разные инструкции для call и tail call, вторая не пихает контекст в стек.
Если же реализовывать это через инструкции перехода, то будут получаться слишком большие методы (и куча методов будет инлайнится) - что тут не так давно обсуждалось, а JIT очень не дружит с большими методами.
P.S. Во избежание передёргиваний и воплей "Microsoft сасёт" добавлю, что это далеко не единственная VM с нормальной поддержкой хвостовой рекурсии. Пожалуй, наоборот, JVM - досадное исключение.
Виталик, как это тебе не удалось до сих пор убедить в этом твоих коллег, насколько я понял из твоего "ламента" на твоем неподражаемом "пиджин-инглиш"? Неужто все твои коллеги пойдут в биореактор?
>у которых вся разработка сводится к сливанию из и-нета готовых классов, кривое их склеивание и оп-ля-ля аппликуха готова. Ткнули работает и хрен с ним, а потом начинаются настоящие проблемы....
То есть разработка хороша, когда миллионы обезьянок на C++ каждый заново изобретают один и тот же велосипед? Модуль интерфейса к БД, модуль GUI etc?
> То есть разработка хороша, когда миллионы обезьянок на C++ каждый заново изобретают один и тот же велосипед? Модуль интерфейса к БД, модуль GUI etc?
Такова работа обезьянок - они собирают велосипеды по готовым чертежам из готовых компонентов. Массовое производство. А Вы наверное знаете способ принципиально изменить программирование так чтобы обезьяний труд был не нужен ?
> То есть разработка хороша, когда миллионы обезьянок на C++ каждый заново изобретают один и тот же велосипед? Модуль интерфейса к БД, модуль GUI etc?
В крайности вдаватся не будем, хорошо ? Про модуль интерфейса к бд... вообще-то интерфейсы к бд заново никто не преписывает... они как бы уже идут с бд (хотя некоторые переписать бы стоило...), да и к ГУИ тоже... только в случае с явой загрузки получаются неадекватные поставленной задаче.
Не, это не костыль. Наследование интерфейсов и наследование классов - это концептуально немного разные вещи, хотя вторым можно и сэмулировать первое.
Если, например, следовать концепции IoC (Inversion of Control, это практическое применение принципа ООАД DIP, Dependency Inversion Principle), то наследование классов в общем-то и не нужно (разве что для наследования реализации по умолчанию, но это отдельный вопрос). Акцент смешается в сторону интерфейсов, а класс рассматривается лишь как имплементация того или иного интерфейса.
Собственно, я вижу пользу множественного наследования классов в объединении нескольких реализаций по умолчанию. В принципе, это можно решать и на уровне компилятора. AFAIR, мне попадалась реализация этой идеи для Java, вот только вспомнить не могу. Может это был Nice, не помню.
Джаба для обезьян - сказал Howler aka Mauhuur aka Antichrist aka flamer aka vsl aka VSL aka EvilOne aka bonegnasher aka WidowMaker (как его забанят в очередной раз, так и ник новый. Кстати, VSL есть и незабаненый, он про него забыл похоже, а там звездочка зеленая в статусе :-) Холит и лелеет он этот ник, чтобы не забанили :-)
>Нет хвостовой рекурсии и замыканий. Без них язык - не язык, а дерьмо.
>Про модуль интерфейса к бд... вообще-то интерфейсы к бд заново никто не преписывает... они как бы уже идут с бд (хотя некоторые переписать бы стоило...),
Hybernate - это уже не модуль интерфейса к БД? А с какой БД он поставляется в коробке?
HIbernate (через "ай") это средство для устойчивого (персистентного) хранения объектов в БД. Поддерживает DB2, Oracle, MySQL, PostgreSQL, офтопик SQL & etc..
Компания, на которую я работал, ввела новый уровень менеджмента, который был абсолютно излишен. Так что новый менеджер должен был доказать себе, что он делает настоящую работу и потратил много времени в спорах против использования нераспространенных языков . И, в конце концов, сделал невозможным использование чего бы то ни было, кроме Java, после чего много хороших специалистов ушло. И как-то случилось, что Java разработчик серьезно заболел. Менеджер не мог заменить его на протяжении пяти месяцев его отсутствия. Другие Java разработчики не могли сделать эту работу. К изумлению менеджера, выбор языка имел меньшую роль, чем способности программистов. В заключение этой истории менеджер оказался в такой ситуации, что было невыгодно держать квалифицированных программистов - он сам мог принимать архитектурные решения, а программисты просто кодировали это. Он теперь мог вернуться к своему правилу использования только распространенных языков нанимая только неопытных программистов, которые говорили неправду о своем знании языка. Насколько я знаю, ничего интересного не случилось с этой компанией за долгое время.
Анонимус наверное не знает, что полиморфизм всегда имплицирует late binding. Так штааа, без него ява автоматом становиться чуть чуть лучше чем C (без плюсов).
Обычно любое высказывание требуется подтверждать (обосновывать) примерами. В этом (необходимости конкретного обосновании) я согласен с господином Луговским. Не так ли?