Szukam dwóch rzeczy - szybkości i integracji. Zwykle obie idą w parze i ze znajomością. Niestety, w przypadku C ++ praktycznie nie ma języków oferujących szybkość i integrację. Użyłem Lua i to było do niczego, strasznie ssące. Spędziłem cały czas na pisaniu powiązań i właściwie nie było wystarczająco dużo czasu na pisanie kodu.
Funkcje językowe? Istota osadzenia języka skryptowego nie polega na tym, że może on oferować światełka dynamiczne, których nie posiadał mój oryginalny język, lecz umożliwia interpretację w czasie wykonywania . Naprawdę mnie to nie obchodzi, o ile jest to w zasadzie funkcjonalne, to jest w porządku i pasuje do mojego języka hosta (w tym przypadku C ++). Jednak, co zadziwiające, języki zaprojektowane do integracji z aplikacjami hosta całkowicie zawodzą w części dotyczącej integracji .
Czy potrzebuję wspólnych procedur? Nie, nie potrzebuję wspólnych procedur. Czy potrzebuję dynamicznego pisania? Nie, muszę wiedzieć, jakie typy zwracają się do mnie z mojego języka skryptowego, a ponieważ cały mój istniejący kod opiera się na bardzo silnym pisaniu, naprawdę chciałbym, aby mój kod skryptowy również mógł to uszanować. Czy potrzebuję wyrzucania elementów bezużytecznych? Nie, moje typy już zarządzają własnymi zasobami i zdecydowanie chcę deterministycznego zniszczenia. Czy chcę goto? Nie, chcę wprowadzić wyjątki.
Problem, który znalazłem, polegał na tym, że zasadniczo wszystkie istniejące języki skryptowe zostały zaprojektowane w celu rozszerzenia C, a nie C ++ i nie obsługują poprawnie modelu C ++ na wiele sposobów, a ponadto mają zupełnie inną semantykę. Jak, u licha, mam zamiar przetłumaczyć shared_ptr
, czyli automatyczne deterministyczne zniszczenie, na środowisko śmieci? Możesz pisać dowolne biblioteki owijania, nie zmienisz semantyki języka, która jest niezgodna z językiem, który próbujesz rozszerzyć. Jak mogę się upewnić, że void*
jest to właściwy typ? Jak poradzić sobie z dziedziczeniem? Jak rzucać i łapać wyjątki? To po prostu nie działa.
Dobry język skryptowy dla C ++ byłby typowany statycznie, wartościowałby semantykę, deterministycznie zniszczony, rzucał i łapał wyjątki i szanowałby moje destruktory / konstruktory / konstruktory kopiowania, ponieważ wtedy wszystkie moje typy będą po prostu działały, ładnie i łatwo, a wynikowy język będzie szybka i wspierająca całą moją oryginalną semantykę, łatwa do powiązania.