LINUX.ORG.RU

Технология JIT - это диверсия?


0

2

Я вот думаю, а есть ли хоть один пример, когда JIT имеет смысл. Смотрите:
- мы запускаем программу как интерпретируемую, т.е. гарантирована только скорость работы интерпретируемой программы. Если мы хотим делать суждения о том, когда рантайм соизволит скомпилировать наш цикл в бинарный код, мы попадаем на скользкую почву.
- программа несёт в себе компилятор (и становится тяжелее)
- программа постоянно запущена как бы под профайлером, т.е., идут постоянные траты процессорных циклов на оценку повторяемости кода и траты памяти на хранение результатов этой оценки. Т.е., она изначально работает не то, что медленнее скомпилированной, а даже медленнее такой же интерпретированной программы.
- время отклика увеличивается. Вызов компилятора приводит к неожиданным затратам CPU, замена кода должна производиться с какой-то блокировкой (хотя и небольшой).
- надёжность снижена. Ошибки самой реализации JIT могут вылезти в произвольное время и их появление зависит от полного пути исполнения программы. Т.е., их крайне сложно диагностировать.

Единственное, что мы за это получаем - переносимость байткода. В любой технической ситуации, которую я могу помыслить, я бы предпочёл компилятор. Кроме того, на практике (мало имел дела с жабой, но), к примеру, исходники ICQ клиентов для мобильных телефонов - разные для разных моделей телефонов, то переносимости байткода всё равно не существует. Итого, вывод: JIT придуман для замедления работы железа и для того, чтобы оно скорее потребовало апгрейда.

Где изъян в моей логике? Какие ситуации я упустил?

★★★★★
Ответ на: комментарий от anonymous

Спасибо за лекцию, очень интересно :-)

А supportive интенсифицируют уже готовые процессы.

Как сказал поэт, «стоит прогибаться под изменчивый мир»

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Да никто не охраняет синтаксис CL.

А знаешь, почему?

Потому, что у CL, фактически, нет синтаксиса.

Вот ты знал, что для CL невозможно написать (E)BNF?
Потому что синтаксис в произвольную сторону можно менять в рантайме(через макросы считывателя).

Твои претензии по синтаксису, соответственно, не имеют смысла - тот базовый синтаксис, который в CL есть - он просто очень удобен для парсинга и кодогенерации. Да, он неудобен, если пытаться писать на CL как на мейнстримных императивных языках. Но (1) CL не предполагает такого стиля кода, и, опять же, (2) ты можешь его(синтаксис) как угодно менять.

anonymous
()
Ответ на: комментарий от anonymous

Поэтому, наверно, с HotSpot вышел толк. Хотя с HotSpot тоже не всё ясно.

есть ещё такое: Hotpath

anonymous
()
Ответ на: комментарий от annulen

> Все это конечно замечательно, но, насколько я понимаю, ни коим образом не относится к ускорению комиляции С++

ага. Уж такой у него синтаксис неудачный (и ладно бы, только синтаксис...)

anonymous
()
Ответ на: комментарий от anonymous

Но (1) CL не предполагает такого стиля кода, и, опять же, (2) ты можешь его(синтаксис) как угодно менять.

ну всё же не совсем произвольно и эффективно, одновременно. Да, те же аттрибутивные грамматики или W-грамматики есть и для лиспа. Но какой смысл делать очередной PL/I, кобол или алгол? Синтаксис нужно разумно ограничить, хотя бы для эффективного парсинга. И Дилан, и Rlisp, и cl-python и даже в некоторой степени Zeta-C — это семантически всё равно лисп. В Zeta-C libc реализован поверх cl рантайма, malloc поверх gc. Так что такой Си всё равно ближе к лиспу, чем си (если сбежать изпод libc в общий cl рантайм). И TwinLisp тоже. Наоборот, Brace — это всё равно Си, семантически. Хотя с виду и питон.

Неинтересно, что теоретически возможность менять синтаксис есть, интересно какая практически реализация синтаксиса будет достаточно эффективной и вообще полезной, чтобы ей пользоваться. Это как с компиляторами: можно сделать трансляцию хелловорда факториала, но это мало что говорит о более высокоуровневых оптимизациях. Можно прикрутить любой синтаксис, но есть ли от него польза? В идеале синтаксис должен облегчать восприятие семантики.

С другой стороны, нельзя сказать и что семантика CL является идеальной. Тот же arc пытается ввести более простой ути-пузи-лисп, предлагая свои особенные, более наглядные примитивы. Вообще таких минилиспов, размером меньше 5 Мб, каждый со своими примитивами — вагон и маленькая тележка.

anonymous
()
Ответ на: комментарий от anonymous

>ага. Уж такой у него синтаксис неудачный

урезать возможности для ускорения компиляции - не Ъ

и ладно бы, только синтаксис...

а что, у него карма плохая? о_О

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.