Lisp hakkında bu kadar harika olan ne? [kapalı]


105

İyi mi kötü mü olduğunu söyleyecek kadar Lisp bilmiyorum. Görünüşe göre Lisp'i kullanan herkes onu seviyor, ancak bugünlerde en popüler diller C'den geliyor.

Öyleyse Lisp ile ilgili bu kadar harika olan nedir ve neden daha fazla kullanılmıyor? Lisp ile ilgili (aralıksız parantez sayısı dışında) düpedüz kötü olan bir şey var mı?


5
"Bugünlerde en popüler diller C'den türemiştir" sadece yüzeysel olarak. Sadece küme parantezi kullanmak yerine özelliklere bakarsanız, modern dillerin Lisp'ten çok da uzak olmadığını ve her zaman yaklaştığını göreceksiniz. Diyelim ki C # veya Python veya Ruby'deki bir program, C'den çok Lisp'e benzeyecek.
Ken

11
C'ye benzeyen ancak daha çok Lisp gibi davranan dillere iyi bir örnek JavaScript'tir. Tasarımının çoğu Scheme'ye benzer.
JAL

İyi bir nokta Ken: Eskiden Lisp'e özgü artan sayıda özellik (birinci sınıf işlevler, veri olarak işlevler, hatta makrolar) başka dillerde de geliyor. Ve geri bildirim tek yönlü değildir: Lisp, diğer dillerin tanınmasında yeni teknikler ve deyimler geliştirmektedir (örneğin, nesne yönelimli paradigmanın başarısına yanıt olarak CLOS).
itowlson

6
Lisp her yerden fikir aldı, ancak CLOS neye yanıt olarak? CLOS (1986-1987), büyük ölçüde Lisp için önceki nesne sistemlerinin bir standardizasyonuydu, örneğin, Lisp Machine Lisp (1980) dahil Flavours. "OO paradigmasının başarısının" 1980'de henüz belirgin olduğunu sanmıyorum: "Sınıflarla C" sadece bir yaşındaydı (ve "C ++" olarak yeniden adlandırılmasının hala 3 yıl uzağındaydı) ve bilmiyorum Simula-67'nin her zamankinden çok popüler olduğunu. Lisp, günümüzde popüler dillerin sahip olmadığı bir dizi başka gelişmiş özelliğe sahiptir; OO başarılı olmuş gibi görünüyor, ancak Lisp bunu başaramadı çünkü (veya ne zaman) popülerdi.
Ken

Lisp kullanan herkesin onu sevdiğini sanmıyorum. Benim deneyimim farklı. Scheme ile başlayan bilgisayar bilimi öğrencilerine sormaya çalışın. Muhtemelen yaklaşık% 10'u onu sevecek,% 30'u saygı duyacak ve% 60'ı nefret edecek. Ayrıca popüler dillerin çoğunun C'den geldiğini düşünmüyorum
Rainer Joswig

Yanıtlar:


58

Lisp, programlama dillerinin Chuck Norris'idir.

Lisp, diğer dillerin ölçüldüğü bardır.

Lisp'i bilmek, geliştiricilerin aydınlanmasını gösterir.

