LISP bugünün dünyasında hala yararlı mı? En çok hangi sürüm kullanılıyor?


117

Düzenli aralıklarla kendime yeni bir programlama dili öğretmeye çalışıyorum. Son zamanlarda, Lisp ve lehçelerinin spektrumun tam tersi ucunda C / C ++ gibi dillerden nasıl geçtiğini okudum, bu da beni daha fazla tanımak için yeterince merak uyandırdı. Ancak, iki şey bana net değil ve ben onlarla ilgili rehberlik arıyorum:

  1. LISP halen günümüzde dünyada uygulanmakta mı / kullanılmakta mı, yoksa FORTRAN / COBOL gibi eski bir dil mi? Demek istediğim, mevcut kodu korumaktan başka yeni projelerde de kullanılıyor mu?

  2. En yaygın kullanılan lehçe nedir? Scheme ve Common Lisp'e en yaygın 2 lehçe olarak rastladım ve hangisinin öğrenmesi için en iyisi / yararlı olduğu fikrini istedim - ve eğer bir rütbeli başlangıç ​​için başlamak için herhangi bir kaynak önerebilirseniz çok sevinirim.

Alışkın olduğum us languagesl dilden temelde farklı bir dil öğrenmeye istekliyken, tamamen eskiyse bir şeye gereksiz çaba sarfetmek istemiyorum - hala profesyonelce "ölü" olsaydı öğrenirdim, ama sadece akademik bir bakış açısıyla ...


10
Bu soruya çok ilgi duyuyorum. Her zaman ve sonra zamanım olduğunda, Lisp'i öğrenirken bir bıçak almaya karar verdim. Her defasında sorduğun aynı soru ve belirsizlikler yüzünden engelleniyorum. Lisp'in hangi sürümünü öğrenmeliyim? Herhangi biri (Paul Graham hariç) gerçekten Lisp kullanıyor mu? Lisp veya Haskell gibi daha yeni bir işlevsel programlama dilinden birini mi öğrenmeliyim? Lisp'in
Programa


Pratik Ortak Lisp: gigamonkeys.com/book
Joe Internet

"Hala"? (Şaka yapıyorum!)
saat

Bunu SO ile ilgili diğer konuyu yeni buldum: stackoverflow.com/q/1614724/212942
TCSGrad

Yanıtlar:


59

Scheme'yi seviyorum, eğer JVM ile çalışmak istiyorsanız, JVM'de çalışmak üzere tasarlanmış bir lisp olan Clojure'a bakmalısınız. Ve evet Lisp, böylesine minimal bir tasarımın ne kadar güçlü olduğunu görmeyi öğrenmeye değer! Lisp'i oluşturan millet bazı şeyleri gerçekten doğru yaptı. Modern dillerin harika yeni özelliklerinin 1960'lı yıllarda sahip olduğu şaşırtıcı!

Gömülü bir şema için guile deneyin: http://www.gnu.org/s/guile/


C / C ++ ile iyi çalışan bir lehçe var mı, çünkü ben öncelikle C ++ 'dan biriyim? Bu lehçeyi öğrenmeye başlamak için bir rütbe acemi için bazı kaynaklardan da bahsedebilir misiniz?
TCSGrad

10
Planını öğrenmek için en iyi kitap "Küçük Şarlatan " ve "SICP" mitpress.mit.edu/sicp'dir . C / c ++ içine gömülebilecek bir takım uygulamalar vardır, ancak bugünlerde hangilerinin iyi olduğunu gerçekten bilmiyorum, bu nedenle biraz googling yapmanız gerekebilir.
Zachary K

1
Planın çok basit olduğunu belirtmeliyim! 2 saat içinde dilin% 90'ını öğreneceksiniz. Tabii ki bu sizin ustalaşacağınız anlamına gelmiyor, sadece sentaksın nasıl çalıştığını bileceksiniz.
Zachary K

5
@ shan23 Şeması öğretim için tasarlanmıştır. Kuşkusuz bir birinci sınıf öğrenciye nasıl programlanacağını öğretmek için kullanılabilir, bu yüzden onu öğrenmekte sorun yaşamayacağınıza hiç şüphem yok. C veya C ++ entegrasyonu istiyorsanız, Guile'ye bakın ( en.wikipedia.org/wiki/GNU_Guile ).
Vitor Py

1
Kent Dybvig'in Şema programlama dili kitabı belki de o kadar ünlü değil, ama çok hoş bir kitap. scheme.com/tspl4 Emacs kullanıyorsanız, o zaman bazı Lisp öğrenmek faydalıdır .
blispr

68

2. soruya cevap olarak, "En yaygın kullanılan lehçe":

"En yaygın şekilde kullanılan" ifadesini nasıl kullandığınıza bağlıdır. Seçili birkaç lehçenin ne kadarını kullandığı konusunda daha düşük sınırlar için bazı peçete matematiği .

