it-swarm-eu.dev

Proč je LISP užitečný?

LISP je zjevně výhodou pro věci AI , ale neobjevuje se pro mě, že LISP je o něco rychlejší než Java, C # nebo dokonce C. Nejsem pánem LISP, ale je pro mě neuvěřitelně obtížné pochopit výhodu, kterou by při psaní podnikového softwaru v LISP získal.

Přesto je považován za hackerův jazyk.

Proč Paul Graham obhajuje Lispa? Proč si ITA Software vybral LISP před jinými jazyky na vysoké úrovni? Jakou hodnotu má v těchto jazycích?

64
Geek

Existuje několik důvodů, proč pracuji na tom, abych se stal kompetentním s Common LISP.

  1. Homoikonický kód. To umožňuje strukturovaný samo-modifikující kód.
  2. Makra rozpoznávající syntaxe. Umožňují přepisovat kód kotlové desky.
  3. Pragmatismus. Společný LISP je navržen tak, aby se věci prováděly pracujícími profesionály. Většina funkčních jazyků zpravidla není.
  4. Flexibilita. Může to dělat spoustu různých věcí, vše za rozumnou rychlostí.
  5. Válečnost. Skutečný svět je chaotický. Pragmatické kódování končí tím, že musí buď použít, nebo vymýšlet chaotické konstrukty. Obyčejný LISP má dostatečnou bradavost, aby dokázal věci udělat.

Pravděpodobně jediným skutečným důvodem, proč se rozhodnout proti Common LISP, je to, že standardní knihovny jsou datovány.

Půjdu na končetinu a řeknu, že v obecném případě by syntaxe neměla být problém profesionálního softwarového pracovníka.

78
Paul Nathan

Líbí se mi LISP pro jeho

  • jednotný, jednoduchý a elegantní způsob reprezentace kódu i dat.
  • jedinečný pohled, který mi dává rozhodujících 80 bonusových bodů IQ při řešení těžkých problémů (s kloboukem tip na Alana Kaye)
  • extrémně pohyblivé, interaktivní a konverzační vývojové prostředí
  • bezprecedentní moc vytvářet a manipulovat s abstrakcemi

Programování bojuje se složitostí. Abstrakce jsou jediným účinným nástrojem pro boj proti stále rostoucí složitosti (s naší velmi omezenou a stálou velikostí lebky). Správa abstrakcí pomocí LISP je jako mít džina s přáním n + 1.

24
Maglob

Věřím, že správná odpověď LISP je gnomičtější. Něco jako: "Pokud se musíte zeptat, nejste připraveni."

Pak, pokud se někdo dále zeptá, je správná odpověď buď "ano", pokud je to buď/nebo otázka, nebo "Nejste připraveni."

21
glenatron

Myslím si, že výhoda LISP v oblasti mělá inteligence (AI), o které se všichni zmiňují, je poněkud historická nehoda ... LISP začal pro/v AI, ale je to jazyk pro všeobecné účely.

Věřím, že rychlost provádění není jediným důležitým aspektem jazyka (i když jsem to jednou udělal). Jedním z aspektů, které se mi na LISP líbí, je však to, že pro mě kombinuje Python a C v jednom. Mohu začít kódovat bez deklarací a prototypů okamžitě a velmi rychle (runtime a REPL jsou pro to velmi důležité). Poté, co něco spustím, přidám typová prohlášení a "postupně optimalizuji" můj kód. Je to zajímalo by mě, že stiskneme klávesu SLIME a sledujeme strojový jazyk generovaný pro funkci, o kterou se zajímám. V Pythonu neexistují žádná typová prohlášení, takže jsem nemůže dosáhnout vyšší rychlosti, ale v C je rychlejší udělat něco mnohem bolestivějšího. LISP je v tomto případě velmi užitečná.

Po tom, co jsem řekl, se mi LISP líbí hlavně kvůli makra . Když konečně pochopíte, čeho mohou makra dosáhnout, myslím, že se snadno uvedete do závorek. Také editoři jako Emacs spravují závorky sami, takže nemusíte. Přiznám se však, že jsem na začátku nenašel závorky tak špatné a vím, že někteří lidé je prostě nemohou vydržet. Ale protože celý účel maker je generovat kód v době kompilace, používá kód v LISP standardní datovou strukturu a závorky jsou jednoduše reprezentací kódu jako seznamy, což je nezbytné pro snadnější psaní maker.

