Nikita> Наоборот, JIT может позволить себе компилировать программу хоть всё её - суммарное(!) за все запуски - время исполнения
Что означает, что первое время - долгое время - программа будет работать медленно. Даже медленнее неоптимизированной: компилятор/оптимизатор тоже ест ресурсы.
Татарин>> Принципиально - да. Реализуется ли это когда-нибудь на практике - вопрос сложный, Nikita> Конечно реализуется. Только так можно получить мэйнстримовую высокую эффективность на всяких 80+ ядерных девайсах.
Если программа изанчально предусматривает многопоточность/многопроцессность, то она, конечно, рантайм определит конфигурацию и соптимизируется, раскидает нагрузку по процесорам (причём, на уровне, недоступном JIT, и с куда бОльшим эффектом).
Если программа принципиально заточена жить в одном процессе, то JIT-компилятор (да и любой компилятор вообще) на большинстве задач сделать много не могут. Не побоюсь сказать, не смогут сделать ничего существенного.
Nikita> Мощность одиночного процессора уже практически не растёт - растёт количество доступных ядер. И как раз в этом раскладе возможности managed-систем по динамической рекомпиляции, профилировке и т.п. не оставляют прибитому гвоздями нативу ни шанса.
Почему же?
"Нативный" в контексте не означает "прибитый гвоздями и предопределённый раз и навсегда". "Нативный" означает лишь то, что компиляция в родной код делается заранее.
Если вдруг появятся чудесные алгоритмы распараллеливания на лету простых задач без участия программиста, то никто не помешает встроить эти алгоритмы в библиотеки. Даже в статически прикомпилируемые рантайм-библиотеки языка.
Скажем, для тех же БПФ и ОПФ существует куча реализаций для разных процессоров - с 3д-нау, MMX, SSE разных видов, и часто все эти реализации живут в одной либе. Которая часть выполнится - решение принимается именно во время исполнения.
Вопрос 1: сумеет ли JIT выполнить оптимизацию под набор инструкций конкретного проца на лету столь же качественно, как программист и его компилятор в процессе разработки либы? или даже так: сумеет ли выполнить оптимизацию вообще (ибо хорошее использование тех же векторных инструкций - бывает той ещё головной болью даже для хорошего программиста)?
Вопрос 2: если - предположим, лет через 100 - сумеет, то в чём тут выигрыш для исполнения? В том, что мы не несём с собой чуток лишнего кода (который и без того можно не загружать, и который может занимать лишь место на долговременном носителе)?
Татарин>> Интероп - это извращение от большой тоски,Nikita> Ничего подобного. Грамотный interop - ключевой механизм кошерных managed-систем. Он позволяет спокойно и эффективно мигрировать на managed-платформу, не занимаясь переписыванием килотонн legacy-кода, и сохраняя практически все вложения сделанные ранее в натив.
Зачем отрицать, а затем сразу же объяснять частные случаи и причины появления большой тоски?
Nikita> В Java interop реализован через то самое место - это правда. А вот в .NET всё сделано очень хорошо.
В .Нет много меньше боли (и она почти незаметна). Тем не менее, интероп уничтожает и преимущества .Нет: теоретическая переносимость + защищённость.
Татарин>> Если бы написание более быстрой JIT было бы возможно - её бы написали, это очень востребовано.Nikita> Да не нужно это сейчас никому. Проблемы производительности решаются грамотным interop'ом. Парить голову по части уберJIT'а ради этих сотых\тысячных долей кода никакого смысла нет.
Так если все проблемы производительности решает "интероп" (читать как "плюс-плюсный код"), фигли вообще использовать Яву для разработки?
Все проблемы С++ в интероп вставках остаются. Локализуются, да. Но остаются.
Нет, быстрый JIT - крайне нужен. Хотя бы потому, что позволяет без каких-либо переделок кода и/или оборудования повысить скорость работы приложений. Это дорого стОит. Скажем, новое железо, поднимающее производительность на десятки процентов легко может обойтись в двукратную-трёхкратную цену. И всё это - умножаем на количество ява-аппликачек по всему миру.
Спрос на ещё более быстрое исполнение байт-кода есть. Удовлетворить его сейчас не могут.
Татарин>> Приемлима? Да, для большинства приложений - пожалуй. Существенна? Опять же да.Nikita> А это перпендикулярные характеристики
Я где-то заявлял их коллинеарность?
Nikita> И те же web-приложения эту разницу очень хорошо показывают: нынче в оной области даже на элементарных задачах никакого натива и в микроскоп не увидишь. Бо в этом сегменте мэйнстрима никто не может себе позволить годами ковыряться во всяких там stack corruption'ах, memory leak'ах и тому подобных ужасах - всё нужно уже через неделю сдавать
Мне остаётся лишь пожать плечами: нет смысла спорить с очевидным или доказывать его.
...А неубитые медведи делили чьи-то шкуры с шумом.
Боюсь, мы поздно осознали, к чему всё это приведёт.