Lisp jest oczywiście zaletą dla sztucznej inteligencji , ale nie wydaje mi się, że Lisp jest szybszy niż Java, C #, a nawet C. Nie jestem mistrzem Lisp, ale bardzo trudno mi zrozumieć przewagę pisano oprogramowanie biznesowe w Lisp.
Jest jednak uważany za język hakera.
Dlaczego Paul Graham opowiada się za Lispem? Dlaczego ITA Software wybrało Lisp zamiast innych języków wysokiego poziomu? Jaką wartość ma w tych językach?
Odpowiedzi:
Jest kilka powodów, dla których pracuję nad tym, by stać się kompetentnym w Common Lisp.
Prawdopodobnie jedynym prawdziwym powodem wyboru w stosunku do Common Lisp jest to, że standardowe biblioteki są datowane.
Wyjdę na całość i powiem, że w ogólnym przypadku składnia nie powinna stanowić problemu dla profesjonalnego pracownika oprogramowania.
źródło
Lubię Lisp za to
Programowanie walczy ze złożonością. Abstrakcje są jedynym skutecznym narzędziem do walki z coraz większą złożonością (z naszą bardzo ograniczoną i stałą wielkością czaszki). Zarządzanie abstrakcjami za pomocą Lisp jest jak dżin z życzeniami n + 1.
źródło
(+ 1 n)
życzenia, a nawet więcej praktyczności(incf n)
?Uważam, że poprawna odpowiedź Lispa jest bardziej gnomiczna. Coś w stylu: „Jeśli musisz zapytać, nie jesteś gotowy”.
Następnie, jeśli ktoś zadaje dalsze pytania, prawidłowa odpowiedź to „tak”, jeśli jest to pytanie albo / albo „Nie jesteś gotowy”.
źródło
Myślę, że przewaga Lisp w dziedzinie sztucznej inteligencji (AI), o której wszyscy wspominają, jest nieco historycznym wypadkiem ... Lisp zaczął dla / w AI, ale jest to język ogólnego przeznaczenia.
Wierzę, że szybkość wykonania nie jest jedynym ważnym aspektem języka (chociaż raz to zrobiłem). Jednak jednym z aspektów, które lubię w Lisp, jest to, że dla mnie łączy on Python i C. Mogę zacząć kodować bez deklaracji i prototypów natychmiast i bardzo szybko (środowisko uruchomieniowe i REPL są do tego bardzo ważne). Kiedy już coś uruchomię, dodaję deklaracje typu i stopniowo „optymalizuję” mój kod. Dziwne jest naciśnięcie klawisza w SLIME i obserwowanie języka maszynowego generowanego dla funkcji, która mnie interesuje. W Pythonie nie ma deklaracji typu, więc nie mogę uzyskać większej prędkości, ale w C szybkie wykonanie wszystkiego jest o wiele bardziej bolesne. Lisp jest bardzo przydatny w tym przypadku.
Powiedziawszy to, lubię Lisp głównie z powodu makr . Kiedy w końcu zrozumiesz, co mogą osiągnąć makra, myślę, że łatwo sobie radzisz z nawiasami. Ponadto redaktorzy tacy jak Emacs sami zarządzają nawiasami, więc nie musisz. Przyznaję jednak, że na początku nie znalazłem tak nawiasów i wiem, że niektórzy ludzie nie mogą ich znieść. Ale ponieważ głównym celem makr jest generowanie kodu w czasie kompilacji, kod w Lisp używa standardowej struktury danych, a nawiasy po prostu reprezentują kod jako listy, co jest niezbędne, aby makra były łatwe do napisania.
Nie znam żadnego innego języka, w którym można napisać małe podjęzyki, aby lepiej opisać swój problem z łatwością Lisp. Jest to zaleta, o której mówi Paul Graham w Beating the Averages . To ekstremalna modułowość i zwięzłość. W Javie muszę napisać dużo surowego tekstu, aby wyrazić jeden pomysł. W Lisp mogłem napisać kilka makr, które generują ten kod automatycznie, a następnie po prostu z nich korzystać. W każdym razie musisz zrozumieć kilka przykładów tego, a następnie osądzić sam. Kiedy go „zobaczyłem”, byłem zdumiony i nadal uważam, że Lisp jest najlepszym językiem tylko z tego powodu. Zawsze szukam makr w głównych językach, aby zobaczyć, czy pasują one do mocy makr Lisp, ale do tej pory nie znalazłem żadnej. Naprzód jest blisko sekundy.
Kończę kilkoma krytykami dotyczącymi oprogramowania biznesowego:
Oprogramowanie biznesowe potrzebuje bibliotek i dobrych, a Lisp nie jest w tym dobry. Zwykle ich nie potrzebuję, ale kiedy to robię, muszę wybierać z niewielkiego wyboru niekompletnego oprogramowania, z którego korzysta kilka osób. Powinienem przyczynić się do rozwiązania tego, jak sądzę ...
Oprogramowanie biznesowe jest zwykle budowane przez duże grupy ludzi i myślę, że makra mogą utrudniać komunikację, ponieważ zasadniczo zmieniają język. Wielu programistów lepiej czuje określone wzorce w kodzie, nawet jeśli tekst programu jest dłuższy i bardziej powtarzalny. Podejrzewam, że w ITA mają pewne zasady dotyczące makr lub mają ogromną bibliotekę makr, która ułatwia współpracę (lub, prościej, wszyscy programiści są ekspertami Lisp).
źródło
Nie lubię Lispa.
(Podoba mi się wiele używanych pojęć, sposób, w jaki udostępnia on potężne techniki w sposób natywny i tak dalej.
Ale nigdy nie byłem przekonany, aby faktycznie go użyć ((chociaż kilka osób próbowało ), ponieważ korzyści z języka można uzyskać za pomocą innych języków programowania (niektóre bezpośrednio, niektóre pośrednio), więc nie ma wystarczających korzyści żeby zmusić mnie do poświęcenia czasu na naukę i znoszenie przerażającej składni.)))
Ale tak, z powodów, które niektórym się podobają, sprawdź poniższe pytania dotyczące przepełnienia stosu:
Prawdopodobnie jest jeszcze kilka podobnych pytań.
źródło
Zinterpretuję „Lisp” jako „ Common Lisp ”; Nie mam wątpliwości, że inne odpowiedzi powiedzą „ Schemat ”. (Wskazówka: Lisp to rodzina języków.)
Co oznacza „szybszy”? Jeśli chodzi o czas potrzebny na przeprowadzenie testu porównawczego, nie, nie jest on szybszy niż C ( ale może być ).
„Szybko”, biorąc pod uwagę, ile czasu zajmuje Joe Random Hacker napisanie działającego programu lub usunięcie błędu w dużym systemie oprogramowania? Prawie na pewno.
Jeśli chodzi o tego hakera, używam go, ponieważ chcę pisać kod, a nie bojler. Chcę coś napisać raz i nie powtarzać się ciągle. I chcę wchodzić w interakcje z programem podczas jego pisania.
źródło
M-x eval-region
(lubeval-buffer
), ale to wszystko.C-j
(co jest moralnie równoważne z enterem), a zacznie obowiązywać natychmiast.Lubię Lisp, ponieważ jest to doskonałe medium do wyrażania swoich myśli. Predykat dla mojego ulubionego języka brzmi: „Gdybym mógł wybrać coś do wyrażenia pomysłów, co by to było?”. Obecnie jest to Lisp * ( konkretnie schemat ), do tego stopnia, że piszę w nim notatki programistyczne. Jak IRL , notatki papierowe i długopisowe. Nawet gdy myślę o programach, które muszę zaimplementować w PHP, Ruby lub Python.
To nie jest sztuczka, której sam się nauczyłem, ani coś, co robię dla nerdowej wiarygodności (i tak nikt nie może zobaczyć wnętrza mojego notatnika); tylko że Lisp jest więc znacznie bardziej naturalne dla mnie myśleć niż którykolwiek z alternatyw, a każdy język, który rezonuje z tobą, że głęboko to jeden skarb.
* Jednak podobnie jak w przypisie, Haskell dość szybko zamyka lukę, gdy dowiaduję się więcej.
źródło
Problemem jest moc. Moc = praca (funkcjonalność programu) / czas
Narysuj jakąś krzywą między C ++ a Javą. Idź dalej, aw pewnym momencie wzdłuż linii znajdziesz Lisp.
źródło
Paul Graham sam odpowiada na to pytanie w What What Lisp Different .
Pamiętaj, że używał go do uruchamiania w połowie lat 90., więc Python i Ruby nie byli tak naprawdę dojrzali (a może nawet się nie urodzili).
Lisp ma w zasadzie wszystkie zalety języków dynamicznych i myślę, że w przypadku większości dzisiejszych aplikacji internetowych Python i Ruby są całkiem niesamowite i mają zalety frameworków i dokumentacji oraz dynamicznych społeczności.
Cechą zabójcy jest prawdopodobnie to, że cały program składa się z wyrażeń. Oznacza to, że możesz przekazywać bloki kodu do funkcji (lub makr ...), ponieważ blok kodu jest niczym więcej jak wyrażeniem.
Python nie ma dokładnie tej funkcji; musisz zdefiniować funkcje i przekazać je. Wydaje się, że Ruby ma bloki, być może jest nieco ograniczony w porównaniu do tego, co potrafi Lisp (nie jestem pewien).
źródło
W przeszłości reagowałem gwałtownie na Scheme , ale teraz jestem gotowy dać szansę Lispowi ( właściwie Clojure ).
Widzisz, z biegiem lat wybrałem trochę języków takich jak Java, C #, C ++, Python i rzeczy nie są już trudne.
Clojure ma wiele obietnic, wydaje się być bardzo czysty i może rozwiązać wiele rzeczywistych problemów. Mocnym argumentem za czystym językiem, takim jak Clojure, jest pojawienie się komputerów wielordzeniowych.
Yay LISP!
EDYCJA: Oprogramowanie ITA zostało założone przez stopnie MIT, a Scheme / Lisp był jedynym językiem, którego nauczyło się wiele stopni MIT. Szczerze mówiąc, algorytmy Lisp można wymieniać podczas pracy w systemie produkcyjnym, co jest ogromnym plusem.
źródło
INTERCAL
. Wyzwanie nie jest jedynym kryterium; musi także być w stanie szybko rozwiązać prawdziwe problemy. Przynajmniej Haskell jest używany i kochany przez wielu.PLEASE
?W Lisp podoba mi się to, że wykracza poza paradygmaty. Niektórzy powiedzą, że Lisp jest funkcjonalny, inni powiedzą, że jest deklaratywny, a inni powiedzą, że to multiparadygmat. Myślę, że wszystko to nie ma sensu. Kiedy używasz Lisp, paradygmat nie jest już ograniczeniem.
Chcesz przedmioty? Możesz je mieć. Chcesz programowania funkcjonalnego? Możesz to mieć. Chcesz programowania logicznego w stylu Prolog ? Napisz kilka makr. Chcesz deklaratywne programowanie w stylu SQL? Idź po to. Chcesz zastosować paradygmat, który nie został jeszcze wynaleziony? Jestem pewien, że da się to zrobić w Lisp.
Oprócz języków podobnych do Forth , jeszcze nie widziałem, aby inny język oferował ten poziom elastyczności.
źródło
„Szybciej” nie jest prostą rzeczą do zmierzenia - naprawdę zależy od tego, który aspekt jest testowany. W zależności od zadania i implementacji Lisp, prędkości mogą zbliżyć się do C. Spójrz na Great Benchmarking Shoot-Out, aby poznać szczegóły. Implementacja Lisp w SBCL jest na równi z serwerem Java 6 i jest znacznie szybsza niż Ruby lub Python.
Ale czysta prędkość nie jest głównym powodem wyboru języka programowania - gdyby tak było, wszyscy nadal programowalibyśmy w języku asemblera , prawda? Dla mnie codzienną radością Lisp jest to, że kod jest kompilowany, ale nie muszę usuwać aplikacji, rekompilować wszystkiego, a następnie zacząć działać od zera. Zamiast tego mogę zmienić jedną funkcję i ta zmiana zacznie obowiązywać wszędzie i od razu widzę efekt w mojej aplikacji. Co więcej, to bardzo szybkie podejście „pisz, testuj, pisz więcej, testuj więcej” znacznie ułatwia testowanie od razu podczas pisania kodu (a następnie możesz przekształcić te interaktywne sondy w testy jednostkowe później).
Wyobraź sobie pisanie wiadomości e-mail, w której po każdym wierszu trzeba było nacisnąć przycisk, aby skompilować dane wyjściowe wiadomości e-mail na ekranie przed kontynuowaniem myślenia. To jest dla mnie pisanie w Javie lub innym takim języku. Czasami jest ku temu powód i lubię Javę w porządku, ale Lisp jest po prostu bardziej responsywny i łatwiej jest wykonać pracę.
źródło
Uczę się Lisp ( newLisp ) z kilku powodów.
Powód numer jeden: Lisp sprawia, że myślę inaczej, co czyni mnie lepszym koderem Ruby.
Wydaje się bardzo niewygodne robić pewne rzeczy w Lisp, na przykład zagnieżdżoną iterację, aby przejść przez wiele list. Zmusza mnie to do używania innych rzeczy, takich jak
map
. Mój ulubiony język, Ruby, ma tę samą metodę mapowania, ale nie zawsze go używam, ponieważ jest nieznany: nauczyłem się robić rzeczy przy użyciu złej techniki, a kiedy język obsługuje tę technikę, nadal ją używam.Powód drugi: Lisp jest praktyczny i ma dobre nowoczesne biblioteki.
Istnieje bardzo ładna, lekka platforma internetowa dla newLisp o nazwie dragonfly . To pozwala mi używać kodu newLisp zamiast PHP do niektórych zadań. Naprawdę nie lubię PHP, a newLisp wydaje się bardziej zabawny w tym konkretnym zadaniu niż Ruby.
Powód trzeci: Lisp jest spójny pod względem składniowym i koncepcyjnym.
Dla mnie jest to duża różnica między Ruby a Pythonem, spójność.
źródło
Czy możesz powiedzieć „Lojalność wobec marki”?
Zacząłem w Fortranie. Kocham to.
Przełączyłem się na Lisp. Na początku nienawidziłem tego. Potem nauczyłem się go kochać i nienawidzić Fortrana.
Później Pascal, C, C ++, różne asemblery, C #. (Właściwie nie kocham C #.)
Chyba jestem kapryśna?
źródło
Kiedy stworzono Lisp, zaczęli od matematyki, a nie informatyki (która tak naprawdę jeszcze nie istniała). A zespół Lisp NAPRAWDĘ miał pewne rzeczy. Lisp miał śmieci w 1960 roku! Naprawdę świetnie się spisali.
Myślę, że obejmuje ją piosenka The Eternal Flame .
źródło
Dużą atrakcją jest społeczność. Od czasu wynalezienia języka Lisp przyciągnął najbardziej ambitnych i bystrych programistów. Wszędzie tam, gdzie badacze próbują rozwiązać problemy, które nigdy nie zostały rozwiązane, prawdopodobnie znajdziesz Lisp, tak jak w badaniach sztucznej inteligencji (AI), wizji komputerowej, planowaniu, reprezentacji wiedzy i złożonej optymalizacji heurystycznej. Język nadaje się do rozwiązywania problemów zarówno od dołu do góry, jak i od dołu do góry, co wydaje się pomagać w stawianiu czoła najbardziej włochatym wyzwaniom.
Kompensowalna składnia za pomocą makr oznacza, że rzadko trzeba rozszerzać definicję języka. Wiele rzeczy, które wymagałyby rozszerzenia języka w bardziej ograniczonym języku, to tylko makro z Lisp. Dlatego programiści Lisp mogą swobodnie korzystać z nowo opracowanych koncepcji językowych bez nowego standardu językowego i niekoniecznie z prawdziwą karą za szybkość. Na poziomie podstawowym ryzki kodu płyty kotłowej są niepotrzebne przez małe rozszerzenia. Całkowicie nowe pomysły w przepływie sterowania, takie jak ujednolicenie stylu Prolog, są wdrażane wydajnie i kompaktowo jako rozszerzenia.
System OOP, CLOS , jest klasą samą w sobie pod względem elastyczności. Po spróbowaniu bardzo trudno jest wrócić do podstawowej wersji C ++ / Java / C # OOP. Wzory projektowe GoF 5 stają się niepotrzebne, ponieważ można je wyrazić w prosty i bezpośredni sposób.
Język nie ma ani jednego właściciela korporacyjnego ani jednej ostatecznej implementacji, chociaż ma standard ANSI z wieloma zgodnymi implementacjami. Najważniejsze nowe wdrożenia pojawiają się co dekadę, a stare wciąż są dość aktywne. Eksperci mogą planować wykorzystać swoją specjalistyczną wiedzę przez długi czas. Powoduje to pewne anarchistyczne tarcia i rozdrobnienie społeczności, ale oznacza również, że dywan nie może być wyciągnięty, a język nie może stać się konający z powodów politycznych lub korporacyjnych. Zawsze pracuje się nad wieloma implementacjami komercyjnymi i open source. Te bardziej nastawione na wydajność regularnie porównują w ramach 2x współczynnik najszybszych, silnie finansowanych implementacji języka imperatywnego.
Piętą achillesową wczesnej komercjalizacji Lisp był ślad pamięci, aby uwzględnić zarówno funkcje bezpieczeństwa typu języka, jak i zaawansowane środowiska programistyczne, które one obejmowały, z niesamowitymi funkcjami, takimi jak pełna dokumentacja online, w tym grafika. 64- megapikselowa maszyna Symbolics Lisp nie była opłacalna w stosunku do stacji roboczej Sun o pojemności 8 MB. Dzisiaj ceny pamięci RAM spadły i istnieje ogromne zainteresowanie językami Lisp, szczególnie biorąc pod uwagę, że główne języki Java, C # i PHP rozwinęły się dziś tylko minimalnie w porównaniu do tych sprzed 30 lat.
Współczesne języki konkurują z Lisp o udostępnianie myśli inteligentnym programistom: Python, Lua , Erlang , Haskell i OCaml . Ale żadna z nich nie oferuje takiego samego połączenia dojrzałości, elastyczności, wielu implementacji zgodnych ze standardami i szybkości.
źródło
Nie robię Lisp. Ale miejsce, w którym pracuję, zawiera elementy skończone z milionami linii, głównie Fortran. Facet, którego najbardziej szanuję w obliczeniach (kody obliczeniowe mechaniki płynów ) uważa, że idealną kombinacją jest Lisp na zewnątrz (głównie dlatego, że unikasz bałaganu z zarządzaniem pamięcią) i Fortran dla algorytmów niskiego poziomu (Fortran najlepiej nadaje się do wykorzystania możliwości wektorowe SSE / AVX i uważamy, że to prawdopodobieństwo raczej nie zostanie zamknięte).
źródło