Neznám žádný jiný jazyk, ve kterém můžete psát malé podjazy, abyste lépe popsali svůj problém pomocí LISP. To je výhoda, o které Paul Graham mluví v Bití průměrů. Je to extrémní modularita a stručnost. V Java musím napsat hodně surového textu, abych vyjádřil jediný nápad. V LISPu jsem mohl psát některá makra, která tento kód generují automaticky, a poté je prostě použít. Každopádně musíte pochopit některé příklady a posoudit sami. Když jsem to „viděl“, byl jsem odfouknut a pořád si myslím, že LISP je z tohoto důvodu jediným jazykem. Vždy hledám makra v běžných jazycích, abych zjistil, zda se shodují síla maker LISP, ale zatím jsem žádné nenašel. Forth je těsná vteřina.

Skončím několika kritikami ve vztahu k podnikovému softwaru:

  1. Firemní software potřebuje knihovny, a ty dobré, a LISP v tom není dobrý. Obvykle je nepotřebuji, ale když ano, musím si vybrat z malého výběru neúplného softwaru, který používá několik lidí. Měl bych přispět k nápravě, myslím ...

  2. Firemní software je obvykle tvořen velkými skupinami lidí a myslím si, že komunikaci lze narušit pomocí maker, protože v zásadě mění jazyk. Mnoho programátorů pohodlněji detekuje určité vzorce v kódu, i když je text programu delší a opakující se. Předpokládám, že v ITA mají některá pravidla týkající se maker nebo mají obrovskou knihovnu maker, která usnadňuje spolupráci (nebo jednodušeji všichni programátoři jsou experti na LISP).

18
Pau Fernández

Nemám rád LISP.

(Líbí se mi mnoho konceptů, které používá, jak zpřístupňuje výkonné techniky nativně atd.

Ale nikdy jsem nebyl přesvědčen, abych ho skutečně používal (a (i když několik lidí se pokusilo )), protože výhody jazyka lze dosáhnout s jinými programovacími jazyky (některé přímo, některé nepřímo), takže pro mě není dost výhod, abych strávil čas učením se a hádáním se strašnou syntaxí.)))

Ale jo, z důvodů, které se některým lidem líbí, zkontrolujte tyto otázky týkající se přetečení zásobníku:

Pro ty je pravděpodobně ještě několik dalších souvisejících otázek.

13
Peter Boughton

Budu interpretovat "LISP" jako " Common LISP "; Nepochybuji, že jiné odpovědi řeknou „ Schéma “. (Tip: LISP je rodina jazyků.)

Co znamená „rychlejší“? Pokud jde o čas potřebný k provedení benchmarku, ne, není to rychlejší než C ( ale může to být ).

„Rychlý“, jak dlouho trvá, než Joe Random Hacker napíše pracovní program nebo opraví chybu ve velkém softwarovém systému? Téměř jistě.

Pokud jde o tohoto hackera, používám jej, protože chci psát kód, nikoli kotl. Chci něco napsat jednou , a ne neustále se opakovat. A já chci komunikovat s programem, zatímco já psát to.

9
Frank Shearar

Líbí se mi LISP, protože je to vynikající médium pro vyjádření mých myšlenek. Predikát pro můj oblíbený jazyk je „Kdybych mohl vybrat cokoli, abych vyjádřil myšlenky, v čem by to bylo?“. V současné době je to LISP * ( Schéma být konkrétní), do té míry, že v něm najdu psaní programovacích poznámek. Jako IRL , papírové a tužkové poznámky. I když přemýšlím o programech, musím implementovat v PHP nebo Ruby nebo Python).

To není trik, který jsem se učil sám, nebo něco, co dělám pro blbou důvěryhodnost (nikdo se nevidí uvnitř mého notebooku stejně); je to jen to, že LISP je pro mě mnohem přirozenější přemýšlet než kterákoli z alternativ a jakýkoli jazyk, který s vámi rezonuje, je hluboce jedním z vás poklad.

* Stejně jako v poznámce pod čarou, Haskell zaplňuje mezeru docela rychle, když se toho dozvím více.

7
Inaimathi

Paul Graham na tuto otázku odpoví sám Díky čemu se LISP liší.

Mějte na paměti, že jej použil pro svůj start v polovině 90. let, takže Python a Ruby nebyly v tom okamžiku opravdu zralé (nebo možná ani nenarozené).

LISP má v podstatě všechny výhody dynamických jazyků a myslím si, že pro většinu dnešních webových aplikací je Python a Ruby) jsou docela úžasné a mají výhodu rámců a dokumentace a živých komunit.

Zabijákem je pravděpodobně to, že celý program je tvořen výrazy. To znamená, že můžete nějakým způsobem předávat bloky kódu funkcím (nebo makra ...), protože blok kódu není nic jiného než výraz.

Python tuto funkci přesně nemá; budete muset definovat funkce a předat je. Ruby má bloky, možná je to poněkud omezené ve srovnání s tím, co LISP dokáže (nejsem si jistý).

