Wiem, że są to dialekty tej samej rodziny języków zwanych seplenieniem, ale jakie dokładnie są różnice? Czy mógłbyś przedstawić przegląd, jeśli to możliwe, obejmujący takie tematy, jak składnia, cechy, funkcje i zasoby.
Wiem, że są to dialekty tej samej rodziny języków zwanych seplenieniem, ale jakie dokładnie są różnice? Czy mógłbyś przedstawić przegląd, jeśli to możliwe, obejmujący takie tematy, jak składnia, cechy, funkcje i zasoby.
Odpowiedzi:
Wszystkie mają ze sobą wiele wspólnego:
(function-name arg1 arg2)
Wspólne cechy charakterystyczne Lispa:
Charakterystyczne cechy Clojure:
[]
i mapy {}
używane jako standardowe oprócz standardowych list ()
- oprócz ogólnej użyteczności wektorów i map niektórzy uważają, że jest to innowacja, która sprawia, że ogólnie jest bardziej czytelnaCharakterystyczne cechy schematu:
Powyższe osoby przeoczyły kilka rzeczy
Common Lisp ma również wektory i tablice skrótów. Różnica polega na tym, że Common Lisp używa # () dla wektorów i żadnej składni dla tabel skrótów. Myślę, że schemat ma wektory
Common Lisp ma makra czytnika, które pozwalają na użycie nowych nawiasów (podobnie jak Racket, potomek Scheme).
Scheme i Clojure mają higieniczne makra, w przeciwieństwie do niehigienicznych makr Common Lispa
Wszystkie języki są albo nowoczesne, albo mają obszerne projekty renowacji. Common Lisp zyskał obszerne biblioteki w ciągu ostatnich pięciu lat (głównie dzięki Quicklisp), Scheme ma kilka nowoczesnych wdrożeń (Racket, Chicken, Chez Scheme itp.), A Clojure powstał stosunkowo niedawno
Common Lisp ma wbudowany system OO, chociaż różni się on znacznie od innych systemów OO, których mogłeś używać. Warto zauważyć, że nie jest to wymuszane - nie musisz pisać kodu OO.
Języki mają nieco inne filozofie projektowania. Schemat został zaprojektowany jako minimalny dialekt do zrozumienia modelu aktora; później został użyty w pedagogice. Common Lisp został zaprojektowany, aby ujednolicić niezliczone dialekty Lisp, które wyrosły. Clojure został zaprojektowany z myślą o współbieżności. W rezultacie Scheme ma reputację minimalnego i eleganckiego, Common Lisp jest potężny i niezależny od paradygmatu (funkcjonalny, OO, cokolwiek), a Clojure faworyzuje programowanie funkcjonalne.
Nie zapomnij o różnicach między Lisp-1 i Lisp-2.
Schemat i Clojure to Lisp-1:
oznacza to, że zarówno nazwy zmiennych, jak i funkcji znajdują się w tej samej przestrzeni nazw.
Common Lisp to Lisp-2:
Funkcja i zmienne mają różne przestrzenie nazw (w rzeczywistości CL ma wiele przestrzeni nazw).
Gimp jest napisany w Schemacie :)
W rzeczywistości przydział oprogramowania, który niektórzy myślą, że może być napisany w C ++, został prawdopodobnie wykonany pod parasolem Lispa, ciężko jest wyłowić złote jabłka z paczki. Faktem jest, że C ++ nie zawsze był popularny, wydaje się być popularny tylko dzisiaj ze względu na historię aktualizacji. Przez mniejszą połowę stulecia C ++ nawet nie wykorzystywał wielowątkowości, to właśnie tam Python jest dziś szambo bezużytecznego, nieprzetestowanego, błędnego kodu kleju. Trochę szybciej do przodu, a teraz widzimy wzrost w programowaniu funkcjonalnym, bardziej przypomina adaptację lub śmierć. Myślę, że Java ma rację, jeśli chodzi o część adaptacyjną.
Schemat został zaprojektowany, aby uprościć język Lisp, to był jego jedyny cel, z wyjątkiem tego, że nigdy się nie przyjął. Myślę, że Clojure robi coś podobnego, co ma na celu uproszczenie schematu dla JVM nic więcej. Podobnie jak każdy inny język JVM, tylko po to, aby zwiększyć wrażenia użytkownika, tylko po to, aby uprościć pisanie schematu w krainie Java.