Co jest takiego wspaniałego w Lisp? [Zamknięte]

105

Nie znam wystarczająco Lispa, aby powiedzieć, czy jest dobry, czy zły. Wygląda na to, że każdy, kto używał Lispa, uwielbia go, ale obecnie najpopularniejsze języki wywodzą się od C.

Więc co takiego jest w Lispie, że jest tak wspaniały i dlaczego nie jest używany częściej? Czy jest coś po prostu złego w Lisp (poza nieustanną ilością nawiasów)?

Darrell Brogdon
źródło
5
„Obecnie większość popularnych języków wywodzi się z C” tylko powierzchownie. Jeśli spojrzysz na funkcje, a nie tylko na użycie nawiasów klamrowych, przekonasz się, że współczesne języki nie są tak daleko od Lispa i są coraz bliżej. Program w C #, Pythonie lub Ruby, powiedzmy, będzie wyglądał bardziej jak Lisp niż będzie wyglądał jak C.
Ken
11
Dobrym przykładem języka, który wygląda jak C, ale działa bardziej jak Lisp, jest JavaScript. Wiele z jego projektów jest podobnych do Scheme.
JAL
Dobra uwaga, Ken: rosnąca liczba funkcji, które były unikalne dla Lispa (funkcje pierwszej klasy, funkcje jako dane, a nawet makra) pojawia się w innych językach. A informacja zwrotna nie jest jednostronna: Lisp rozwija nowe techniki i idiomy w rozpoznawaniu innych języków (np. CLOS w odpowiedzi na sukces paradygmatu zorientowanego obiektowo).
itowlson,
6
Lisp wziął pomysły z całego świata, ale CLOS w odpowiedzi na co? CLOS (1986-1987) był w dużej mierze standaryzacją wcześniejszych systemów obiektowych dla Lispa, np. Lisp Machine Lisp (1980) zawierał Flavours. Nie sądzę, aby „sukces paradygmatu OO” był jeszcze widoczny w 1980 roku: „C with Classes” miał zaledwie rok (i wciąż 3 lata do zmiany nazwy na „C ++”) i nie wiem że Simula-67 był zawsze bardzo popularny. Lisp ma wiele innych zaawansowanych funkcji, których nie mają obecnie popularne języki; Tak się składa, że ​​OO odniosło sukces, ale Lisp nie dostał tego, ponieważ (lub kiedy) był popularny.
Ken
Nie sądzę, żeby każdy, kto używał Lispa, to kochał. Moje doświadczenie jest inne. Spróbuj zapytać studentów informatyki, którzy zaczynali od Scheme. Prawdopodobnie pokocha go około 10%, 30% będzie go szanować, a 60% nienawidzi. Nie sądzę też, by większość popularnych języków pochodziła od C.
Rainer Joswig

Odpowiedzi:

58

Lisp to Chuck Norris języków programowania.

Lisp to pasek, z którym mierzone są inne języki.

Znajomość Lispa demonstruje oświecenie programistów.

Słyszałem o 3 słabościach (i ich kontrargumentach):

  1. Dynamiczne pisanie.

    Istnieje argument przemawiający za tym, że języki z typowaniem statycznym obracają się wokół dostarczania kompilatorowi wystarczających informacji, aby wychwycić pewną klasę błędów, aby nie zdarzały się one w czasie wykonywania. Ale nadal musisz przetestować.

    W tym artykule argumentuje się za dynamicznym pisaniem wraz z większą liczbą testów: Silne pisanie vs. silne testowanie .

  2. Trudno odebrać.

    W rzeczywistości są to dwie części: nauka i narzędzia.

    Lisp wymaga trochę wysiłku, aby naprawdę "zdobyć", ale warto, ponieważ nauka Lispa naprawdę uczyni cię lepszym programistą w innych językach. Na przykład, kiedy naprawdę „dostaniesz” domknięcia, zrozumiesz wewnętrzne klasy Javy. A kiedy już „zdobędziesz” funkcje pierwszej klasy, będziesz przygnębiony za każdym razem, gdy użyjesz języka bez nich.

    Przeczytałem The Little Schemer i czytam Practical Common Lisp , które są doskonałe.

    Dalej są narzędzia. Jestem na komputerze Mac, więc skupiłem się na Aquamacs Emacs (sprawia, że ​​Emacs jest znośny dla nowicjusza) i Steel Bank Common Lisp (SBCL).

  3. Brak bibliotek.

    Nie wiem jeszcze na pewno, ale wątpię. Do tworzenia witryn internetowych wygląda na to, że Hunchentoot i Elephant zapewniają dobry zestaw narzędzi. Ale tak naprawdę nie widzę Lispers narzekających na brak bibliotek (może dlatego, że Lisp jest tak potężny, że po prostu nie są potrzebne?).

