Я ищу две вещи - скорость и интеграцию. Обычно оба идут вместе и со знакомыми. К сожалению, для C ++ практически нет языков, предлагающих скорость и интеграцию. Я использовал Lua, и это ужасно. Я потратил все время на написание связываний и совсем немного времени для написания кода.
Особенности языка? Смысл встраивания языка сценариев не в том, чтобы он мог иметь отличные динамические возможности языка, которых не было в моем исходном языке, а в том, что его можно интерпретировать во время выполнения . Мне действительно все равно, если это в основном функционально, тогда это нормально - и подходит для моего основного языка (в данном случае C ++). Однако, что удивительно, языки, предназначенные для интеграции в хост-приложения, полностью не справляются с задачей интеграции .
Нужны ли мне совместные процедуры? Нет, мне не нужны сопрограммы. Нужна ли мне динамическая печать? Нет, мне нужно знать, какие типы возвращаются мне из моего скриптового языка, и, поскольку весь мой существующий код построен на очень строгой типизации, я бы очень хотел, чтобы мой код скрипта мог это учитывать. Нужна ли сборка мусора? Нет, мои типы уже управляют своими собственными ресурсами, и я определенно хочу детерминированного уничтожения. Хочу ли я пойти? Нет, я хочу бросать исключения.
Проблема, которую я обнаружил, заключалась в том, что в основном все существующие языки сценариев были разработаны для расширения C, а не C ++, и не поддерживают должным образом модель C ++ во многих отношениях, и в дополнение к этому они имеют совершенно другую семантику. Как, черт возьми, я собираюсь перевести shared_ptr
, то есть автоматическое детерминированное уничтожение, в среду сбора мусора? Вы можете писать любые библиотеки обёрток, которые вам нужны, вы не измените семантику основного языка, поскольку она несовместима с языком, который вы пытаетесь расширить с помощью него. Как я могу гарантировать, что это void*
правильный тип? Как я могу справиться с наследованием? Как бросать и ловить исключения? Это просто не работает.
Хороший язык сценариев для C ++ будет иметь статическую типизацию, семантику значений, детерминированно уничтожаться, генерировать исключения и перехватывать и уважать мои конструкторы-деструкторы / конструкторы / копии, потому что тогда все мои типы будут просто работать, красиво и легко, и получающийся язык будет быстро и поддерживает всю мою оригинальную семантику, легко привязывается к.