Yazılan en ham kod

  • Eğitim uygulamaları nedeniyle Muhtemel Şema (tüm lehçeler)
    • 270 okul ... Tahminen 50 öğrenci / yıl, 500 satır kod / öğrenci, 10 yıl çalışıyor. Peçete matematiğine dayalı 1.000.000'den fazla çizgi .
    • Raketin kendisinde ve araçlarında 500.000 adet Raket hattı.
  • AI ve muhtemelen bir sürü açık kaynak kodu ve üretim kodu nedeniyle Common Lisp . (Bkz. Üretim kodu).
  • Muhtemelen Emacs Lisp yüzünden ...
    • Emacs kendisi: 1.000.000'den fazla hat
    • Halka açık yazılmış emacs miktarı - 237 modül, yaklaşık 200 satır / modül, sadece EmacsWiki'de 40.000'den fazla satır, muhtemelen ELPA'da
    • Ayrıca, emacs Lisp, .emacs dosyaları vb. İle yazılmış uygulamalar.
  • Clojure
    • Tahmin etmek zor. Çoğunlukla küçük dotcom'lar. Çok olabilir.

Kazanan: Şema veya Ortak Lisp. Çok fazla bilinmeyen var.

Çoğu 'üretim' kodu

Kazanan: Common Lisp'i tahmin ediyorum . Common Lisp ve Clojure kullanımına dayanarak 1. soruyu "Evet" olarak cevaplayabileceğimizi düşünüyorum.

En son kullanıcılar

  • Ortak Lisp
    • Orbitz, Bing Travel ve Kayak.com dahil ITA Yazılım müşterileri - Muhtemelen milyonlarca.
  • Clojure
    • Citigroup (detay yok), Akamai (detay yok), simple.com, diğerleri. Muhtemelen milyonlarca.
  • düzen
    • CS öğrencileri, araştırmacılar ve hobiler. Bazilyondan daha az.
    • Uncharted serisi - 5 milyonun üzerinde
  • Emacs Lisp - Çoğunlukla unix platformlarındaki programcılar. Bir milyon olabilir.

Kazanan: Scheme burada en düşük limite sahip, çünkü Uncharted'ta satış numaraları var, ancak oldukça tartışmalı.

Sonuç

Sonuç olarak, bu büyük elmaları buluyorum.


4
Küçük portakallar değil mi? Veya saf limon mu?
Vatine

Nitekim, şema - özellikle raket şeması - en güncel lisp lehçesi gibi görünmektedir. Profesyonel kalitede araçlar ve kütüphaneler.
Bikal Lem

@Bikal OpenGL desteğinin o kadar uzun sürmemesini diliyorum, ancak doğrudan mod raket kodumun en büyük hatası değildi ...
Jesse Millikan

Orbitz'in CL kullandığı hakkında hiçbir fikrim yoktu ... Bir sonraki işimi nerede arayacağımı biliyorum: D
Rig

2
Raket'e 100 k'dan fazla LOC yazılmıştır. Raket standart kütüphane / IDE / araçlar 500k üzerindedir, ayrıca SET, Boeing ve Naughty Dog gibi firmalarda kullanılmaktadır.
Sam Tobin-Hochstadt,

43

LISP halen günümüzde dünyada uygulanmakta mı / kullanılmakta mı, yoksa eski bir dil mi

Evet öyle, ama nereye bakacağını bilmek zorundasın. LISP kullanan insanlar bu konuda çok yüksek sesle bağırmaya eğilimli değil, ancak son 20 yıl boyunca çok etkili olan birkaç yüksek profilli girişimden bir kaç örnek var. Avrupa'daki küçük şirketler arasında da çok popülerdir.

En yaygın kullanılan lehçe nedir?

Bu geçerli bir soru, ancak cevaplaması kolay bir soru değil. Ayrıca cevaplanması özellikle yararlı olmayabilir: birçok uygulamanın özel bir odağı vardır; bu nedenle, aksi takdirde ne kadar yaygın olarak kullanıldığına bağlı kalmak yerine, kendi probleminize uyuyorsa en iyi şekilde seçilir. Bunun yerine, size seçenekleriniz hakkında biraz bilgi vereceğim ve kendiniz karar verebilirsiniz.

LISP bir dil ailesidir ve bu dillerin her birinin lehçeleri ve uygulamaları ailesi vardır. Geniş lehçeler iki kampa "LISP" ve "Şema" dır.

LISP'ler: Nispeten yakın zamana kadar Ortak LISP kraldı. Tüm farklı LISP'leri birleştirme girişimiydi ve kabahatsiz olmadan, LISP'nin "C ++" sıydı. Yani, BÜYÜK bir dildi . Her şeye sahipti. Son birkaç yılda, Clojure ortaya çıktı. Clojure, Java Sanal Makinesi üzerinde çalışan ve işlevsel bir programlama felsefesinde kendisini kökten çalışan bir LISP'dir. Geleneksel olarak, diğer LISP'ler kesinlikle çok paradigma olmuştur. Clojure ilginç çünkü hem LISP hem de JVM'nin hem en iyisi hem de en kötüsü. Orada Java tabanlı dillerin ayrıntı bir sürü hala ve onlar düğmeleri ve farklı şeyler için düğmeler çok var bu yüzden sözdizimi ile oldukça ücretsiz ve kolay oldum, ancak bazı var gerçektenVeri türleri etrafındaki ilginç fikirler, özellikle de fonksiyonel programlamadaki fikirleri uygulamak için edindikleri pratik yöntemlerden bazıları.

