W SICP autorzy stwierdzają ( sekcja 1.1 ), że istnieją trzy podstawowe „mechanizmy” języków programowania:
wyrażenia prymitywne , które reprezentują najprostsze byty, których dotyczy język
środki kombinacji , dzięki którym elementy złożone są budowane z prostszych
środki abstrakcji , za pomocą których elementy złożone mogą być nazywane i przetwarzane jako jednostki
Jak mogę analizować główny język programowania (na przykład Java) pod kątem tych elementów lub mechanizmów?
Odpowiedzi:
Rozróżnienie między pierwotnymi wyrażeniami, środkami kombinacji i środkami abstrakcji jest użyteczne przy modelowaniu języków programowania. Zauważ, że nie jest to nieodłączna właściwość języka: nie możesz wskazać żadnej definicji języka i powiedzieć „ta cecha jest jednoznacznie pierwotnym wyrażeniem, ta cecha jest jednoznacznie środkiem kombinacji”. To rozróżnienie jest właściwością modelu, a złożone modele mogą opierać się klasyfikacji.
Przykładem tych trzech pojęć jest rachunek lambda , który ma dokładnie jedno z nich:
Gdy przejdziesz do języków z większą liczbą funkcji, modelowanie może stać się bardziej niejednoznaczne. Mówiąc ogólnie, prymitywne wyrażenie to takie, którego nie można lub nie można podzielić na prymitywne składniki. Ale jest jak atom : jest prymitywny, dopóki nauka nie ruszy. Na przykład istnieje wariant rachunku lambda, w którym zmienne używają liczb, a nie nazw ( wskaźników de Bruijna ), co jest szczególnie wygodne przy modelowaniu terminów lambda dla proofów komputerowych; a w dowodach komputerowych liczby całkowite są podzielone na części składowe . W tych modelach zmienne nie są jednak prymitywnymi wyrażeniami.
W (typowym modelu) Javy pierwotne wyrażenia są przede wszystkim stałymi i zmiennymi. Sposoby kombinacji obejmują liczne operatory; Dokładniej, „Dodatek ekspresyjny” jest środkiem kombinacji dwie szczeliny (z lewej strony, a po prawej stronie), albo w trzy szczeliny (obu stronach plus operatora), jeśli zawierają zarówno A
+
B i A-
B pod tą nazwą (w takim przypadku operatory+
i-
konstrukcje prymitywne same w sobie). Inne sposoby łączenia obejmują sekwencje instrukcji I;
J , konstrukty pętlowewhile (…) {…}
, i tak dalej. Następnie masz konstrukcje, takie jak deklaracje zmiennych, definicje funkcji, definicje klas i tak dalej, które są zarówno środkami kombinacji (łączą nazwy i typy parametrów, ciała, inicjalizatory, ...) i środkami abstrakcji (ponieważ definiują nazwy do ponownego użycia). W rzeczywistości dość powszechne jest to, że środki abstrakcji są również środkami łączenia: łączą nazwę z jej definicją.źródło
Szorstki dźgnięcie:
Wyrażenia są właśnie takie; co stanowi wyrażenie w Javie. Nie wiem, czy rozwinąłoby się to o instrukcje, czy nie.
Kombinacje obejmowałyby wyrażenia złożone, instrukcje (zmienne?), Metody, mechanizm klasy i pakiety. Moduły też, gdy będą w języku.
W Javie najprostszym sposobem abstrakcji jest klasa: nic nie może istnieć poza klasą. Być może istnieją „warstwy” abstrakcji: metoda statyczna jest prawdopodobnie prostsza niż metoda instancji, ponieważ nie wymaga instancji.
Leki generyczne oferują dodatkową warstwę abstrakcji (i frustracji).
źródło
Oto moja podstawowa kategoryzacja. Próbuję narysować paralelę z LISP.
Wyrażenia pierwotne
Równolegle w LISP : atomy, liczby i listy.
Sposoby łączenia (sposoby budowania złożonych struktur danych)
Równolegle w LISP : Wady komórki, listy
Środki abstrakcji
+
,-
,*
,/
, ...)Równolegle w LISP : funkcje, cukier syntaktyczny
let
,define
źródło
Język programowania jest ogólnie definiowany przez jego składnię i semantykę . Oba zostaną określone w standardach dla języka.
Składnia określa, jak napisać poprawny program, a semantyka określa, co znaczy ten poprawny program.
W twoim przypadku składnia powie ci, jakie są twoje prymitywy, jak je łączysz i jak je streszczasz. Semantyka powie ci, co oznaczają kombinacje i abstrakcje.
Na przykład składnia powie ci, jak napisać prawidłową
for
pętlę. Semantyka powie ci, co robi pętla for.Jeśli naprawdę chcesz zacząć analizować język programowania, weź kopię standardu i zobacz, co tam jest. Zaczynam od prostego języka, takiego jak C, zanim zagłębię się w Javę. Przeczytałbym również resztę książki. Dowiedz się, dlaczego programowanie języków działa tak, jak one, uczyniło mnie lepszym programistą, mimo że nie implementuję kompilatorów.
źródło
x = ++x;
nie jest prawidłowy, nawet jeśli typowy kompilator ją zaakceptuje.Nie wiem, czy to prawda, ale rozumiem podział w następujący sposób:
wyrażenia prymitywne , byłyby to takie rzeczy jak >>, +, *, /, int, boolean, zmienne, metody itp.
środki kombinacji, Może to być dyskusyjne, albo takie rzeczy jak + i concact, lub jego mówienie o bardziej zaawansowanych pomysłach, takich jak dziedziczenie vs kompozycja i metody, aby to zrobić. Wtrysk, nowy operator, przedłużanie itp.
sposoby abstrakcji, byłaby to składnia używana do nazywania zmiennych i metod, a także środki do tworzenia interfejsów, klas, klas statycznych, metod przeciążania itp.
Możliwe jednak, że musisz podać nam więcej informacji z książki, abyśmy dokładnie wiedzieli, co tam ma na myśli.
źródło
means of combination
- że trudno jest zorientować się, co dokładnie tam należy. Ładna odpowiedź.