Size: a a a

2020 December 28

AI

Andrey Ivanov in fprog_spb
а ГЦ кто писать будет, например?
источник

AT

Alexander Tchitchigi... in fprog_spb
Mikhail Kuzmin
Привет.
Может кто-нибудь объяснить, почему языки используют виртуальные машины, исполняющие байт-код, а не компилируются в C?
Например, JVM, Erlang, Ruby?, Python?
В C есть dlfcn.h, позволяющий динамически подгружать код из предварительно скопмилированных файлов.

Чем плох такой подход? Или он просто неудобен, т.к. будет плодиться куча *.so файлов?
Подгрузка кода в ран-тайме — очень весёлая задача, нормально её только Erlang решает. Даже в Java это танцы с бубном, если нужна полноценная система плагинов. А в C/C++ сломать таблицу символов — раз плюнуть.
источник

MK

Mikhail Kuzmin in fprog_spb
Я к тому, что пишут виртуальную машину, jit и вот это все, вместо того, чтобы просто сгенерировать C/C++ файл и откомпилировать существующим компилятором.
Зачем делать виртуальную машину? Там тоже не все так просто, я полагаю?
источник

AI

Andrey Ivanov in fprog_spb
райт ванс ворк эвривэре
источник

MK

Mikhail Kuzmin in fprog_spb
так и с C тоже самое? нет?
источник

AT

Alexander Tchitchigi... in fprog_spb
Mikhail Kuzmin
Я к тому, что пишут виртуальную машину, jit и вот это все, вместо того, чтобы просто сгенерировать C/C++ файл и откомпилировать существующим компилятором.
Зачем делать виртуальную машину? Там тоже не все так просто, я полагаю?
Во-первых, компилятор в стековый байт-код + интерпретатор этого байт-кода (без JIT) — это очень просто. И сравнительно быстро.
источник

AI

Andrey Ivanov in fprog_spb
Mikhail Kuzmin
так и с C тоже самое? нет?
шутишь?
источник

MK

Mikhail Kuzmin in fprog_spb
видимо, или ты про апи операционных систем?
источник

AI

Andrey Ivanov in fprog_spb
ты писал на Си?
источник

AT

Alexander Tchitchigi... in fprog_spb
Во-вторых, для "голого" C невозможно реализовать precise GC, потому что указатели ничем не отличаются от интов и априори неизвестно где они располагаются.
источник

MK

Mikhail Kuzmin in fprog_spb
Andrey Ivanov
ты писал на Си?
Нет.
И тут нужно понять мой вопрос. Я не говорю, что надо в C компилить, я хочу понять, почему так никто (?) не делает?
источник

AI

Andrey Ivanov in fprog_spb
Делают, Хаскель, насколько я знаю, долго так именно и жил
источник

AT

Alexander Tchitchigi... in fprog_spb
Mikhail Kuzmin
Нет.
И тут нужно понять мой вопрос. Я не говорю, что надо в C компилить, я хочу понять, почему так никто (?) не делает?
Видимо, интерпретаторы и компиляторы Вы тоже не писали? 😉
источник

AT

Alexander Tchitchigi... in fprog_spb
Andrey Ivanov
Делают, Хаскель, насколько я знаю, долго так именно и жил
Gambit Scheme до сих пор должен так делать.
источник

MK

Mikhail Kuzmin in fprog_spb
Alexander Tchitchigin
Во-вторых, для "голого" C невозможно реализовать precise GC, потому что указатели ничем не отличаются от интов и априори неизвестно где они располагаются.
я может вопрос не понял, но никто же не заставляет генерировать "читаемый" C код. Если мы знаем, что переменная, хранящая указатель больше не используется, то можно уменьшить счетчик ссылок.
источник

MK

Mikhail Kirillov in fprog_spb
Alexander Tchitchigin
Подгрузка кода в ран-тайме — очень весёлая задача, нормально её только Erlang решает. Даже в Java это танцы с бубном, если нужна полноценная система плагинов. А в C/C++ сломать таблицу символов — раз плюнуть.
А как же CL
источник

AT

Alexander Tchitchigi... in fprog_spb
Mikhail Kuzmin
я может вопрос не понял, но никто же не заставляет генерировать "читаемый" C код. Если мы знаем, что переменная, хранящая указатель больше не используется, то можно уменьшить счетчик ссылок.
Счётчик ссылок /= precise GC. 🤷‍♀️
источник

AI

Andrey Ivanov in fprog_spb
Наброс про хотлоад удался ) щас еще джависты с класслоадерами набегут )
источник

AT

Alexander Tchitchigi... in fprog_spb
Mikhail Kirillov
А как же CL
Не знаю. Возможно, там тоже всё хорошо.
источник

AT

Alexander Tchitchigi... in fprog_spb
Alexander Tchitchigin
Счётчик ссылок /= precise GC. 🤷‍♀️
Как минимум, счётчик ссылок утекает циклы.
источник