Şemalar: Şemalar, LISP'lerin katı bir alt kümesidir. Şema, Steele ve Sussman tarafından icat edildi ve erken yaşamda, MIT Computing 101 Dersi Kursunda kullanılmasıyla dikkat çekiciydi. Şema "Algoritmik Dil Şeması (RnRS) Revize ^ n Raporu" nda tanımlanmıştır. Evet: Orada matematik şakası var. Program, diğer LISP’lerin olmadığı şekilde standartlaştırılmış bir dildir. Bu, uygulamalar arasındaki taşınabilirliğe büyük ölçüde yardımcı olur, ancak gümüş bir kurşun değildir. Standardizasyon çabaları muhafazakar olma eğilimindeydi ve uygulamalardaki yenilikler, özellikle de modüller gibi şeyler etrafında farklı olma eğilimindeydi. Ayrıca, IETF'in RFC sürecine benzer bir dizi SRFI (Uygulama İçin Şema İstekleri) bulunmaktadır. İnsanlar küçük şeyleri gerektiği gibi standartlaştırmak için kullanıyorlar.

Şemalar, LISP'lerden farklıdır; bir tanesi özyinelemeyi verimli hale getirmeye yardımcı olan "kuyruk çağrısı optimizasyonu" olan, karşılaması gereken bir takım zor şartlara sahiptir. Bu nedenle, özyinelemeli programlama stilleri Şema'da LISP'den çok daha popülerdir. Şema, aynı zamanda kaba olmadan, LISP'in “C” si gibi. Yani, bu küçük bir dildir ve hepsini bir anda kafanızda tutabilmeniz gerekir.

Şu anda iki Şema ailesi vardır: 5. versiyona (R5RS) ve 6. versiyona (R6RS) dayananlar. R6RS'nin karmaşıklığı, öncekilerinden çılgınca daha büyüktü ve birçok R5RS uygulaması, R7RS'nin R6RS'den R5RS'ye daha benzer olacağını umarak bunu atlamayı seçti. R7RS standardizasyonu süreci halen devam etmekte ve hem R5RS uygulayıcılarının isteklerini hem de R6RS halkının isteklerini, ilk çalışma gruplarında küçük bir temel dili standartlaştırarak ve daha sonra daha büyük özellikleri standartlaştırmak için ikinci bir çalışma grubunu görevlendirmeye dahil etmeye çalışmaktadır. Bu, dilin hem küçük gömülü donanım hem de daha yetenekli makineler üzerinde etkili ve kullanışlı uygulamalara sahip olmasını sağlayacaktır.

Şimdi daha spesifik olacağım:

PicoLisp gerçekten, gerçekten harika bir LISP'dir. Bu küçücük! Yazar, kendisi için yazdı ve anladığım kadarıyla, 1980'lerden bu yana yaşamını sürdürüyor. Eğer onunla bir konuşmaya katılma fırsatı bulursanız, o zaman yapmalısınız: gerçekten ilginç ve eşyalarını gerçekten biliyor ve ana akım veya sıkıcı herhangi bir şeyin en küçük kokusunu bile alamayacaksınız.

Common Lisp uygulamalarına aşina değilim, bu yüzden onlar hakkında daha fazla yorum yapmayacağım.

Guile resmi GNU Şemasıdır.

Raket bir R6RS programıdır ancak son zamanlarda ağı genişletmiş görünüyor ve "dil oluşturma, tasarım ve uygulama için bir platform olarak hizmet etmeye" çalışıyor.