6
hasen

Měl jsem v minulosti kolenní reakci na Schéma , ale teď jsem připraven dát LISP ( Clojure , vlastně) výstřel.

Vidíte, v průběhu let jsem zachytil kousky jazyků jako Java, C #, C++, Python a věci už nejsou náročné.

Clojure má mnoho příslibů, zdá se být velmi čistý a může vyřešit mnoho skutečných problémů. Silným důvodem pro čistý jazyk, jako je Clojure, je příchod vícejádrových počítačů.

Yay LISP!

EDIT: ITA Software byl založen MIT grads) a Scheme/LISP byl jediný jazyk, který se mnoho z MIT grads naučilo.) Abych byl spravedlivý, jeden mohou hot-swap algoritmy LISP na běžícím výrobním systému, což je obrovské plus.

6
Job

Co se mi na LISP líbí, je to, že překračuje paradigma. Někteří lidé říkají, že LISP je funkční, jiní říkají, že je deklarativní, a jiní říkají, že je multiparadigm. Myslím, že všechny tyto postrádají smysl. Když používáte LISP, paradigma již není omezením.

Chceš předměty? Můžeš je mít. Chcete funkční programování? Můžeš to mít. Chcete Prolog - logické programování ve stylu? Napište některá makra. Chcete deklarativní programování ve stylu SQL? Jít na to. Chcete použít paradigma, která ještě nebyla vynalezena? Jsem přesvědčen, že se to dá udělat v LISP.

Až na Forth - jako jazyky, jsem ještě neviděl jiný jazyk, který nabízí tuto úroveň flexibility.

6
Jason Baker

Jde o moc. Výkon = práce (funkce programu)/čas

„Nebyli jsme venku, abychom zvítězili nad programátory LISP; byli jsme po programátorech C++. Podařilo se nám jich hodně přiblížit asi na půl cesty k LISP.“

- Guy Steele, Java spec spoluautor)

Vykreslete nějaký druh křivky mezi C++ a Java. Pokračujte a v určitém bodě podél linie najdete LISP.

6
compman

Učím se LISP ( newLisp ) z několika důvodů.

Důvod číslo jedna: LISP mě nutí myslet jinak, což z mě dělá lepší Ruby kodér).

Zdá se velmi nepříjemné dělat věci určitými způsoby v LISP, například vnořenou iteraci pro procházení několika seznamy. Takže mě nutí používat jiné věci, jako je map. Můj oblíbený jazyk, Ruby, má stejnou metodu mapy, ale ne vždy ji používám, protože je to neznámé: naučil jsem se dělat věci pomocí špatné techniky a když jazyk tuto techniku ​​podporuje, pokračuji v jejím používání.

Důvod číslo dva: LISP je praktický a má dobré moderní knihovny.

Existuje velmi pěkný, lehký webový rámec pro newLisp s názvem vážka . To mi umožňuje použít newLisp kód místo PHP pro některé úkoly. PHP se mi nelíbí, a newLisp se zdá být pro tento konkrétní úkol zábavnější než Ruby).

Důvod číslo tři: LISP je syntakticky a koncepčně konzistentní.

Pro mě je to velký rozdíl mezi Ruby a Python, konzistence).

5
philosodad

„Rychlejší“ není jednoduché měřit - opravdu záleží na tom, na který aspekt se zaměřujete. V závislosti na úkolu a implementaci LISP se rychlosti mohou přiblížit C. Podívejte se na Great Benchmarking Shoot-Out , kde se můžete podrobně seznámit. Implementace SBCL LISP je na stejné úrovni jako Java 6 Server) a je výrazně rychlejší než Ruby nebo Python).

Ale čistá rychlost není hlavním důvodem pro výběr programovacího jazyka - pokud by to bylo, všichni bychom programovali v Shromážděný jazyk stále, že? Pro mě je denní radostí LISP to, že je kód zkompilován, ale nemusím aplikaci stahovat, překompilovat vše a pak začít běžet od nuly. Místo toho mohu změnit jednu funkci a tato změna se projeví všude a efekt okamžitě vidím ve své aplikaci. Navíc, tento velmi rychlý přístup „zápis, test, zápis více, test více“ usnadňuje testování okamžitě dopředu při psaní kódu (a pak můžete tyto interaktivní sondy později změnit na testy jednotek).

Představte si, že budete psát e-maily, kde po každém řádku musíte stisknout tlačítko, abyste zkompilovali svůj e-mailový výstup na obrazovku, než budete pokračovat ve své myšlence. To je to, co píšu v Java nebo jiném podobném jazyce je pro mě. Někdy je důvod to udělat, a mám rád Java v pořádku, ale LISP je prostě lépe reagují a je snazší udělat práci.

