Naprawdę lubię projektowanie języka programowania. Czasami myślę, że moje projekty językowe i ich potencjalni użytkownicy skorzystaliby z kompleksowego dokumentu normalizacyjnego. Przyjrzałem się wielu standardom językowym, od bardzo formalnego (C ++) do raczej nieformalnego (ECMAScript), ale tak naprawdę nie mogę zrozumieć, w jaki sposób powinienem rozwiązać problemy i zorganizować taki dokument, mimo że myślę, że jestem ogólnie dobry w pisaniu artykułów technicznych.
Czy powinienem napisać to jak długi samouczek, czy bardziej formalny artykuł matematyczny? Jak mogę go aktualizować, jeśli rozwijam go wraz z implementacją referencyjną? Czy powinienem po prostu zrezygnować i traktować wdrożenie i dokumentację jako de facto standard? Ponadto, czy naprawdę jest jakaś znacząca korzyść z posiadania standardu? Czy wymaganie standardu oznacza, że język jest niepotrzebnie złożony?
Odpowiedzi:
Uważam, że specyfikacja języka Java jest zarówno formalna, jak i czytelna, i myślę, że ma rozsądną strukturę. Niektóre specyfikacje W3C mogą być również dobrym przykładem.
Wykonanie formalnej pracy może pomóc Ci zmniejszyć złożoność języka i zobaczyć przypadki narożne.
Nagłówki zrzut mózgu: kodowanie źródła, leksykacja, podstawowe typy, literały, operatory, wyrażenia, proste instrukcje, warunki, pętle, funkcje (definicje i wywołania), deklaracje typów, moduły, jednostki kompilacyjne, zakres zmiennych, różne rodzaje rozpoznawania nazw (np. import, metody), model pamięci, efekty uboczne, pisanie, współbieżność…
źródło
Czytaj dużo i upraszczaj
Opracowanie nowego języka jest trudne. Naprawdę trudny. Ale ostatecznie bardzo satysfakcjonujące, jeśli stanie się popularne i naprawdę rozwiąże problem, którego ludzie doświadczają w elegancki sposób.
Jak wspomniałem w komentarzach, radzę przeczytać Języki specyficzne dla domeny autorstwa Martina Fowlera z następujących powodów:
Jeśli chodzi o pisanie specyfikacji, pomyśl o swoich odbiorcach. Oczywiście, zanim przyłożysz palec do klawiatury, aby zaprojektować swój język, musisz dokładnie przemyśleć, co ma robić.
Jeśli jest to nowy, zinterpretowany język, który zastąpi JavaScript, będziesz potrzebować bardzo uczciwego podejścia, aby dotrzeć do twórców stron internetowych z ograniczonym czasem uwagi i chęcią uzyskania natychmiastowych rezultatów - lub szybciej, jeśli to możliwe.
Jeśli zostanie on wykorzystany podczas następnej misji do Titan, wówczas bardzo szczegółowe specyfikacje pokazujące dokładne formalne dowody zachowania każdego elementu będą stanowić minimalny poziom początkowy.
To nie jest prosta rzecz. Aby zbliżyć się do specyfikacji, lepiej byłoby, gdybyś miał dużo doświadczenia w tworzeniu swoich języków, a także w pracy z tymi, którzy faktycznie z nich korzystają na co dzień. Jeśli masz chętne ofiary ... eee ... programiści, w pracy, którzy mogą poświęcić trochę czasu na naukę języka, mogą udzielić informacji zwrotnych na temat tego, co jest potrzebne, aby mogli z niego korzystać.
Krótko mówiąc, zachowaj prostotę, a więcej osób będzie z niego korzystać.
źródło
Wirth zaprojektował i wdrożył wiele języków programowania: spośród nich specyfikacje języków Oberon i Oberon2 wyróżniają się kompletnością, zwięzłością i czytelnością.
źródło
Common Lisp i Haskell mają standardy językowe. Ruby i Python mają implementacje i dokumentację. Powiedziałbym więc, że standard językowy nie jest konieczny, ale może być pomocny, jeśli spodziewasz się, że będzie więcej niż jedna implementacja projektowanego języka. Z drugiej strony standard jest przedwczesny, jeśli oczekujesz znacznych zmian w definicji języka.
źródło
każda specyfikacja powinna być zwięzła i wytrzymać próbę czasu
dlatego widzisz abstrakcję taką jak BNF używaną w wielu standardach językowych ... jej zwięzłość i nadal będzie zrozumiała długo po tym, jak wiele naszych obecnych narzędzi pozostanie w tyle.
oczywiście jest w tym coś więcej niż tylko gramatyka. spójrz na to, co zrobili inni ... perl6, schemat, C ... zajmują się problemami, na których implementator również zależy.
źródło