Tavuk pratik bir şema olmayı hedeflemektedir. R5RS'ye dayanır ve C'ye kadar derlenir. Bu, mevcut C kütüphanelerini kullanmayı kesinlikle önemsiz kıldığından, gerçekten, gerçekten, önemli bir avantaj olarak ortaya çıkıyor. Bu nedenle, Tavuk muhtemelen günlük betik dili olarak Perl, Python, Ruby, vb. Değiştirmek için en kullanışlı programdır. Sadece birkaç yıl boyunca tüm ihtiyaçları için kullanmış birkaç kişi var. Bir derleyici yanı sıra interaktif bir REPL var. Topluluk (hem posta listesinde hem de IRC'de) bilgili, cana yakın ve yardımsever.

Çok sayıda modül içeren bir uygulamaya bakın: bu, yaygın olarak kullanılabilir olduğunu ve eldeki göreve yardımcı olacak bir şeyin olabileceği anlamına gelir.

Derleyici içeren bir uygulama arayın veya en azından kesinlikle IDE veya REPL tabanlı olmayan bir şey arayın. Öğretim için tasarlanan uygulamaların birçoğunun genel amaçlı kodlama için kullanımı çok zordur.

Kullandığım şey olarak Tavuk'u tavsiye ederim. Kişisel projelerimde kullandım ve (ve şu anda kullanıyorum) profesyonelce kullandım.

Tamamen eskiyse bir şeye gereksiz çaba sarfetmek istemiyorum. Eğer profesyonel olarak "ölü" olsaydı, yine de öğrenirdim, ama sadece akademik bir bakış açısıyla ...

Şema profesyonelce ölmedi, ancak bu bağlamda kullanmak için bazı uzunluklara gitmeniz gerekebilir. Chicken gibi bir şey akademik bir arayıştan çok daha fazlasıdır ve şu anda kullandığınız yüksek seviyeli dillerin neredeyse tüm temellerini kolayca kapsayabilir.


3
Raket bir R6RS Şeması değildir; Raket dağıtımının sağladığı diller arasında bir tane var. Gerçek Raket dili, RnRS'den birkaç önemli yönden (hakkında karışık hislerime sahip olduğum) ayrılan bir Programdır.
JasonFruit

27

Gerçekten tüm Lisps için konuşamıyorum ama Clojure şu anda kesinlikle sıcak ve alakalı bir dil. Londra Clojure Kullanıcı Grubu Bu haftanın başlarına gittim, 100'den fazla katılımcı vardı.

Geçen yıl boyunca Lisp'i Clojure biçiminde öğrenmek için (Java ve C # ile ilgili çok fazla deneyimin ardından) çok aydınlatıcı bir deneyim olduğunu gördüm. Bunun ana nedenleri:

  • İşlevsel programlamaya (diğer Lisps'tan çok daha fazla) oldukça güçlü bir vurgu yaptı . Yazar ve BDFL Rich Hickey sık sık Haskell'i dil tasarımı konusundaki ilhamlarından biri olarak gösterdi; bu da tamamen değişken veri yapıları ve tembel sonsuz diziler vb.
  • Makro metaprogramlama - Lisp "kod veridir" felsefesini gerçekten yaşamadığınız sürece anlamak zordur, ancak Lisps'ın bu kadar etkileyici ve üretken olmasının nedenlerinden biri
  • Çok çekirdekli eşzamanlılık için harika destek - Aslında Clojure'un şu anda eşzamanlı programlama için en iyi dil olduğunu düşünüyorum . Bu konuda aydınlatıcı bir sunum için http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey e bakınız.

Ayrıca, aşağıdaki nedenlerden dolayı gerçek üretim kullanımı için pratik bir seçenek gibi görünmektedir:

  • JVM'de çok kolay Java birlikte çalışabilirliği ile çalışmak, Java ekosistemindeki tüm kitaplıklara ve araçlara erişmenizi sağlar
  • Bu bir var dinamik dil neredeyse hiç Demirbaş ile geliştirme ve prototip çalışmaları çok uygun kılan varsayılan olarak. Ancak, ihtiyaç duyduğunuz yerde oldukça iyi bir performans elde etmek için statik tip ipuçları ekleyebilirsiniz.

Clojure'u birkaç yatırım bankasında ve girişiminde kullanan insanları şahsen tanıyorum. Ayrıca Clojure'u kendi başlangıcım için birincil geliştirme dili olarak seçtim, bu yüzden paramı ağzımın olduğu yere koymak için istekliyim :-)


9

Şu anda Lisp'i de öğreniyorum (ve onu seviyorum). Common Lisp kullanıyorum ama ayrıca SBCL , Arc (Not: bu, Paul Graham'in Lisp versiyonudur), Vitor Braga'nın da belirttiği gibi Yahoo mağazası / Viaweb yarattı) ve Lisleg için Visual Studio'ya benzeyen Allegro CL. GUI oluşturmak, ancak, ben hiç kullanmadım).

Kullanımlara gelince, Lisp Yapay Zeka alanında çok kullanılmıştır, ancak dürüst olacağım, Lisp için diğer "genel" lerden kaç tane kullandığından emin değilim. Lisp'te yerleşik olarak bulunan web sitelerinin çoğu aslında başka dillerde yeniden yazılmıştır, bu yüzden web geliştirmede kullanıldığını söylemek zordur (öyle değil, ama onu kullanan daha büyük siteler ). Hızlı bir arama yaptıktan sonra (çok hızlı) burada Wikipedia'dan Common Lisp ile yazılmış bir yazılım listesi var .

[EDIT] Lisp'i profesyonel olarak kullanmakla ilgili olarak, Lisp'i kullanmanıza yardımcı olacak işler var. Java ya da C # işleri dedikleri kadar sayılmazlar ama varlar. Lisp'in iç uygulamalar için kullanılan dillerden biri olduğunu ve şirketlerin Lisp kullandıklarını ilan ederek pes etmek istemedikleri bir rekabet avantajı sağlayabileceğini düşünüyorum. P.SE’de bir yazı gördüğümü hatırlıyorum, Smalltalk’ın mali alanda benzer olduğunu belirtti.

Ayrıca, farklı paradigmalar öğrenebildiğini gösterebilmek, işinde Lisp kullanmasanız bile daha fazla kapı açabilir.

“Lisp, nihayet aldığınızda sahip olacağınız derin aydınlanma deneyimi için öğrenmeye değer; bu deneyim sizi Lisp'i çok fazla kullanmasanız bile, gününüzün geri kalanında daha iyi bir programcı yapacak.” - Eric Raymond, "Nasıl Hacker Olunur"

[/DÜZENLE]


7
FWIW, SBCL, Common Lisp'in bir uygulamasıdır ve Allegro CL'dir.
Vatine

