Większość języków pozwala na "tweek" do pewnych rozszerzeń części składni (C++, C#) i/lub semantyki, których będziesz używać w swoim kodzie (Katahdin, lua). Ale nie słyszałem o języku, który może całkowicie zdefiniować, jak będzie wyglądał twój kod. Więc nie istnieje jakiś język, który już istnieje, który ma takie możliwości nadpisaniasyntax zdefiniować semantykę?Czy istnieje język programowania z semantyką zbliżoną do języka angielskiego?
Przykład tego, co chcę zrobić, to w zasadzie z kodu C# poniżej:
foreach(Fruit fruit in Fruits)
{
if(fruit is Apple)
{
fruit.Price = fruit.Price/2;
}
}
chcę nie być w stanie napisać powyższy kod w moim idealnym językiem tak:
Check if any fruits are Macintosh apples and discount the price by 50%.
zalety, które przychodzą mi do głowy, patrząc z perspektywy kodera w tej „wyimaginowanym” język to:
- to bardzo jasne WH w to się dzieje (samoopisowe) - to jest po prostu angielski, nawet dzieciak zrozumiałby mój program Ukrywa wszystkie komplikacje, które muszę napisać w C#. Ale dlaczego powinno mnie to obchodzić, aby dowiedzieć się, że if arytmetyczne operatory itp ponieważ nie są już realizowane
niedogodności, które widzę dla kodera, który będzie utrzymać ten program to:
- Może byś wyrazić ten program inaczej ode mnie, więc nie wszystkie informacje, które wypowiedziałem w swoim zdaniu, można uzyskać w postaci
- Programy mogą być dość szczegółowe i trudne do debugowania, ale jeśli to możliwe, nawet w pobliżu tego typu składni, może więcej osób będzie zacząć programowanie w prawo? To byłoby niesamowite, myślę. Mogę iść do pracy i po prostu napisać esej narysować kwadrat na winform jak ten:
Create a form called MyGreetingForm. Draw a square with in the middle of MyGreetingFormwith a side of 100 points. In the middle of the square write "Hello! Click here to continue" in Arial font.
w powyższym kodzie parser musi zasadniczo domyślać, że chcę użyć bezimienny kwadratowy z w poprzednim zdaniu, ciężko byłoby napisać taki inteligentny parser, ale jest to takie proste, co chcę zrobić.
If the user clicks on square in the middle of MyGreetingForm show MyMainForm.
W powyższym kodzie „zasadniczo” kompilator musi: 1) generowania programu obsługi zdarzeń 2) sprawdzić, czy istnieje jakikolwiek kwadrat w środku formie, a jeśli jest - 3) ukryć formularz Wygląda na to, że bardzo trudno jest to zrobić, ale nie wygląda to na niemożliwe IMO mi to przynajmniej przybliża (mogę osobiście wygenerować parser do wykonania 3 kroków powyżej np. & jest to zasadniczo to samo, co robić to w jakikolwiek sposób, dodając nawet w C# a.MyEvent=+handler;
, więc nie widzę tutaj problemu), więc myślę, że może ktoś już zrobił coś takiego? Czy istnieje jakiś praktyczny ciężar złożoności, aby stworzyć taki styl programowania w stylu eseju, którego nie widzę? Chodzi mi o to, co jest gorsze, jeśli parser nie jest tak dobry?- program padnie więc musiał ponownie słowo to :)
Znam wielu ludzi, którzy mówią w LOLspeak –
Nie ma było wiele prób "języków semantycznych", a tylko 2 rzeczy są spójne: 1.) wyglądały jak bałagan i 2.) nigdy nie były tak naprawdę semantyczne. –
Moim zdaniem, twój "idealny język" nie jest wcale jasny. Przeczytałem pierwszy przykład: "jeśli jakikolwiek owoc jest jabłkiem Macintosha, a następnie zliczyć cenę całkowitą o 50%", a nie "dla każdego owocu, który jest jabłkiem Macintosha, zdyskontuj jego cenę o 50%". Z drugiej strony kod C# jest całkowicie jasny. –