rickmode
źródło
4
Adres (3) - Czy spojrzałeś na Clojure?
viksit
5
„Ale naprawdę nie widzę Lispers narzekających na brak bibliotek (może dlatego, że Lisp jest tak potężny, że po prostu nie są potrzebne?)”. Poprawiłbym ostatnie stwierdzenie na „(może dlatego, że Lisp jest tak potężny, że po prostu nie są dla nich potrzebne?)” To robi ogromną różnicę.
Agnius Vasiliauskas
50
Nie mówi nic, dlaczego seplenienie jest świetne, negatywnie ode mnie.
Kilon,
30
Negowany, ponieważ „X jest super! X jest świetny! X jest jak Y, co jest również świetne, ponieważ mówię, że jest świetne!” nie jest odpowiedzią na pytanie „Dlaczego X jest uważany za wspaniały?”. Odniesienie polityczne jest również nieodpowiednie i nieprzydatne (większość ludzi nawet nie uważa libertarianizmu za dobry pomysł). Te trzy punkty są pomocne, ale żałuję, że nie były to: „Ma słabość A… Ale tak naprawdę to nawet nie jest słabość!”.
Superbest
1
Lisp to Chuck Norris języków programowania. więc to sprawia, że ​​jest tak dobry. Rozumiem. Głosowano w dół.
NiCk Newman
71

„Lisp to programowalny język programowania”.
- John Foderaro, CACM, wrzesień 1991

Oto mój pogląd:

Pozornie Lisp jest przyjemnym, prostym funkcjonalnym językiem programowania. Nie ma prawie żadnej składni, a wszystkie elementy pasują do siebie w logiczny sposób.

Jeśli zagłębisz się trochę głębiej, przeczytasz SICP i napiszesz ewaluator metacircular, odkryjesz dwie rzeczy: Po pierwsze, cały interpreter (biorąc pod uwagę tylko kilka prymitywów) to zaledwie strona kodu, a po drugie, związek między kodem a danymi pozwala na eleganckie techniki programowania.

Kiedy w pełni to przyswoisz, wydaje się, że inne języki są jak kamień, gdy pozwalają ci powiedzieć tylko kilka rzeczy. Lisp może w ogóle zbudować dowolną abstrakcję, jeśli możesz zdefiniować dla niej składnię i semantykę.

Josh Lee
źródło
1
Teoretycznie możesz osadzić dowolny język w Lisp, taki jak Rust, Ruby, C, Java, Python, Erlang. Tak więc wersja S-expression Pythona (Hy) i Rusta nosi nazwę (Risp) [chociaż nie wiem, jak stabilne są]. Jeśli piszesz kod w Hy zamiast w Pythonie, masz możliwość makr i edycji strukturalnej, takiej jak parinfer / paredit ( shaunlebron.github.io/parinfer ). Makra pozwalają na osadzanie własnych DSL w Lisp, a także mogą być używane do przekształcania wolnego kodu w szybki kod za pomocą makr kompilatora. Możesz także przekształcić kod Pythona (Hy) w Rust (Risp), przekształcając drzewo sexp.
aoeu256
Słyszałem to też wielokrotnie. Czy mógłbyś trochę bardziej wyeliminować @ aoeu256?
Uczeń
67

Lisp jest dobry, ponieważ ma bardzo minimalną, prostą, regularną składnię.

Lisp jest zły, ponieważ ma bardzo minimalną, prostą, regularną składnię.

Daniel Earwicker
źródło
4
Co jest złego w minimalnej, prostej, regularnej składni?
oskarkv
27
@oskarkv - całkowicie regularna minimalna składnia oznacza, że ​​nie ma uprzedzeń do żadnego konkretnego zastosowania. Brzmi to dobrze, dopóki nie napotkasz zasady Pareto: skuteczniej jest być nastawionym na najczęściej występujące przypadki i przestać udawać, że wszystkie przypadki są jednakowo prawdopodobne. Jeśli 20% twoich klientów jest w Nowym Jorku, a 80% w Los Angeles, czy warto siedzieć na płocie gdzieś na granicy Kansas / Oklahoma, aby pozostać „bezstronnymi” w kategoriach geograficznych? A może bardziej sensowne jest pójście tam, gdzie jest większość klientów? Preferujemy języki, które wypaczają swoje funkcje w kierunku prawdopodobnych problemów.
Daniel Earwicker
4
Składnia Lispa jest naprawdę dobra. Nauczyłem się Haskella po Clojure, ale już wtedy nawet składnia Haskella wydawała się przeszkodą. Jednolitość opłaty słonecznej Lispa jest świetna. Więc nie wiem dokładnie, o czym mówisz. Upodobanie do braku elastyczności? Brzmi źle.
oskarkv
3
Brzmi źle, kiedy tak to ujmujesz. Nie powiedziałem tego w ten sposób! A co z tendencją do najczęściej występujących, najbardziej prawdopodobnych sytuacji? Są to (oczywiście) terminy względne, więc to zależy od tego, co robisz. Jeśli naprawdę brakuje Ci informacji o tym, co będziesz robić, nie ma sensu się przygotowywać. Ale to prawdopodobnie nieprawda - masz informacje, więc możesz przygotować się („nastawić”) na najbardziej prawdopodobne sytuacje, na które musisz być przygotowany.
Daniel Earwicker
22

„Każdy wystarczająco skomplikowany program w języku C lub Fortran zawiera ad hoc, nieformalnie określoną, obarczoną błędami, powolną implementację połowy Common Lisp”.

Dziesiąta zasada Greenspun

Paolo
źródło
16

Oto kilka pomocnych linków:

Greg Hewgill
źródło
1
Na Lispie jest super (jestem dopiero w połowie, chociaż przyznaję, że makra stają się trochę gęste); ale musisz znać Lispa, żeby go przeczytać. Poza tym małym problemem jest to świetna książka nie tylko o Lispie, ale ogólnie o inżynierii oprogramowania.
JS