@Vatine - Doğru olurdu. Utangaç bir yüz olsaydı şimdi yapardım. Neden farklı olduklarını varsaydım bilmiyorum. Aptal beni farklı derleyici! = Farklı lehçesi :) Teşekkürler!
Jetti,

@Jeff: "CL çekirdeği" birlikte çalışabilir halde bırakılırken, ikisi de dili farklı yönlerde genişletiyorlar.
Vatine

@Jetti En başta ne kullanıyordunuz?
Mark C

CLISP kullandığımı düşünüyorum, artık sahip olmadığım bir VM görüntüsündeydi. Sanırım cehaletim, ortak lisp olduğuna inanmamı sağladı. En azından şimdi daha iyi biliyorum.
Jetti,

8

Bugün Lisp'i öğrenmek istiyorsanız, hızlı bir uygulama uygulaması olan raketten birine bakabilirim (aslında, aslında şemadan biraz ayrıldı, bu yüzden şimdi kendi lehçesidir) veya clojure, Çalıştığı JVM (bu nedenle milyonlarca kütüphane mevcuttur, ayrıca kendi Java kodunuzla etkileşime girebilirsiniz).

Aslında kullanmayı öğrenmeseniz bile, öğrenmenin her zaman faydası vardır: bir süredir Lisp'e aklınızı sardıktan sonra, başka dillerde bile sorunların düşünülüp ele alınmasının yeni yollarını öğrenirsiniz.


3
Şema ile ilgili sorun, onunla biraz pratik yapmaya başladığınızda, diğer dillere geri dönmek istememenizdir. C ++ 'ta akışları (muhtemelen sonsuz, tembel olarak değerlendirilmiş, değişmeyen sekanslar) uygulamaya başladım ve bu Scheme'den çok daha fazla kod! Scheme'nin sadelik ve iktidar birleşimi beni gerçekten şaşırttı.
Giorgio,

+ + Raket için. Gerçekten, diğer programların eleştirilerinden biri olan inanılmaz derecede KOMPLE. Ve kendi dillerini yaratma konusunda programın yapabileceklerinin ötesine geçiyor.
Scott Klarenbach

7

Amazon arka uçlarının önemli bir kısmı eskiden Lisp'teydi ancak şimdi C ++ dilinde yeniden yazılmıştı ya da duydum (bunun için güvenilir bir kaynağım olmadığını kabul etmeliyim).

Yahoo! Mağazalar Lisp web uygulamalarının klasik örneklerinden biridir. Yahoo! Mağazalar Paul Graham'ı duymuş olabilirsiniz . Graham, en iyi bilinen Lisp’lerden biridir ve bu konuda geniş kapsamlı yazılar yazmaktadır. Onun yerini bilinen noktaları okumak isteyebilirsiniz.

AutoCAD, makro sistemi için Lisp lehçesine sahipti. Hala yapıp yapmadığını bilmiyorum.

Düzeni temiz bir dildir ve çok zarif. Muhtemelen en sevdiğim programlama dili, bu yüzden önyargılı olabilirim. Şu anda büyük bir uygulama yazacak olsaydım, büyük olasılıkla C'ye bir iskelet uygulaması yazardım, iş kurallarını Scheme'de genişletir ve tanımlardım. Bu, Scheme'i kullanmamı ve C'yi arttırmamı sağlıyor - hız için ve hemen hemen her şey için kütüphanelerin tam kullanılabilirliği için.


Şema için başlangıç ​​kitabı / derleyici olarak ne önerirsiniz? Linux kullanıyorum, bu yüzden acemiler için açıkça yararlı olan herhangi bir editör varsa, (Kile
LaTex

1
@ shan23 The Little Schemer ( ccs.neu.edu/home/matthias/BTLS ) en iyi bahis. Emacs'in Scheme için en yaygın editör olduğuna inanıyorum, ancak alışması biraz zaman alıyor.
Vitor Py

1
Lisp editörü, bu kadar kolay, emacs kullanın. Lisp adamları tarafından yazılmış ve lisp dilinde yazılmıştır.
Zachary K

Ayrıca, Racket IDE ( racket-lang.org ); Emacs benzeri ancak otomatik biçimlendirme ve Düzenleme tercümanı ile etkileşime sahip.
Jeremiah Willcock

Lispbox ( common-lisp.net/project/lispbox ) kutunun dışında çalışır (bazı emacs deneyimi yararlıdır). Bu ccl (dayalıdır ccl.clozure.com ), bakınız ayrıca gigamonkeys.com/book/...
Giorgio

4

LISP halen günümüzde dünyada uygulanmakta mı / kullanılmakta mı, yoksa FORTRAN / COBOL gibi eski bir dil mi? Demek istediğim, mevcut kodu korumaktan başka yeni projelerde de kullanılıyor mu?

Silikon Vadisi'ndeki bazı girişimlerde Lisps yapan birkaç erkek tanıyorum ve Amazon.com'un başlangıçtan beri Lisp kullandığını biliyorum (bir nedenden dolayı C ++ ile değiştirdiklerini duyduğuma rağmen?)

Ancak dikkat edilmesi gereken bir şirket Yaramaz Köpek . Bütün oyunları bir Lisp lehçesiyle yazılmıştır. Aslında, kendi başlarına yuvarlandılar, ancak Uncharted serisinde MZScheme kullanıyorlar.

En yaygın kullanılan lehçe nedir? Scheme ve Common Lisp'e en yaygın 2 lehçe olarak rastladım ve hangisinin öğrenmesi için en iyisi / yararlı olduğu fikrini istedim - ve eğer bir rütbeli başlangıç ​​için başlamak için herhangi bir kaynak önerebilirseniz çok sevinirim.

Common Lisp, Clojure, Scheme ve Emacs Lisp’in en yaygın kullanılan dört lehçe olduğuna ve bunlardan en yaygın şekilde kullanılan Scheme’in olduğundan şüpheleniyorum. Elbette bunu destekleyecek hiçbir şeyim yok. :)