5
Michael H.

Můžete říct „věrnost značce“?

Začal jsem ve Fortranu. Miloval jsem to.

Přepnul jsem na LISP. Nejprve jsem to nenáviděl. Pak jsem se to naučil milovat a nenávidět Fortran.

Později Pascal, C, C++, různí montéry, C #. (Vlastně nemiluji C #.)

Myslím, že jsem nestydatý?

4
Mike Dunlavey

Když byl vytvořen LISP, začali z matematiky, ne z počítačové vědy (která dosud neexistovala). A tým LISP má opravdu pár věcí. LISP měl v roce 1960 sbírku odpadků! Opravdu odvedli skvělou práci.

Myslím, že to píseň Věčný plamen pokrývá.

4
Zachary K

Velkým lákadlem je komunita. LISP má remízu pro nejambicióznější a nejjasnější vývojáře od doby, kdy byl tento jazyk vynalezen. Kdekoli se vědci snaží řešit problémy, které nikdy nebyly vyřešeny, pravděpodobně najdete LISP, jako je to ve výzkumu mělá inteligence (AI), počítačovém vidění, plánování, reprezentaci znalostí a komplexní heuristické optimalizaci. Jazyk se hodí k řešení problémů jak zdola nahoru, tak shora dolů, což se zdá být nápomocné při konfrontování nejsuchlejších výzev.

Rozšiřitelná syntaxe pomocí maker znamená, že je jen zřídka potřeba rozšířit definici jazyka. Mnoho z toho, co by vyžadovalo jazykové rozšíření v omezenějším jazyce, je s LISP jen makro. Programátoři LISP tak mohou volně využívat nově vynalezené jazykové koncepty bez nového jazykového standardu a bez nutnosti reálného rychlostního trestu. Na základní úrovni jsou díky malým rozšířením zbytečné bloky kódu kotle. Celkově nové nápady v řídicím toku, jako je sjednocení stylu Prologu, jsou implementovány efektivně a kompaktně jako rozšíření.

Systém OOP, CLOS , je ve své vlastní třídě, pokud jde o flexibilitu. Je velmi obtížné jít zpět na základní C++/Java/C # OOP po získání chuti. GoF 5 návrhových vzorů je zbytečných, protože je lze vyjádřit jednoduše a přímo.

Jazyk neměl žádného jediného vlastníka společnosti ani žádnou konečnou implementaci, i když má standard ANSI s mnoha shodnými implementacemi. Hlavní nové implementace přicházejí každé desetiletí a ty staré jsou stále docela aktivní. Odborníci mohou plánovat využití svých specializovaných znalostí na dlouhou dobu. To způsobuje určité anarchistické tření a roztříštěnost komunity, ale také to znamená, že koberec nelze vytáhnout a jazyk se nemůže stát zhoubným důvodem pro firemní nebo projektové politické důvody. Vždy se pracuje na více komerčních a open source implementacích. Ty, které se více zaměřují na výkon, se pravidelně porovnávají v rámci 2x faktoru nejrychlejších, silně financovaných imperativních jazykových implementací.

Achillovou patou rané komercializace LISP byla paměťová stopa, která vyhovovala jak typovým bezpečnostním prvkům jazyka, tak pokročilým vývojovým prostředím softwaru, které obsahovaly, s neuvěřitelnými funkcemi, jako je úplná online dokumentace včetně grafiky. 64 MB Symbolics LISP Machine nebylo rentabilní z hlediska nákladů vůči pracovní stanici Sun 8 MB. Dnes se ceny RAM ceny se zhroutily a existuje obrovský zájem o jazyky LISP, zejména s ohledem na to, že mainstreamová Java, C #, PHP jazyky dnes postupují jen minimálně přes před 30 lety.

V současné době existují konkurenční jazyky s LISP o inteligentní vývojáře: Python, Lua , Erlang , Haskell a OCaml) . Žádná však nenabízí stejnou kombinaci vyspělosti, přizpůsobivosti, více implementací a rychlosti vyhovujících standardům.

2
bcaulf

Vlastně LISP nedělám. Ale místo, kde pracuji, dělá konečné prvky s miliony řádků hlavně Fortranu. Ten chlap, kterého si nejvíce vážím při práci s výpočetní technikou (kódy výpočetní mechanika tekutin ), si myslí, že ideální kombinací je vnější LISP (hlavně proto, že se vyhnete problémům se správou paměti) a Fortran pro nízkou úroveň algoritmy (Fortran je nejlepší pro využití vektorových schopností SSE / AVX a domníváme se, že tento náskok pravděpodobně nebude uzavřen).

1
Omega Centauri