Myślę, że zasadniczo masz rację. Środowisko wykonawcze języka jest już w pełni elastycznym systemem opartym na danych. Pobiera jeden kawałek danych (program) i używa go do określenia, jak powinien działać na innych danych. Może nawet mieć schemat dla wielu użytkowników do przechowywania kodu do ponownego wykorzystania przez inne programy (od ścieżki dołączania do właściwego zarządzania instalacją).
„Język skryptowy”, z grubsza mówiąc, to środowisko wykonawcze języka, w którym ten kod jest czytelny dla człowieka. Kompilator umieszcza dodatkowy krok między użytkownikiem a środowiskiem wykonawczym. Języki „żartów”, takie jak Malbolge i APL, nie muszą być czytelne dla ludzi w żadnej formie. Ale to wszystko to samo na jednym poziomie, a mimo to czytelne dla człowieka nie oznacza, że wszyscy potencjalni użytkownicy mają umiejętności czytania lub pisania, lub można oczekiwać, że je rozwiną.
Istnieją dobre powody, dla których zwykle nie udostępniasz środowiska uruchomieniowego języka bezpośrednio użytkownikom końcowym. Główną jest to, że usunięcie elastyczności zwiększa wygodę.
Jeśli chcę napisać wpis SO, chcę go tylko wpisać. Jestem w stanie napisać program C ++, aby go wyprowadzić, ale nie użyłbym przeglądarki internetowej, która pokazywałaby edytor programów C ++ zamiast zwykłego pola tekstowego. Ludzie, którzy nie znają C ++ nie tylko nie używaliby przeglądarki, nie mogli.
Jeśli chcę skonfigurować pewne parametry biznesowe, to niekoniecznie chcę to zrobić przy użyciu języka specyfikacji Turing-complete, a nawet jeśli to zrobiłem, prawdopodobnie nie można odróżnić od „zakodowania na stałe” tych samych parametrów biznesowych w żadnym innym programie język. Nadal musisz się zastanowić, czy to, co piszesz, oznacza, co chcesz, aby to oznaczało. Nadal musisz sprawdzić, czy zmiany są prawidłowe. Oznacza to, że trzeba jeszcze umiejętności programowania dla wszelkich zadań, które są nietrywialne i nie zablokowane przez kogoś, kto ma mieć umiejętności programowania, który przygotował specjalistyczną podsystem ( „Aplikacja”) na skonfigurowanie ( „use”).
Więc jeśli masz zamiar wprowadzić system oparty w 100% na danych, który może zrobić wszystko, biorąc pod uwagę odpowiednie dane, masz dwa pytania:
- Czy zajmujemy się wymyślaniem języków programowania, czy powinniśmy?
- Czy nasz nowy język programowania będzie lepszy (dla naszych celów) niż ten, który już mamy i czy będziemy go wspierać i rozwijać w miarę potrzeb?
Czasami odpowiedzi są twierdzące i piszesz jakiś język specyficzny dla domeny. Lub nawet prawdziwy język programowania ogólnego przeznaczenia, jeśli jesteś Sun / Microsoft / Stroustrup / van Rossum / wiele innych. Czasami odpowiedzi są przeczące i masz efekt „wewnętrznej platformy” - po wielu wysiłkach i próbach i błędach kończysz się czymś. Jeśli masz szczęście, jest tylko nieco gorszy od języka programowania, w którym go napisałeś, i nie jest łatwiejszy w użyciu.
Niektóre języki są trudniejsze lub łatwiejsze w użyciu niż inne, w szczególności jeśli są wyspecjalizowane w takim celu, jak R, to niektórzy użytkownicy znajdą je znacznie łatwiej. To, czego prawdopodobnie nie zrobisz, to zasadniczo ułatwienie programowania aplikacji ogólnych. W dowolnym momencie na świecie prawdopodobnie jest kilka osób / organizacji, które mogą to zrobić, ale twój szef / firma musi uczciwie rozważyć, czy to obejmuje go / ciebie.
W grach często stosuje się sztuczkę polegającą na ujawnieniu powiązań Lua z silnikiem gry. Pozwala to projektantom programować w stosunkowo prostym języku, ale nadal angażować „prawdziwego” programistę tam, gdzie jest to konieczne dla wydajności lub dostępu do określonej funkcjonalności silnika lub platformy. Powstałe skrypty Lua są „danymi”, jeśli chodzi o silnik. Nie wszystkie muszą zawierać wiele tego, co nazwalibyście „logiką”, w przeciwieństwie do danych konfiguracyjnych, i często w zasadzie definiują całą fabułę i środowisko, ale nie całą rozgrywkę. Nie jest to w 100% oparte na danych i na pewno nie jest w 100% wolne od błędów, ale jest interesującym praktycznym kompromisem.