Başkalarının önerdiği gibi SICP ve Küçük Schemer'ı seviyorum, ama aynı zamanda oldukça eğlenceli bir okuma olan Lisp Ülkesini de öneririm . :)


Gerçekten de, Lisp Land harika bir okuma.
Chiron

@ 4bu3li Sizce oy kullanmadınız mı?
Mark C,

1
Yaramaz Köpek Hakkında: Bu tamamen doğru değil, PS2 oyunları bir lisp benzeri dil olan GOAL'a yazılmıştır ... Fakat PS3'e taşındığından beri, C ++ kullanmaya geçtiler. MZScheme, çoğunlukla makro işlemci olarak kullanılır, C ++ ile yazılır ve bazı varlık işlemlerinde kullanılır ve bazı komut dosyaları S-exps ile yazılır. Ancak PS3'te hiçbir MZScheme kodu çalıştırılmaz.
Arelius,

2

Kısmen, onunla ne yapmak istediğinize bağlı olduğunu düşünüyorum - çeşitli programlama kavramlarına ilişkin fikirlerinizi ilerletmek ve kendinizi daha iyi bir programcı yapmak istiyorsanız, o zaman en azından bir Lisp dil ​​öğrenmeye değer olduğunu söyleyebilirim. Bu dille çalışan bir iş bulmak amacıyla özgeçmişinize ekleyecek başka bir dil arıyorsanız, muhtemelen başka bir yere bakmak istersiniz. Orada o kadar çok Lisp işi yok.

Şahsen, SBCL veya daha yakın bir zamanda Clojure (ve bazı Emacs Lisp'i kullanmaya çalışıyorum, fakat htat's çünkü uzun vadeli bir Emacs kullanıcısıyım - Lisp öğrenmeye çalışırken Emacs Lisp'i öğrenmeye çalışırım). Şimdi tek yapmam gereken şu dillerle oynamak için zaman bulmak.


1
Çoğunlukla ilk ... bu kadar başarılı olursam, özgeçmişimi kesinlikle incitmeyecek olan oldukça açık bir şey :). Ama cidden, farklı programlama "stilleri" üzerine bir perspektif istiyorum, bu yüzden farklı senaryolarda hangisinin kullanılacağı konusunda iyi bir fikrim var (sadece bir çekiçle donatılmış duruma düşmek istemiyorum, Tüm sorunlara çivi gibi davranmam gerekiyor !!)
TCSGrad

2

LISP'de bir ton iş olduğunu bilmiyorum, kesinlikle göremiyorum. Ancak uzun süredir LISP kullandıkları bazı NASA probları hakkında okuduklarını ve dünyadan yeni kodlar koyduklarını hatırlıyorum.

Ayrıca New York'ta clojure buluşma grubu çok büyük. Sanırım ilgileniyorsanız ve clojure buluşma grubunuza giderseniz, ağ kurma ve iş bulma fırsatları bulabilirsin (clojure işleri değil, Java / C ++ / etc gibi şeyler). New York bölgesinde kesinlikle muazzam gibi görünüyor, diğer alanlar değişebilir.

Ayrıca LISP farklı bir düşünce tarzıdır. Ek olarak, LISP ve SQL, tonlarca iç içe ifadelerin kullanılmasına neden olur. Bir ton SQL kullandım ve LISP'nin daha anlamlı olduğunu farkettim. Fakat SQL ile LISP kullanırken parantez içindeki parantezleri ve ifadeleri kullanmakta zorlanıyorsanız, muhtemelen SQL ifadelerini anlamak çok daha kolay olacaktır.

Klasik bir örnek, MAX (a, b, c) 'nin nasıl uygulanacağıdır. Bir sürü if ifadesiyle karmaşık bir işlev yapabilirsiniz. Ya da sadece söyleyebilirsin

MAX (MAX (a, b), c)

ve benim için okuması daha kolay olan iki MAX öğesinin basit yuvalanmış çağrılarını kullanın. Her ne kadar performans bir sorun olsa da, diğer yolla da yapmak isteyebilirsiniz, ancak her bir yöntemi kullanırken karşılaştırma sayısını sayma zahmetinde bulunmadım. ifadeleri birden çok kez, ifadeler birden çok kez değerlendirilebileceğinden beklenen sonucu elde edemeyebilirsiniz, bu nedenle yan etkilere dikkat edin ...


