Size: a a a

Compiler Development

2019 October 09

EO

Eugene Obrezkov in Compiler Development
Но заявляют что он компилируется
источник

AK

Andrei Kurosh in Compiler Development
наверное у electron-приложений тоже сказано что они "компилируются"
источник

AK

Andrei Kurosh in Compiler Development
на выходе же один .exe-файл :)
источник

EO

Eugene Obrezkov in Compiler Development
Alexander Tchitchigin
Т.е. Вы на слово не верите? Тогда придётся самостоятельно исходники изучать. 😉
Я не верю предположениям, на то они и называются «предположения»
источник

AK

Andrei Kurosh in Compiler Development
ненуачо, специализация интерпретатора конкретной программой может быть реализована по-разному
источник

EO

Eugene Obrezkov in Compiler Development
Andrei Kurosh
Ставлю на то, что нельзя. Ибо даже скомпилированный jit'ом код все равно содержит проверки на шейпы, при несовпадении которых движок перекомпилирует участки заново
У меня как-то гуляла идея мол, взять и скомпилировать AoT код под все варианты типов и расставить гарды которые будут переводить на инструкции конкретного типа. Но закончилось тем что это очень много вариантов и просто бессмысленно так делать)

А тут пишут мол мы вот, компилируем жс в единый бинарь без зависимостей. И у меня немного мозг ломается как так вообще можно, язык где динамическая природа загнать в бинарь AoT и без жит
источник

AP

Alex Petuschak in Compiler Development
Andrei Kurosh
А можно пару слов о том, почему для продукта, так глубоко завязанного на эппловскую экосистему, выбрали такой далекий от эппла инструмент как сишарп?
Проект начинался ещё в 2014 г., когда языку Swift было меньше полугода, а Objective-C уж тем более не подходит для написания подобного конвертера, и server-side.
В то время, разбираться (кроме Objective-C и Swift) в ещё одном языке для написания конвертера (скажем, F# или Scala) было бы чересчур.
В итоге я рад, что был выбран C#.
Выбрали бы мы C++, и наш проект мог бы попросту не окупиться из-за времени разработки (или хотя бы сделано было бы меньше).
.NET Core давно используем.
источник

RS

Roma S in Compiler Development
Alex Petuschak
Проект начинался ещё в 2014 г., когда языку Swift было меньше полугода, а Objective-C уж тем более не подходит для написания подобного конвертера, и server-side.
В то время, разбираться (кроме Objective-C и Swift) в ещё одном языке для написания конвертера (скажем, F# или Scala) было бы чересчур.
В итоге я рад, что был выбран C#.
Выбрали бы мы C++, и наш проект мог бы попросту не окупиться из-за времени разработки (или хотя бы сделано было бы меньше).
.NET Core давно используем.
нормально обжси на сервер сайд :)
источник

AK

Andrei Kurosh in Compiler Development
Eugene Obrezkov
У меня как-то гуляла идея мол, взять и скомпилировать AoT код под все варианты типов и расставить гарды которые будут переводить на инструкции конкретного типа. Но закончилось тем что это очень много вариантов и просто бессмысленно так делать)

А тут пишут мол мы вот, компилируем жс в единый бинарь без зависимостей. И у меня немного мозг ломается как так вообще можно, язык где динамическая природа загнать в бинарь AoT и без жит
Ну, наверное можно сгенерировать код, который просто воспринимает любой объект как Dictionary, все обращения к полям происходят реально по строкам, а не по смещениям, и в таком духе - но это будет чертовски медленная и бессмысленная программа
источник

AK

Andrei Kurosh in Compiler Development
проще ее пристегнуть к интерпретатору с jit
источник

AK

Andrei Kurosh in Compiler Development
Alex Petuschak
Проект начинался ещё в 2014 г., когда языку Swift было меньше полугода, а Objective-C уж тем более не подходит для написания подобного конвертера, и server-side.
В то время, разбираться (кроме Objective-C и Swift) в ещё одном языке для написания конвертера (скажем, F# или Scala) было бы чересчур.
В итоге я рад, что был выбран C#.
Выбрали бы мы C++, и наш проект мог бы попросту не окупиться из-за времени разработки (или хотя бы сделано было бы меньше).
.NET Core давно используем.
Спасибо, это интересная история. Выбор всецело одобряю :)
источник

IZ

Ilia Zviagin in Compiler Development
Можно спросить, а Java зачем?
источник

EO

Eugene Obrezkov in Compiler Development
Andrei Kurosh
Ну, наверное можно сгенерировать код, который просто воспринимает любой объект как Dictionary, все обращения к полям происходят реально по строкам, а не по смещениям, и в таком духе - но это будет чертовски медленная и бессмысленная программа
Тогда пока можно сделать предварительное заключение, что quickjs просто трансирует в байткод, который потом интерпретируется. Сегодня попробую еще поковырять исходники (снова)
источник

DS

Dmitry Solomennikov in Compiler Development
Ilia Zviagin
Можно спросить, а Java зачем?
Мобильная разработка, для неё тоже инструменты разрабатываются/дорабатываются
источник

МБ

Михаил Бахтерев in Compiler Development
Вообще, сюрприз, конечно, но медленный код можно написать и на ассемблере. Правильный вопрос должен быть таким: насколько быстрым может быть быстрый код на данном языке?
источник

МБ

Михаил Бахтерев in Compiler Development
А тут ответ не очевиден. JavaScript однопоточный, поэтому для него иногда можно вывести типы (и кучу другой информации о потоке исполнения) и сгенерировать мономорфный  код без диспетчеризации.
источник

A

Andrey in Compiler Development
Eugene Obrezkov
Тогда пока можно сделать предварительное заключение, что quickjs просто трансирует в байткод, который потом интерпретируется. Сегодня попробую еще поковырять исходники (снова)
В документации есть немного подробностей - https://bellard.org/quickjs/quickjs.html#Executable-generation. Генерируется исходник на си, в котором сериализованный байткод и опциональный main для инициализации и запуска интерпретатора.
источник

EO

Eugene Obrezkov in Compiler Development
Andrey
В документации есть немного подробностей - https://bellard.org/quickjs/quickjs.html#Executable-generation. Генерируется исходник на си, в котором сериализованный байткод и опциональный main для инициализации и запуска интерпретатора.
о, спасибо!

тогда да, наши догадки были верны
источник

M

MaxGraey in Compiler Development
Михаил Бахтерев
А тут ответ не очевиден. JavaScript однопоточный, поэтому для него иногда можно вывести типы (и кучу другой информации о потоке исполнения) и сгенерировать мономорфный  код без диспетчеризации.
Java, c#, go и даже Rust не всегда могут девиртуализировать все случаи, что уж говорить про js
источник

МБ

Михаил Бахтерев in Compiler Development
MaxGraey
Java, c#, go и даже Rust не всегда могут девиртуализировать все случаи, что уж говорить про js
А зачем это делать всегда?
источник