3 zayıf yön (ve bunların karşı argümanları) duydum:

  1. Dinamik yazım.

    Statik olarak yazılan diller için, derleyiciye belirli bir hata sınıfını yakalaması için yeterli bilgi verme etrafında dönen bir argüman var, böylece çalışma zamanında meydana gelmezler. Ama yine de test etmeniz gerekiyor.

    Bu makale, daha fazla testin yanı sıra dinamik yazmayı tartışmaktadır: Güçlü Yazma ve Güçlü Test .

  2. Anlaması zor.

    Aslında bunun iki bölümü var: öğrenme ve araçlar.

    Lisp gerçekten "elde etmek" için biraz çaba harcar, ama buna değer, çünkü Lisp öğrenmek sizi diğer dillerde gerçekten daha iyi bir programcı yapacaktır. Örneğin, bir kez gerçekten "kapanış" yaptığınızda, Java'nın iç sınıflarını anlayacaksınız. Ve birinci sınıf işlevleri "edindikten" sonra, bunlar olmadan bir dili her kullandığınızda depresyonda olacaksınız.

    The Little Schemer'ı okudum ve her ikisi de mükemmel olan Practical Common Lisp'i okuyorum .

    Sıradaki araçlar. Mac kullanıyorum, bu yüzden Aquamacs Emacs ( Emacs'ı bir acemi için yaşanabilir kılar) ve Steel Bank Common Lisp (SBCL) üzerine yoğunlaştım.

  3. Kütüphane eksikliği.

    Henüz kesin olarak söyleyemem ama bundan şüpheliyim. Web siteleri oluşturmak için Hunchentoot ve Elephant'ın iyi bir araç seti sağladığı görülüyor . Ama gerçekten Lispers'ın kütüphanelerin eksikliğinden şikayet ettiğini görmüyorum (belki Lisp çok güçlü olduğu için onlara ihtiyaç duyulmuyor?).


4
Adres (3) - Clojure'a baktınız mı?
viksit

5
"Ama gerçekten Lispers'ın kütüphanelerin eksikliğinden şikayet ettiğini görmüyorum (belki Lisp çok güçlü olduğu için onlara ihtiyaç duyulmuyor?)." Son ifadeyi "(belki Lisp çok güçlü olduğu için onlar için gerekli değildir?)" Şeklinde düzeltirdim. Bu büyük bir fark yaratır.
Agnius Vasiliauskas 01

50
Lisp'in neden harika olduğu bir şey söylemiyor, benden olumsuz oy verin.
Kilon

30
Olumsuz oy verildi çünkü "X harika! X harika! X, Y'ye benziyor, bu da harika çünkü harika olduğunu söylüyorum!" "X neden büyük olarak kabul ediliyor?" sorusunun yanıtı değil. Siyasi referans da uygun değildir ve faydasızdır (çoğu insan liberteryenizmin iyi bir fikir olduğunu düşünmez bile). Üç nokta faydalıdır, ancak keşke "Zayıflığı var A ... Ama aslında bir zayıflığı bile değil!".
Superbest

1
Lisp, programlama dillerinin Chuck Norris'idir. yani onu bu kadar iyi yapan da bu. Anladım. Olumsuz oy verildi.
NiCk Newman

71

"Lisp, programlanabilir bir programlama dilidir."
- John Foderaro, CACM, Eylül 1991

İşte benim görüşüm:

Yüzeyde, Lisp güzel, basit bir işlevsel programlama dilidir. Neredeyse hiç sözdizimi yok ve tüm parçalar mantıksal yollarla birbirine uyuyor.

Biraz daha derine inersen oku SICP One, (sadece birkaç ilkel verilen) tüm tercüman zar zor bir kod sayfası ve iki, kod ve veri arasındaki ilişkidir: ve metacircular değerlendirici yazma, iki şeyi keşfetmek zarif programlama tekniklerine izin verir.

Bunu tam olarak özümsediğinizde, diğer diller yalnızca birkaç şey söylemenize izin verdiklerinde değişmiş gibi geliyor. Sözdizimi ve anlambilim tanımlayabiliyorsanız, Lisp herhangi bir soyutlama oluşturabilir.


1
Teoride Rust, Ruby, C, Java, Python, Erlang gibi herhangi bir dili Lisp'e yerleştirebilirsiniz. Bu yüzden Python (Hy) ve Rust'un s-ifade sürümüne (Risp) adı verilir [bunların ne kadar kararlı olduklarını bilmeme rağmen]. Python yerine Hy'de kod yazarsanız, parinfer / paredit ( shaunlebron.github.io/parinfer ) gibi makrolar ve yapısal düzenleme yeteneğine sahip olursunuz . Makrolar, kendi DSL'lerinizi Lisp'e yerleştirmenize izin verir ve ayrıca yavaş kodu derleyici makroları aracılığıyla hızlı koda dönüştürmek için kullanılabilir. Ayrıca sexp ağacını dönüştürerek Python (Hy) kodunu Rust'a (Risp) dönüştürebilirsiniz.
aoeu256

Ayrıca bunu defalarca duydum. Aoeu256'da biraz daha tartışır mısın?
Öğrenci

67

Lisp iyidir çünkü çok minimal, basit ve düzenli bir sözdizimine sahiptir.

Lisp kötüdür çünkü çok minimal, basit ve düzenli bir sözdizimi vardır.


4
Minimal, basit, düzenli bir sözdiziminin nesi kötü?
oskarkv

27
@oskarkv - tamamen düzenli bir minimum sözdizimi, herhangi bir özel kullanıma yönelik önyargı olmadığı anlamına gelir. Pareto ilkesiyle karşılaşana kadar bu kulağa hoş geliyor: En sık görülen vakalara karşı önyargılı olmak ve tüm vakaların eşit derecede muhtemelmiş gibi davranmayı bırakmak daha etkilidir. Müşterilerinizin% 20'si NYC'de ve% 80'i LA'de ise, coğrafi açıdan "tarafsız" kalabilmek için Kansas / Oklahoma sınırında bir yerde çitin üzerine oturmak mantıklı mı? Veya müşterilerin çoğunun olduğu yere gitmek daha mantıklı mı? Özelliklerini olası sorunlara doğru çarptıran dilleri tercih ediyoruz.
Daniel Earwicker

4
Lisp sözdizimi gerçekten iyidir. Haskell'i Clojure'den sonra öğrendim, ancak o zamana kadar Haskell'in sözdizimi bile bir engel gibi geldi. Lisp suntaksının tekdüzeliği harika. Yani, hangi önyargıdan bahsettiğinizi tam olarak bilmiyorum. Esnekliğe karşı önyargı? Kulağa kötü geliyor.
oskarkv

3
Böyle söylersen kulağa kötü geliyor. Ben öyle söylemedim! En yaygın olaylara, en olası durumlara yönelik önyargıya ne dersiniz? Bunlar (elbette) göreceli terimlerdir, bu yüzden ne yaptığınıza bağlıdır. Ne yapacağınız hakkında gerçekten herhangi bir bilgiden yoksunsanız, hazırlanmaya çalışmanın bir anlamı yoktur. Ama muhtemelen doğru değil - bilginiz var ve bu yüzden hazır olmanız gereken en olası durumlara kendinizi hazırlayabilirsiniz ("önyargılı").
Daniel Earwicker

22

"Yeterince karmaşık olan herhangi bir C veya Fortran programı, Common Lisp'in yarısının ad hoc, gayri resmi olarak belirlenmiş, hatalarla dolu, yavaş bir şekilde uygulanmasını içerir."

Greenspun'un Onuncu Kuralı


16

İşte bazı yararlı bağlantılar:


1
Lisp'de harika (makroların biraz yoğunlaştığını kabul etsem de, yolun yarısına geldim); ama okumak için Lisp'i bilmeniz gerekir. Bu küçük problemin dışında, sadece Lisp hakkında değil, genel olarak yazılım mühendisliği hakkında da harika bir kitap.
JS


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.