3
Aslında MAX ile basitleştirebilirsinizMAX(MAX(a b) c)
Andrea

Haklısın, uyandıktan kısa bir süre sonra cevap veriyorum. Cevabı değiştirdim.
Cervo

2
NASA projesi Derin Uzay 1'di
Frank Shearar

2

İki ek puan:

İlk olarak, Lisp, fonksiyonlar veya veriler arasındaki etkileşimin genellikle karmaşık olduğu kod yazmak için harika bir dildir. Pek çok popüler dilde, programınızın neden yaptığını yaptığınız konusunda kafanız karışırsa, programın içsel durumunu olduğu gibi incelemenize izin vermek için özel işlevler yazmanız gerekir. Bazı dillerde, kodunuzun yeniden derlenmesi için beklemeniz gerekir. Elbette buna yardımcı olan hata ayıklayıcılar gibi araçlar olabilir. Yine de Lisp'te ihtiyacınız olan tek şey programı durdurmanın bir yoludur ve daha sonra tipik olarak Lisp'teki her şeye erişebilirsiniz . Common Lisp'te, bazen sadece ^ C yazarım veyaerrortek bir işleve (yeniden derlenmesi gereken tek şey budur ve yeniden derlemek için hiçbir şey yapmanıza gerek yoktur). Programı durdurduktan sonra, anında bir hata ayıklayıcısına atıldım - ancak hata ayıklayıcı bana Lisp'in tüm gücünü veriyor ve hata ayıklayıcıdan çıkıp belirli işlevleri çağırabilirim. Veri yapılarını kolayca inceleyebilirim programımda Çoğu Program benzer uygulamalara izin vermelidir. Lisp bu bakımdan benzersiz değildir, ancak sunduğu şey birçok popüler dilin teklifinin ötesine geçer.

İkincisi: Lisp'in herhangi bir lehçesini deneyecek olursanız, (a) parantezle eşleşen bir editör kullanmadan ve (b) uygun Lisp girintisini öğrenmeden yapmam. Sizin için de uygun girintiliğe yakın bir editör kullanmak iyi bir fikirdir. C / C ++ / Java tarzı kod biçimlendirme, Lisp'ten daha az parantez / ayraç / parantez içeren diller için tasarlanmıştır. Lisp güzel baskı stili, aşina olduğunuzda işe yarar ve satır başına bir parantez parantezi koyarak, alanınızın yarısını parantezlerle karıştırmaz veya boşa harcamazsınız.


1

Şu anda Lisp'in çoğunlukla danışmanlık mağazalarında kullanıldığı izlenimini edindim (danışmanlık mağazalarının çoğunlukla kullandığı değil).

Pratik yazılım için biraz outre olarak kabul edilir. Çoğunlukla insanlar buna alışık olmadığından, inanıyorum.

Geleneksel olarak, Scheme Lisp'in oldukça akademik bir lehçesidir ve Common Lisp endüstri lehçesiydi.

Lisp, sembolik manipülasyon ve yansıma esque yetenekleri için özellikle yararlıdır.

Örnek olarak Lisp'i öğrenmek için yazdığım kod, fonksiyonun hedef fonksiyonla farkını minimize etmek amacıyla rastgele lambda fonksiyonlarını oluşturan, değerlendiren ve ardından üzerinde çalışan bir programdı. Bunların hepsi doğrudan manipülasyon oldu. C ++ veya Java gibi bir dilde, bilgisayarın manipüle edebileceği fonksiyonlar için bir temsil icat etmek zorunda kalacaktım.


Scheme / Common Lisp arasındaki farklar hakkında ilginç nokta - bunun neden / nasıl olduğunu açıklayabilir misiniz?
TCSGrad


1

Common Lisp ve Scheme hakkında bazı bakış açısı eklemek istiyorum. JVM nedeniyle gizlilikten kaçınıyorum, bu yüzden üzerinde çok fazla perspektifim yok.

Düzeni güzel ve özlü, iyi tanımlanmış bir dildir. CL'nin miras nedeniyle alması gereken çok fazla karar aldı ve daha saf bir yaklaşım izledi. Örneğin, değişkenler ve fonksiyonlar aynı isim alanındadır. Varsayılan dil daha küçük ve daha özlüdür; bu, size lisp'un iyi olduğu şeyleri öğretmek için iyi çalışır; örneğin, yineleme yerine özyinelemenin kullanımına baskı yapar, çünkü varsayılan olarak yinelemeli döngüler yoktur ve kuyruk çağrısı optimizasyonu gerektirir . Program, öğrenmeye çok değer verdiği çok ilginç bir hijyenik makro sisteme sahiptir. Fakat IMO, önce CL tarzı Unhygienic makrolarını öğrenmeyi öneriyorum, bunların çoğu (?) Şema lehçeleri, şartnamenin bir parçası olmasa bile en az bir uygulama sunuyor. Öğrenme uğruna bir dil öğrenmek istemeniz çok göründüğü için

Scheme'nin topluluğunun bölünmüş olduğunu ve birkaç küçük cep dışında, daha çok gerçek işlerin yapılması konusunda araştırma yapmaya adadığı söyleniyor ... Mesela, her lehçenin kendi paket yöneticisi var ve paketler çoğu zaman taşınabilir değil. Şema topluluğunda büyük bir sorun olan lehçeler arasında

