ПОЯСНИТЕ ЗА JIT СРОЧНО!Я посмотрел несколько видео по сравнению компилятора, интерпретатора и jit-компилятора, прочитал на википедии (слишком запутано и много написано), посмотрел схемки на картинаках, и я все равно не могу понять отличие JIT от интерпретатора. Даже на картинке JIT изображен как более подробная схема интерпретатора. В чем отличие?
бамп
Почему JIT быстрее для JS чем интерпретатор?
Зачем нужен байт код? Почему нельзя передать в JIT исходный код?
БАМП
>>172407069 (OP)JIT-компилятор нужен чтобы оптимизировать быстродействие проги. Интерпретатор по умолчанию медленнее нативного кода, поэтому некоторые куски кода(которые выполняются очень часто к примеру) jit-компилятор компилит в нативный код, и выполняет уже их потом,а не опять интерпретирует байт-код. Это если кратко.
>>172407112Думаю по этой картинке все понятно,не? Что изменения вносятся сразу в работающий код.
>>172407244То есть, отличие в том что одинаковые команды не переводятся дважды? И только за счет этого прирост в скорости? Или есть еще какие то причины?
>>172407212Епт. Потому что ПИШЕШЬ ОДИН РАЗ ВЫПОЛНЯЕТСЯ ВЕЗДЕ. Для виртуальной машины ты пишешь один код для любой платформы, который компилится в байт код, а уже виртуальная машина выполняет этот код на любой ОС и платформе. На том же С, тебе нужно прогу переписывать под каждую ОС, а если еще ниже типа ассемблера, то и под каждую платформу.
>>172407069 (OP)Интерпретатор не выдает машинного кода, ну вернее среды исполнения типа джавы и дотнета старых. Джит, как видишь это делает.
>>172407306Да. В таких случаях исчезает промежуточный слой с байт-кодом и интерпретатором.
Зачем нужен байт код? На всех схемах это выглядит, как лишний шаг на пути от исходного кода к компилятору.
>>172407412>>172407380
>>172407398Как это не выдает? Без машинного кода программа не исполняется процессором.
>>172407486Процессор исполняет команды среды, а не твоей программы под эту среду. В этом суть интерпретации
>>172407380Почему для виртуальной машины нужно писать байт код? Почему бы ей сразу исходный код не обработать? Выполняется везде за счет того что виртуальная машина переводит в код для платформы, а не за счет того что байт код делается для платформы. Байт для виртуальной машины, и исходный код для виртуальной машины, так зачем тогда переводить в промежуточный вариант, когда можно сразу в вм передать?
>>172407555Какой среды? Интерпретатор переводит исходный код в машинный. Так же как и компилятор, просто по-командно.
>>172407685У тебя есть одна прога, ты ее скомилил в байт-код и этот байт-код будет выполняться сразу на любой платформе где есть виртуальная машина. В твоем же случае ты получишь скомпилированный код под одну платформу. И вместо одного файла в итоге, получишь кучу под разные платформы же.
>>172407902У меня прога, я ее запустил на ВМ, ВМ переводит этот код в машинный для любой платформы. В чем я ошибся?
>>172407486Как пример. Есть православная джавамашина и исламская джавамашина. Ты пишешь один текст проги, но первая во время исполнения каждой команды прославляет Иисуса из Назарета, а вторая Аллаха и пророка его Мохамеда. На деле тоже, вот есть инструкция нарисовать линию красную на экран, вот в машинных инструкция это вообще будет не понятно к каким устройствам обращение и через какие устройства. А вот Оракл пишет джаву для кучи платформ (в данном случае ОС) и все остается на ее совести, на убунту она будет одно делать через интерфейсы убунту, а на винде другое, но команда данная ей будет одинаковая. Рисуй линию.
>>172408026Это ты описываешь интерпретатор? И зачем в джаве байткод, опять таки?
>>172407747Нет, в байт код. А интерпретатор когда его выполняет, не факт, что непосредственно обращается к устройствам, а не к ОС, команды которой конечно в памяти лежат и ждут вызова.
БЛЯТЬ ВЫ МЕНЯ ЗАПУТАЛИ ИДИТЕ-КА ВЫ НАХУЙ! ПОХУЙ, БУДУ ПРОСТО УЧИТЬ ЯЗЫК, НАХУЙ ЭТИ ИНТЕРПРЕТАТОРЫ И JIT КОМПИЛЯТОРЫ. ДЬЯВОЛЬЩИНА КАКАЯ ТО
>>172407244>поэтому некоторые куски кода(которые выполняются очень часто к примеру) jit-компилятор компилит в нативный кодТогда почему тогда не весь код перевести в нативный код.
>>172408121Потому что джава решит, как его исполнить. Ты когда джаву устанавливаешь, она получает кучу инфы о том, куда встала. Вот она один и тот же байткод исполнит в разных условиях по разному, но исполнит точно. И если косяк, то оракл его устранит.
>>172408443Почему джава не может решить как исполнить джава код? Зачем нужно джава код переводить в байт-код?
>>172408516Потому что джава заранее не знает, как исполнить инструкции на конкретной машине. Если джава стоит на лине это будет одно поведение, если на винде, то другое. А байт код и там и там будет одинаковый.
>>172408516Потому что код исполняет не джава, сукаблять, мудак необучаемый, нарожают дебилов, объясняй им прописные истины
>>172408632Фикс. Джавамашина не знает, где будет байткод исполняться
>>172408684Так ты сам не можешь объяснить, значит ты сам не в курсе
>>172408728Тебе тут уже 10 раз все объяснили, если не хватило мозгов понять, то бери метлу и пиздуй дворы подметать.
>>172408632Так в чем отличие исходного кода от байт кода? И исходный код одинаков везде и байт код одинаков везде. Почему напрямую нельзя в ВМ передать джава код, который везде один, а нужно - байткод, который тоже везде один?
>>172408516Оп, ща поясню тебе нормально. Смотри, есть исходные коды. Раньше как было? Исходники собираются, на выходе получаются наборы инструкций (ассемблерный код, т.е. каждая команда это инструкция процессора). Все бы хорошо, но эта вся хуета развивается, и в какой то момент оказалось, что по целому ряду причин (в том числе ради кроссплатформенности) удобно компилировать исходные коды не в машинные коды а в некий байт-код. байт-код это набор команд (похожий на обычный код для процессора) который обрабатывается интерпретатором. Представь что у тебя задача читать кинжки. Раньше ты брал книжку и посимвольно ее читал -- в случае если попадалось незнакомое слово в важном месте мог случиться пиздец, а еще есть книги на иных языках например. Поэтому ты нанимаешь человека, который служит интерпретатором. Берет на себя ряд обязанностей в обработке кода — и тебе уже похуй на каком языке книга написана уже. т.е. посути мы создали виртуальный процессор со своими инструкциями (а раз мы его выдумали то можем сделать по удобней всякие плюшки) и компилируем программы уже для него — получается байткодА этот вот виртуальный процессор интерпретирует байткод в бинарный код (нативный для процессора). Но если компилятор знает что функция часто используется то ее можно сразу загнать в нативный код — это по ряду пунктов хуево поэтому весь код так собирать нельзя, но это увеличивает быстродействие (ведь интерпритирование идет в реальном времени и тратит ресурсы).
Смотрите, есть команда "иди нахуй" в джава коде, она переводится в байт код "пшол нахуй", байт код передается в ВМ и там переводится в машинный "1001 1110 1101...." так почему бы сразу "иди нахуй" не передать в ВМ??????????????????????????????????????????????????????????????????????????????????????????
>>172408821А, просто машина оптимизирована для обработки байткода и превращения его в вызовы инструкций у ОС, можно конечно и обычный текст программы передать. Если ты об этом.
>>172408821Распространять свою прогу ты будешь в исходных кодах прям? Компилятор еще помимо самого генерирование байт-кода, проверяют твой код и зависимости к примеру, и выкидывает тебе ошибки на этапе компилирования, в интерпретируемых языках ты их ловить в рантайме будешь.
>>172408921Плюсую этого
>>172408921Так ведь у джава машины только один язык джава. У CLI - сисярп. Тогда зачем нужен байткод, если у этих ВМ только один язык для перевода?
Когда сделают процессоры чтобы исполнять напрямую байт код джава и шарпа а не виртуально.
>>172408821 есть исходники -- они одинаковые. есть машинные коды -- они отличаются от железа — какой процессор такие и решения. от многого зависит. поэтому раньше была жесткая привязка — собрал под виндовс на пне ммх — там работать и будет. Что бы отвязать нас от аппаратной базы создали "виртуальный процессор", интерпретатор. У него свои наборы команд (байт-код) унверсальные. поэтому компилятор собирает хороший годный унифицированный байт-код вне зависимости от того что у тебя за железо. Но трансляция это затратно, поэтому частые действия можно собрать в машинные коды — если нужно.
вообще с твоими знаниями надо не про jit читать а системно изучать всё.
++
>>172408962Потому что разные процессоры, если был бы один проц на все нужды то проблем и не было.
>>172409099Ебать ты ограниченный.Jvm - Scala, kotlin, groovy, JavaClr - c#, f#, vb
>>172409099затем, что джава машина берет на вход байткод. и выполняет его. т.е. для програмы полностью срать, какое у тебя железо. главное что бы была джава машина. А если бы у нас были машинные коды то требовалось бы соответствие строгое (нет инструкции в процессоре — гуляй).
>>172409099На лине сисярп будет байткод идинахуй интерпретировать в свиснивхуй, а на винде в неужелибесплатно. Из-за разницы в системе на которой работает. А на экране будут на хуй идти.
>>172409099Ну ты сказааал...https://en.wikipedia.org/wiki/List_of_CLI_languageshttps://en.wikipedia.org/wiki/List_of_JVM_languages
>>172409201Так ведь байт код один для всех платформ, и вообще он для виртуальной машины. Компиляция для конкретной платформы производится из байткода в машинный в виртуальной машине в зависимости от платформы, но байт код то не зависит от платформы.
>>172409223Ебать ограниченный кложуру не знает.
>>172409223ЭТО ВСЕ ОБЪЯСНЯЕТ. ВСЕМ ПОКА. ВСЕ СВОБОДНЫ
>>172409321Внезапно ты ответил на свой вопрос.
>>172409321Именно так, в этом его прелесть, что он один для всех.
>>172408921Ну насчет удобства понятно.Неважно на каком языке написана программа, если для нее есть компилятор в байт-код.А что в плане производительности?Байт-код как-то проще и быстрее интерпретировать в машинный код?
>>172409469Виртуальная машина - это компромисс между удобством и быстродействием.
>>172409284Вот именно, интерпретировать будет интерпретатор, а он сразу может делать это из джава кода, зачем ему байт код.
>>172408962смотри. у нас есть исходный код который выполняет печать одной строки "вон из профессии, мудила". Компилируем и смотрим что выйдет. если это язык Си или похожий, а код собран под х64 то там будут пошагово указаны простые команды работы с процессором (записать в регистр, умножить, пятое десятое) — известное конечное количество команд, список и возможности которого ограничены архитектурой. если это ява то код собереться в байткод. по сути это такой же набор последовательных простых команд, но эти команды никак не упоминают процессор. Они работают с какими то своими абстракциями. И что бы эти абстракции связать с реальным железом нужен интерпритатор. А сразу передать исходный код не выйдет, потому что это слишком сложная команда для процессора (виртуального или нет не важно).
>>172409506Если это компромисс, то что наиболее удобным является?
>>172409366ты какой то приебнутый. выбрал самый малозначащий фактор как решение.
>>172409531При создании байт-кода уже применены оптимизации, это некий полу-ассемблер. Соответственно при исполнении перекомпилировать уже не надо.
>>172409381Вопрос то тот же, как джава код не зависит от платформы, так и байт код. Тогда зачем байт код? Ответ уже дали. Оказывается у виртуальных машин не только ждава и сисярп, но и другие языки. Вот тут уже понятно почему байт код нужен.
Я не понял, что оп спрашвиает вообще. Как передать из джавы сразу в вм, о чем он говорит, приведи пример? Программы, которая складывает два числа. Может ясно будет сразу и тебе и то же.
>>172409531затратно. лисп имеет свою спицифику. в принципе если ты пишешь на ассемблере то там тоже будет интерпритатор а не компилятор. Тут две крайности: или у тебя ахуенно сложный интерпритатор (и медленный как сука) или придется писать очень просто и примитивно (как на ассемблере).
>>172409709Он имеет ввиду просто исходники интерпретировать, а ля питон и просто интерпретируемые языки.
>>172409366Это не объясняет - это следствие, няш.
>>172409799Ну, очевидно, это будет просто медленнее работать. Этот ответ его не устраивает?
>>172409709Оп спрашивает, почему нельзя написать просто несколько разных интерпретаторов ява-кода под разные платформы?Без промежуточной стадии в виде байт-кода.
>>172409732А что, затраты на перевод из ЯП в байт-код не учитываются в твоей системе расчетов?
>>172409701это блядь не правильный ответ, сука. ты блядь мало того что тупишь, ты упорствуешь в своей тупости. джава код это просто исходники, текст. Интерпретировать его можно, только сложно, медленно и не эффективно. вот этот анотонуан умничка. >>172409667пилится компилятор из исходных кодов в байт код, который специальным образом формирует код который легко универсально интерпретировать.
>>172409701>>172408821Множество языков, это просто следствие. Все решили идеальный язык изопрести под свои нужды.
>>172409876Ну дык из исходных кодов в байт код ты компилируешь ведь. ну будет у тебя компилятор работать не минуту а три, не похуй ли. а байт-код уже интерпретируется (в реальном времени) и задержки тут фатальны.
>>172409876Не учитывается, программа исполняется из БК
>>172409906А когда ты переводишь в байт-код это не сложно и медленно?
>>172409834!!!!!Почему интерпретирование байт-кода происходит быстрее, чем интерпретирование обычного кода?
Короч, питухи. Были архитектурнозависимые дебилы, которые делали make install на каждую программу. В один прекрасный день, они эволюционировали в архитектурно независимых и создали кусок говна под названием Java. Но тут родился вопрос, как сделать себя независимыми? И изобрели они JVM или JIT-компиляцию. Вы пишите один раз свое говно под заданную архитектуру, чтобы все остальное говно писать архитектурно независимо. И так родились программисты, продолжающие делать make install, и обезьяны, которые не в состоянии написать hello world на АРХИТЕКТУРНО НЕЗАВИСИМОМ языке.Короче, удобоваримое говно компилируется или интерпретируется в менее удобовариамое говно. Java в байт-код. C# в IL кодЗатем менее удобоваримое говно скармливается в виртуальную машину, написанную программистами. А те программисты это говно пробрасывают к ресурсам системы под различные архитектуры. Поэтому нельзя сразу говорить иди наху, а надо сначала надо перевести в пойти нахуй, а затем в 0001
>>172409701Ну не совсем для этого. Байт-код был всегда, языки появились потом. Суть связки Джава-БК-ДжВМ-нативный код именно в write once run everywhere - одно и то же приложение можно запустить и на x86, и на ARM, и на SPARC.Компилятор оптимизирует джава-код и генерит байткод, который уже потом на лету пережевывают для конкретной, сильно отличающейся от других, платформы джава-машины.
>>172409979в байт код я перевожу посредством компилятора епта. сделал раз и хуй забил. а байт код будет интерпритироватся каждый раз как ты запустишь программу.
>>172409979Сложно и медленно, но ты писать на БК не можешь. Вот когда роботы будут писать проги, они будут в БК ебошить.
>>172409988Джава глючное говно, почему его еще используют, для тирпрайза?
>>172407380>На том же С, тебе нужно прогу переписывать под каждую ОСЛОЛ. Проиграл с дауна не умеющего пользоваться препроцессором. Вся писечка сишечки в том, что можно хуярить кроссплатформенный код, которой компилируется под целевую ОС, а не переписывается.
>>172409984потому что байт сука код оптимизирован под интерпретацию. обычно исходники в байт-код компилируют а не интерпритируют. компиляция это постфактум процесс -- раз выполнил и на выходе у тебя бинарный или машинный код. интерпретирование (кажется еще можно говорить трансляция) происходит каждый раз при выполнении программы.
>>172409974Из Бургер Кинга?
>>172410098Джава заебись, особенно на правильных серверах. А на виндовых серверах офк сисярп нужон.
>>172410098Потому что ничего лучше нет, очевидно же
>>172409984Потому что он уже сразу оптимизирован в плане памяти, циклов и прочей хуйни, и там не надо для каждой строчки делать кучу оверхэда, как это делает интерпретатор в питоне.
>>172410153Биле ну ты и петрос
>>172410121иди нахуй отсюда шакал ебанный. ты не видишь что у нас тут оп — долбаеб?программиста-дауна не часто увидишь, поэтому мы тут все на пальцах ему рассказываем, какие нахуй предкомпиляторы.
вообщем, ОП. если хочешь кодить то начинай вкатываться нормально. 1. кури что такое компиляторы и трансляторы. 2. кури архитектуру эвм — все вопросы сразу отпадут. конвеер, команды, наборы инструкций и т. д. 3. кури алгоритмику (курс СиАОД в шарагах на первом курсе дают).Потом можешь начинать вкатываться в собственно программирование. А то выходит ты особо не понимаешь как работает машина, особенности архитектуры, методологию а уже лезешь в высокоуровневое программирование.
>>172410006То есть, я могу написать "Привет Мир!" на джаве, а потом запустить на андроиде на винде и на маке и везде мне покажет "Привет мир?"
Если я правильно понял оставшийся вопрос - зачем нужен байткод и почему не интерпретировать тупо исходники, благодаря интерпретаторам написанным под каждую платформу. Байткод работает быстрее. На примере вызова функции - интерпретатору нужно разобрать строку, проверить на синтаксические ошибки, потом перевести в код, который сложит параметры на стек и перейдет на нужную функцию. При этом еще можем и словить ошибки в рантайме, ибо нет компилятора который проверял бы все это на этапе компиляции. В байт коде же это будет выглядеть уже готовой парой строк - так-же складываются параметры на стек потока виртуальной машины и дергается функция. Там почти никаких затрат не будет. Перфоманс можно посмотреть здесь - https://benchmarksgame.alioth.debian.org/u64q/python.html. Понятно что не очень наглядно и много нюансов, но суть передана.
>>172410359да. и перекомпилировать не придется. собрал где хочешь и работает везде где есть ЯМ
>>172410359Везде, где установлена JVM.
>>172410215Двачую адеквата
>>172410395Ну и плюс еще - компилятор оптимизирует такой код заранее
>>172410355Это снизу вверх поход. С верху вниз тоже норм, как он и делает. Особенно, когда надо что-то решать сейчас, а не через 5 лет. Плюс прикладные навыки- знания в сфере очень быстро устаревают, поэтому сверху вниз тоже актуально особенно.
>>172410142А, ну то есть типа интерпретация сложного кода современного яп, с классами, кучей методов, ссылающихся на методы этого самого яп, в результате чего заебешься этот клубок раскручивать и прочей залупой в машинный код - медленное дело из-за самой структуры языка?А вот если бы там были простые команды, как в ассемблере, которые еще и не могут ссылаться на другие команды, а напрямую выполняют простые операции, то это все значительно быстрее интерпретируется?
>>172410395>https://benchmarksgame.alioth.debian.org/u64q/python.htmlджава сила питон могила
>>172410452Нет, это не "сверху вниз", а "сверху вниз мудака, который не ищет уже готовые ответы а просит, чтобы ему лично заново написали новые". Обычно, в этом случае легетимно просто посылать нахуй, но тут из-за того, что никто сразу не понял, что за хуйню оп спрашивает, из-за крайней тупизны происходящего, этого не произошло. Чисто случайно.
Почему сейчас неиспользуется такая схема при разработке ЯПа?
>>172410624Мда.
>>172410624кобол очень даже используется
>>172410355>1. кури что такое компиляторы и трансляторы. >2. кури архитектуру эвм — все вопросы сразу отпадут. конвеер, команды, наборы инструкций и т. д. >3. кури алгоритмику (курс СиАОД в шарагах на первом курсе дают).Эта хуйня нахуй не нада, просто учишь язык и пишешь код.
>>172410591Я верно все понял?
>>172410616Да стандартная история при таком подходе. Ты просто не пробовал. А так да, говном кидаются и на хуй посылают вполне легетимно, но находятся и няши коих полон тред
>>172410591Да. Некоторые команды вообще удаляются нахуй из-за ненадобности во время оптимизации во время компиляции
Ну раз тут собрались те кто шарят, то по быстрому ответьте мне на следующее: если делать сервер на php то его не надо перезапускать, что бы изменения вступили в силу, а на java и c# нужно же? Вроде когда делал на C# там в каких то случаях надо было перезапускать, а в каких то не надо. Вроде в контроллерах MVC не надо было, а моделях надо было, точно не помню. И как с этим в node.js? Он как php или как java?
>>172410858Ага, и рекурсии и вложенные циклы разворачивают-наизнанку выворачивают, потому что разработчик не понял, что так эффективнее. Поэтому и говорят что надо писать код, понятный коллегам, перехитрить зрелый компилятор вообще и JVM в частности надо сильно постараться.
>>172410918>node.jsДа там тоже нужно перезапускать.
>>172411163Хуево. Тогда буду php изучать
>>172410918Я пишу на clojure он под jvm. Вот все время перезапускаю сервак, но уже не раз видел статьи в которых пишут, как разрабатывать без этого. Но я пока забил разбираться в этом. На пхп, когда писал, перезапускать апач не нужно было, но это понятно, он там сам юзает dll ку пхпэшную (виндовый сервак был), а она уже файлы хавает для интерпретации в рантайме.
>>172411235Почему перешел с пхп?
>>172407069 (OP)Jit компилятор создает последовательных кодов самого процессора.
>>172410918Все зависит от масштаба изменений. У джавы хот свап есть например.
>>172411431А я вспомнил, в .net можно было изменять код в контроллерах поставив отладку на паузу, а потом возобновить работу серва
А нахуя вообще виртуальная машина джавы тогда байт-код интерпретирует в реал-тайм?Почему нельзя использовать такую схему:1. Пишем код на любом удобном высокоуровневом языке, затем компилируем его в байт-код.2. Затем компилируем сразу в машинные коды этот байт-код под конкретную ОС.Все. На выходе исполняемый файл, обладающий максимальным быстродействием.Код же пишется на высокоуровневом языке.А промежуточная стадия позволяет разработчикам высокоуровневого языка вообще не париться, где конкретно он будет выполняться, достаточно написать только 1 компилятор - в байт-код.Далее если под ос существует компилятор байт-кода, он может выдавать быстрые исполняемые файлы для программ, причем ему вообще похуй на каком стильном модном языке это было изначально написано.Это же гениально.Такая-то унификация.
>>172410686вот потом такие как оп и пишут кодкак ты блядь напишешь что то толковое если для тебя компьютер черный магический ящик?как ты станешь хорошим программистом, если не видишь ахуенных решений, которые сделали другие люди до тебя? быдлокодером стать легко, программистом быть сложно.
>>172411326Да много факторов. Ну первый просто подустал от языка, захотелось новых ощущений. Начал выбирать язык, ну вот увидел такой со всякими фичами прикольными из коробки, потом мне лисп нравился в универе, ну и он над jvm поэтому проблем с библиотеками быть не может, бери любую джавовую. И последнее - это сообщество, маленькое, но очень плотное. Никакой токсичности, воды мало по делу много, короче качественное. И последнее платят в среднем синьерам больше, чем за пхп, как за го примерно.
>>172408516Байт-код оптимизирован под ВМ, поэтому исполняется быстрее исходного, но все так же остаётся независимым от платформы.
>>172411193Не надо php изучать. мимо изучал php 5 лет
>>172411714Почему?
>>172411792Уебанский язык, все в нем через жопу
>>172411839Зато джаст ин тайм и быстрый
>>172407069 (OP)в е
>>172411876?
>>172411860Ничтожные плюсы на фоне гигантских минусов
Думаю изучить вордпрес, сделать тему и срубить бабла
>>172411553Поясните. Мне кажется я придумал самую гениальную хуйню эвар
>>172411839Зато очень востребованный и на нем очень легко найти работу.
>>172411906Пользователей не волнуют твои вкусы ЯП. И главное чтоб все быстро и четко
>>172411948Звучит правдоподобно. Я в это верю.
>>172411925Whatever floats your boat.
>>172408395>Тогда почему тогда не весь код перевести в нативный код. Тогда проще компилировать в нативный нормальный компилятором. Да и не весь код, в очень сложной программе например, не будет использован во время работы.
>>172411980Если коротко говорить, нормальный сложный проект будет оче хуево писать на похапе.Из-за кривожопой структуры языка, которой вообще нет, отсутствия строгой типизации.(зачатки добавили в последних версиях, но это все равно детский сад)Блять, даже говорить лень, ПХП - язык-калека.
>>172411553>>172411948молодец ты только что придумал Си или любой другой язык, который сука так и работает. Пишешь исходный код, компилируешь его в машинные коды, исполняешь.
>>172412310Ну ты и долбоеб, не напрямую высокоуровневый код в машинный, аВысокоуровневый -> байт-код -> машинный.
>>172411948Ну так в каждую дистрибуцию войдет код jvm либо .net, понятно, что тогда надо оптимизатор писать и тп. Больше возможностей для изучения реверсного среды откроется, а это не в интересах Оракла или Микрософта. Короче, сейчас все вроде бы по уму.
>>172411553Книжку открой, изобретатель-клоун. Интерпретатор использует ресурсы, чтобы понять как выполнить ближайщую инструкцию, и после этого, время от времен, он еще за собой подчищой, заебало писать, че-то на середине ответа
>>172412212Не согласен, на нем можно писать, как колека. А вообще хоть в ФП стиле пиши, и будет все збс. Просто на это забивают и пишут по принципу хуякхуяк и в продакшен, но всякие фейсбуки так не получаются.
>>172412596Я слышал мнение что наследование в ООП гнилая тема и лучше использовать интерфейсы. Как думаешь?
>>172411553Ты только что в жава
>>172412751Интерфейсы не заменяют его универсально как-то. Лично я не знаю чего в нем плохого, тем более в современных языках, где допускают только 1 предка. Но если не хочется наследоваться, то используют интерфейсы и dependency injection для расширения класса.
>>172412751Кстати из ООП перешел на ФП именно, потому что тут столько по методологии вариантов и у всех своя правда, которую готовы довольно агрессивно отстаивать. А в фп все намного проще.
>>172413228В ФП ещё больше срачей по поводу языков и конструкций.
>>172412421предлагаю еще транслировать в промежуточный код на идише. смысла в этом столько же.
>>172413328Ну может, но пока не приходилось.
>>172413328А кстати, например какой там стандартный холивар о конструкциях?
>>172412481Ну это да, файлы дистрибутивов будут большими, но это похуй.Потом можно кидать саму ебалу jvm в систему, как и щас
>>172407069 (OP)Так бля, киньте ссылку на ответ, где пояснили по людски, потому что половину треда прочитал и уже хуево стало.
>>172418466По людски тут не написали. Но суть я понял так. Ты хочешь написать программу на несколько платформ. У тебя есть следующие варианты:1. Пишешь программу с использованием определенных библиотек на определенных ЯП под каждую из платформ и компилируешь для каждой платформы. Долгая разработка, быстрая работа приложения, долгая компиляция программы.2. Пишешь программу на ЯП для интерпретатора. Программа будет работать на всех платформах где есть интерпретатор этого языка. Быстрая разработка, медленная работа приложения (для каждой команды интерпретатор выполняет перевод в машинный код по очереди, то есть взял команду - перевел - процессор выполнил и потом опять заново, и так для каждой команды, когда в случае с компиляцией ВЕСЬ код переводится в машинный и процессор выполняет весь код программы), компиляция в реальном времени (интерпретатор идет по коду и сразу выполняет его.3. Пишешь для виртуальной машины которая работает на различных платформах, как и интерпретатор. Программа полностью компилируется в байт-код. Этот байт-код переводится в машинный код виртуальной машиной и выполняется как в интерпретаторе по ходу чтения программы. То есть берется строчка байт-кода и сразу же выполняется. Программа работает везде где есть виртуальная машина, код требуется компилировать в байт код, что медленнее чем в случае с интерпретатором, но быстрее чем в 1 случае, потому что там тебе нужно будет компилировать несколько програм под каждую платформу, а с байт-кодом нужно скомпилировать только один раз. Ну и выполняется программа так же медленно как и во втором случае, так как виртуальная машина поочередно переводит байт код в машинный и передает его в процессор и так далее, то есть по одной команде, каждый раз обращается к процессору.Вроде так.
>>172419937Спасибо, схоронил, потом прочту на свежую голову.
>>172419977Только не забудь подписать, что это мысли вкатывальщика с поверхностным пониманием этих вещей.
>>172419977И еще я забыл добавить, почему JIT (3 случай) быстрее интерпретатора. Команду байт-кода перевести в машинный код быстрее, чем перевести команду ЯП в машинный код (выигрыш байт-кода в пользу производительности приложения). Но в байт код нужно сначала скомпилировать программу на ЯП, а для интерпретатора не нужно компилировать ничего (выигрыш интерпретатора в пользу экономии времени на компиляцию).
>>172420575Ага, спасибо. Как по мне, так лучше делать упрек на быстродействие. Разраб подождет, юзер нет.
>>172420645Ну если игры разрабатываешь требовательные к ресурсам, тогда приходится писать под каждую платформу отдельно и компилировать для каждой отдельно соответственно. Тогда юзер будет ждать свою игру годами, прежде чем поиграть в нее без лагов.Если веб сервис, где все мощности находятся на выделенном мощном сервере, да и сам сервис не такой требовательный как игра, тогда и разработка быстрая и юзер не страдает. Так что выбор исключительно зависит от области в которой ты работаешь
Ну с устройством виртуальной машины явы и сисярпа мы разобрались.Понятно что байт-код интерпретируется существенно быстрее, чем голый год высокоуровневого яп.Но сука. ЧТО МЕШАЕТ ВМЕСТО ИНТЕРПРЕТАЦИИ БАЙТ-КОДА КОМПИЛИРОВАТЬ ЕГО В МАШИННЫЕ КОДЫ ПОД КОНКРЕТНУЮ ОС?Чем это отличается от того, чтобы сразу скомпилить высокоуровневый яп в машинный код под конкретную платформу:Тем, что разраб любого языка больше не парится насчет того, КАК его язык будет выполняться на разных платформах, а тупо пишет ему 1 единственный компилятор - в байт-код.Далее разраб оси или вообще хуй знает кто пишет компилятор байт-кода в машинные коды для этой ос, тем самым за 1 присест давая возможность выполнения тонн программ в байт-кодах, написанных вообще хуй знает на чем, на чем угодно блять, на своей ос.Это же гениально, мать вашу, это просто охуенно!
>>172407244>некоторые куски кода(которые выполняются очень часто к примеру) jit-компилятор компилит в нативный кодНахуя такой гемор, если можно сразу всё скомпилировать в нативный код и получатьпрофит.
>>172407999В коде, очевидно же твоя ошибка.
>>172409118Потом унифицируют железо и весь этот байт код нахуй никому нинижон станет.
ШИТЫЙ КОДИТЫЙКОД
>>172422748Че?
>>172422822Погугли.
>>172422848Делать мне больше нехуй.Я интернет оплачиваю, чтобы меня тут гуглить заставляли?
>>172422129Это LLVM.
>>172422359Называется ahead of time compilation (AOT). Может занимать много времени, а юзеру надо поставил-запустил.Пример с андроидом: в ранних версиях было без аот, потом для избежани тормозов решили делать аот при установке (установка стала дольше). Вроде решили, что так лучше.
>>172422932>Мамка интернет оплачиваетпоправил
>>172422129Добавлю, что архитектура самой ВМ может мешать такому универсальному подходу (например жвм не даёт сохранения информации о типах в генериках, что где-то хорошо, где-то плохо, но уже отличается от. Net подхода)
>>172407069 (OP)Сколько у тебя IQ?