Я шукаю дві речі - швидкість та інтеграція. Зазвичай двоє йдуть разом і при знайомстві. На жаль, для C ++ майже немає мов, які пропонують швидкість та інтеграцію. Я використовував Lua, і це смоктало, жахливо. Я весь час писав прив’язки і ніде майже не вистачало фактично написання коду.
Мовні особливості? Сенс вбудовування мови сценаріїв не в тому, щоб він міг мати яскраві динамічні особливості мови, яких у моїй оригінальній мові не було, це так, що її можна інтерпретувати під час виконання . Мені це не байдуже, якщо це в основному функціонально, то це чудово і відповідає моїй мові хоста (в даному випадку C ++). Однак дивно, що мови, призначені для інтеграції в хост-програми, абсолютно не відповідають тій частині інтеграції .
Чи потрібні спільні процедури? Ні, мені спільні процедури не потрібні. Чи потрібен мені динамічний набір тексту? Ні, мені потрібно знати які типи повертаються до мене з моєї мови сценаріїв, і оскільки весь мій існуючий код побудований на основі дуже сильного набору тексту, я б дуже хотів, щоб мій код сценарію теж міг поважати це. Чи потрібно мені збирання сміття? Ні, мої типи вже керують власними ресурсами, і я, безумовно, хочу детерміновану знищення. Я хочу гото? Ні - я хочу кинути винятки.
Проблема, яку я знайшов, полягала в тому, що в основному всі існуючі мови сценаріїв були розроблені для розширення C, а не C ++, і не мають належної підтримки моделі C ++ багатьма способами, і крім цього вони мають абсолютно різну семантику. Як на землі я збираюся перевести shared_ptr
, що є автоматичним детермінованим знищенням, у середовище, що збирається сміттям? Ви можете писати будь-які бібліотеки для обгортання, які ви хочете, ви не зміните семантику основної мови, несумісну з мовою, яку ви намагаєтеся розширити. Як я можу переконатися, що це void*
правильний тип? Як я можу впоратися зі спадщиною? Як я кидаю та ловлю винятки? Це просто не працює.
Хорошою мовою сценаріїв для C ++ було б статично набрано, значення семантики, детерміновано знищено, кидати та ловити винятки та поважати моїх деструкторів / конструкторів / конструкторів копій, тому що тоді всі мої типи будуть просто працювати, приємно і легко, і отримана мова буде швидкий і підтримую всю мою оригінальну семантику, легко пов'язується.