Öte yandan Common Lisp, bir dili geliştirmek için çok daha pratik bir yaklaşım gibi görünüyor. Standart, birçok lisp kodunun uygulamalar arasında taşınabilir olması, birçok derleyicinin hızlı ve iyi bir şekilde optimize edilmesidir. Birçoğu uygulamalar arasında taşınabilir olan çok sayıda paket vardır. Ve görünüşe göre (nispeten) büyük miktarda gerçek ürün dilde yaratılıyor. Ayrıca quicklisp ile paket yönetimi Ruby veya Node gibi modern bir toplulukta elde edeceğiniz şeye oldukça yakın hissediyor. Ancak CL, hatasız değildir, bu noktada şemaya göre çok büyük bir özelliğe sahiptir ve hatta Lisps'te geleneksel olarak kütüphane olarak yazılmış bir nesne olan CLOS bile IIRC'nin bir parçasıdır. Ve sistemin büyük bir kısmı boyunca yerleşik miras hissedebilirsiniz.

Aksi takdirde, clojure hakkında konuşamayacağımı söyledim ve amacınız Emacs uzantılarını yazmaksa Emacs Lisp açıkça uygun bir seçimdir ve diğer yazılımlar için uygun bir seçim değildir.

TLDR; Amacınız öğrenmekse, Şeması öneririm. Ancak, yazılım oluşturmak istiyorsanız, iki ana lisp varyantından Common Lisp'i öneririm.


BTW, PLT Raket daha fazla şema gibi bir dildir ve asıl iş dünyasında faydalı görünmeye çalışan program topluluğundandır. Bugünlerde bir şemaya kod yazacak olsaydım, muhtemelen PLT ya da Chicken Scheme olurdu, ama daha sonra kalbimdeki yumuşak bir nokta olabilir.
Arelius,

0

Cevaplardan çok şey öğrendim. Bu aydınlatıcı sohbete katkıda bulunan herkese teşekkür ederiz.

NewLISP'den bahsetmeliyim . Hem CL'den hem de Scheme'den biraz farklı olsa da, birçok çok yararlı işlevi yerine getirir. Http sunucusunu, çoklu işlem işlevselliğini (Cilk) ve uzaktan değerlendirme işlevlerini çok temiz ve kullanımı kolay buluyorum.

Tek bir çalıştırılabilir küçük, hızlı ve bir sürü serin pil içerir.


Bahsetmek adil olabilir ama tam olarak tavsiye etmem ... Lexical kapsam yok ve mesela modül yok - cidden? NewLISP'nin başarmaya çalıştığı şeyi gerçekten anlamıyorum.
cji

2
Haklısın - bu farklı. Bağlamları ve dinamik kapsamları kullanır ve deneyimlerimden modüller ve bağlamlar birbiriyle ilişkilidir. Başka bir CL veya Şema olmaya çalışmaz. Nasıl değiştiğiyle ilgili sayfayı okumak ( newlisp.org/index.cgi?page=Differences_to_Other_LISPs ) tasarım konularına ışık tutar. Aynı şekilde, bir CL veya Şeması deneyimi isteyen birini tavsiye etmem. Ancak bazı kullanım durumları için uygun bir seçim olabilir. Açık kaynak ekosisteminin güzelliği bu - çok fazla seçenek!
CyberFonic,

0

Hangi Lisp lehçesinin öğrenileceğini seçerken göz önünde bulundurulması gereken bir başka faktör de uygulamaların sayısı ve kalitesi olabilir. Bir lehçenin yalnızca bir veya iki uygulaması varsa, o zaman bu hatalar düzeltilinceye kadar onların kusurlarına sadık kalırsınız ve insanların uygulamayı geliştirmeyi her zaman durdurma şansı vardır. Kendi başına bu, Lisp'in tek uygulamalı bir lehçesini kullanmamak için bir neden değil, ancak dikkate alınması gereken bir şey. Scheme ve Common Lisp'in bir avantajı, bu lehçelerin birçok uygulamasının olmasıdır. Her iki dilde de standartlar yayınlanmıştır, bu nedenle nispeten yeni uygulamaların çoğunlukla aynı kodu çalıştırması muhtemeldir. Bu uygulamalardan bazıları uzun zamandır devam ediyor, ancak halen aktif bir gelişim içinde: Şu anda yüksek kaliteli uygulamalar ve hala geliştiriliyorlar.


Bu kriterlere göre Clojure, SBCL ile kıyaslandığında çok da kötü değil: benchmarksgame.alioth.debian.org/u32/…
AndreasScheinert 22.03

Sağol Andreas. Haklısın. JVM hakkında ne kadar bilgim olduğunu gösterir - çok değil. Kısmen, nispeten yavaş ama başka türlü JVM tabanlı bir CL olan ABCL tarafından yanlış yönlendirildim.
Mars

JVM'de bir Lisp istiyorsanız, Clojure'a gidin. Mükemmel değil ama gerçek bir zevk (IMHO)
AndreasScheinert
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.