Здравствуйте, Mr.Cat, Вы писали:
MC>Вот как раз GIL и хотелось бы отправить в печку. Чтобы в разных нативных потоках выполнялся код на самом языке.
Ну насколько я понимаю, довольно трудно сделать скриптовый язык без GIL. Если не блокировать реальное параллельное выполнение, то можно необратимо повредить структуру объектов в памяти языка. Обычно это ведет к падению. Когда-то я писал расширение на C++ для Python. Тогда я еще не знал про GIL. Так вот эти мои эксперименты заканчивались эпическими крашами всей системы. Опять же с GC проблемы... Вообще питонисты когда им надо делать реально-параллельную работу спавнят еще один процесс интерпретатора и взаимодействуют друг с другом через какой-нибудь IPC.
В общем чтобы не было проблем со структурой объектов в памяти надо смотреть в сторону языков с изолированными потоками. То есть там где объект будучи переданным другому потоку не разделяется, а полностью копируется. Там же должен быть свой менеджер кучи и свой GC на поток. Может еще быть какое-нибудь встроенное средство для обмена сообщениями. Честно сказать я такого языка не знаю
Ну или в корне менять подход при работе с тредами. Можно посмотреть в сторону языков для БД. Например как оно сделано в PL/SQL?
В Erlang разработчики все грозились сделать нативные треды. Вроде как деже сделали, но что у них получилось я не в курсе. Когда я последний раз работал с Erlang-ом, заметил интересную особенность при работе с драйвером ODBC. Тот самый драйвер отпочковывал некий процесс odbcserver.exe через который и проходили все блокирующие общения с базами данных. Вот такая вот нативная параллельность...