Size: a a a

Compiler Development

2019 October 09

А

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

M

MaxGraey in Compiler Development
Andrey
В документации есть немного подробностей - https://bellard.org/quickjs/quickjs.html#Executable-generation. Генерируется исходник на си, в котором сериализованный байткод и опциональный main для инициализации и запуска интерпретатора.
Ну собственно quickjs и позиционировался как встраемовый движок. То есть ни о какой АОТ компиляции самого js там речи не идет, а говориться лишь о том, что js транслируется в байкод аля предлагаемый для js Binary AST который десертализуется а потом интерпретируется qjs движком и все это просто транслировано в C для лучшей переносимости. То есть на самом деле ничего инновационного, я такие решения уже встречал для ducktape.
источник

M

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

А

Алексей in Compiler Development
js однопоточный в том смысле, что жс код работает в одном потоке
источник

А

Алексей in Compiler Development
поэтому его зачастую не надо синхронизировать кстати
источник

M

MaxGraey in Compiler Development
Алексей
js однопоточный в том смысле, что жс код работает в одном потоке
Если отбросить вебворкеры.
источник

VK

Vladimir Kurchatkin in Compiler Development
В природе есть многопоточные реализации JS
источник

M

MaxGraey in Compiler Development
Алексей
поэтому его зачастую не надо синхронизировать кстати
Уже нет почитай про atomics и sharedarraybuffer
источник

А

Алексей in Compiler Development
ого
источник

А

Алексей in Compiler Development
реально уже потоки завезли
источник

M

MaxGraey in Compiler Development
Сами движки многопоточные, в js есть так же возможность делать многопоточный код, так что ваша информация устарела
источник

А

Алексей in Compiler Development
как быстро устарела
источник

M

MaxGraey in Compiler Development
И я все равно не понимаю как даже однопоточный код упрощает вывод типов?
источник

А

Алексей in Compiler Development
помоему никак
источник

AK

Andrei Kurosh in Compiler Development
MaxGraey
Сами движки многопоточные, в js есть так же возможность делать многопоточный код, так что ваша информация устарела
но там получается наоборот - "все thread-safe, кроме shared array buffer", в противовес сишному "все thread-unsafe, если явно не залочено"
источник

M

MaxGraey in Compiler Development
Andrei Kurosh
но там получается наоборот - "все thread-safe, кроме shared array buffer", в противовес сишному "все thread-unsafe, если явно не залочено"
Там разделяемые между потоками ресурсы, что значит трейдсейф? Зачем тогда атомики ввели?)
источник

А

Алексей in Compiler Development
Andrei Kurosh
но там получается наоборот - "все thread-safe, кроме shared array buffer", в противовес сишному "все thread-unsafe, если явно не залочено"
вот примерно такая мысль у меня в голове как раз формировалась
источник

AK

Andrei Kurosh in Compiler Development
MaxGraey
Там разделяемые между потоками ресурсы, что значит трейдсейф? Зачем тогда атомики ввели?)
The Worker interface spawns real OS-level threads, and mindful programmers may be concerned that concurrency can cause “interesting” effects in your code if you aren't careful.

However, since web workers have carefully controlled communication points with other threads, it's actually very hard to cause concurrency problems. There's no access to non-threadsafe components or the DOM. And you have to pass specific data in and out of a thread through serialized objects. So you have to work really hard to cause problems in your code.
источник

AK

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

А

Алексей in Compiler Development
воркеры тут больше как процессы нежели потоки
источник