Lisp neden faydalıdır? [kapalı]


64

Açıkçası Lisp AI işleri için bir avantaj , ancak Lisp’in Java, C # ve hatta C’den daha hızlı olduğu ortaya çıkmıyor. Lisp’in ustası değilim, ancak avantajı anlamanın inanılmaz derecede zor olduğunu düşünüyorum. biri iş yazılımını Lisp'te yazacaktı.

Oysa hacker'ın dili olarak kabul edilir.

Paul Graham neden Lisp'i savunuyor? ITA Yazılımı neden Lisp'i diğer üst düzey dillere göre seçti? Bu diller üzerindeki değeri nedir?


20
"Lisp'in Java'dan daha hızlı olduğunu sanmıyorum, C # ya da C'den daha hızlı olduğu konusunda" biraz kafa karıştırıcı. C tipik olarak "hızlı kod, çünkü metale yakın programlama yapıyorsunuz" standardı olarak düzenlenir - hemen hemen her şey için en iyisidir. Şimdi, Java ve diğer GC'd dilleri bazı bağlamlarda, örneğin bellek ayırma / temizleme hızı gibi durumlarda onu yenebilir. Ancak, bu cümle yine de biraz geriye doğru görünüyor.
Michael H.

2
Lisp, bahsettiğinizden daha yüksek bir dildir, bu nedenle genellikle daha yavaştır.
segfault

5
@ Tian: "üst seviye dil" kesin bir tanım gerektiriyor. Bir tanesine sahip olsa bile, bu bir sekreter olmayana benziyor. (thanks @Mark)
Mike Dunlavey

5
@BoTian "yüksek seviye", varsayılan olarak "yavaş" ile aynı değildir.

24
Lisp, diğer tüm dil tasarımcılarının ne kadar yanlış olduğunu göstermek için var.

Yanıtlar:


78

Common Lisp ile yetkin olmak için çalışmamın birkaç nedeni var.

  1. Homoikonik kod. Bu yapılandırılmış kendi kendini değiştiren kod sağlar.
  2. Sözdizimi duyarlı makrolar. Kazan plakası kodunun yeniden yazılmasına izin veriyorlar.
  3. Pragmatizm. Common Lisp, çalışan profesyoneller tarafından yapılan işleri almak için tasarlanmıştır. İşlevsel dillerin çoğu kural olarak değildir.
  4. Esneklik. Hepsi makul hızda birçok farklı şey yapabilir.
  5. Wartiness. Gerçek dünya dağınık . Pragmatik kodlama, dağınık yapıları kullanmak veya icat etmek zorunda kalmasına neden olur. Common Lisp, işleri halletmek için yeterince boşa gidiyor.

Muhtemelen Common Lisp'e karşı seçim yapmak için tek gerçek neden, standart kütüphanelerin tarihli olmasıdır.

Bir uzuv üzerinde çıkacağım ve genel durumda, sözdiziminin profesyonel bir yazılım çalışanı için bir sorun olmaması gerektiğini söyleyeceğim.


8
Sözdizimi, okunabilirliği veya yazılabilirliği önemli ölçüde etkiliyorsa, bir sorun olabilir. Lisp için böyle olduğunu sanmıyorum. İyi bir editör ya da IDE yeterince iyi bir sözdizimi vuramaz ve eşleştirmenin büyük bir iş olmaması için eşleştirilir.
Matt Olenik

4
Ayrıca, Lisp’i sadece biraz kullandım (Common Lisp) ve aldığım genel düşünce, 2. sıradaki Lisp’in en büyük yararı olduğunu düşünüyor. Belki de yanlış paradigmada düşünüyorum, ama kendi kendini değiştiren kodun gerekli olduğu bir durum olduğunu sanmıyorum. Kullanmak için belirli bir nedeniniz varsa, evet, ancak aksi takdirde makrolar gerçek katil özelliği gibi görünür. Düzenleme: Sadece farkettim ki, bunlar aynı özellik.
Matt Olenik

3
@Matt: Yep. FWIW, geçenlerde makrolar içeren bir C # -ish CLR deney dili olan Nemerle'ye rastladım. nemerle.org . Sadece deneyim için bir noktada düşünmeye değer.
Paul Nathan,

2
“Pragmatizm. CL, çalışan profesyoneller tarafından yapılacak işleri yapmak için tasarlandı. İşlevsel dillerin çoğu kural olarak değil.”: Bu ifadeye katılmıyorum. Lisp ile çok ilgileniyorum ve onu öğrenmek için biraz zaman ayırmaya çalışıyorum. Ancak diğer FP dillerini de “işleri halletmek” için çok etkili buluyorum, en azından bu şimdiye kadar Scala ve Haskell ile olan deneyimim oldu.
Giorgio

1
“CL, çalışan profesyoneller tarafından yapılacak işleri yapmak için tasarlandı. İşlevsel dillerin çoğu kural olarak değil.”: Bunu açıklayabilir misiniz? Özellikle cümlenin ikinci bölümünde. Birkaç örnek verebilir misiniz?
Giorgio

23

Lisp'i bunun için seviyorum.

  • hem kodu hem de verileri temsil eden birleştirilmiş, basit ve zarif bir yol.
  • Bana zor problemleri çözmede çok önemli olan 80 bonus IQ puanını veren eşsiz bakış açısı (Alan Kay'a şapka ucu ile)
  • son derece çevik, etkileşimli ve konuşma geliştirme ortamı
  • soyutlamaları oluşturma ve manipüle etme benzeri görülmemiş güç

Programlama karmaşıklıkla mücadele ediyor. Soyutlamalar, gittikçe artan karmaşıklık ile savaşmanın tek etkili aracıdır (çok sınırlı ve sabit kafatası boyutumuzla). Lisp ile soyutlamaları yönetmek n + 1 dilekleri olan bir cinayete benziyor.


5
+1 "Programlama karmaşıklıkla mücadele ediyor. Soyutlamalar, giderek artan karmaşıklıkla savaşmanın tek etkili aracıdır (çok sınırlı ve sabit kafatası boyutuyla)." (Keşke bir +10 verebilseydim.)
Giorgio

"Son derece çevik, etkileşimli ve karşılıklı gelişim ortamı" nedir?
qed

6
Bu (+ 1 n)dilek mi, yoksa akıllıca daha iyi bir pratiklik (incf n)mi olmalı ?
Reb.Cabin

21

Doğru Lisp cevabının daha cüceli olduğuna inanıyorum. Gibi bir şey: "Sormak zorundaysan, hazır değilsin."

Öyleyse, herhangi biri daha fazla soru sorarsa, doğru cevap ya / veya soru ise "evet" ya da "Hazır değilsin" dir.


5
Paul Graham Louis Armstrong'dan alıntı yapıyor: “Cazın ne olduğunu sormanız gerekiyorsa, asla bilemeyeceksiniz.”
Jason Baker

25
+1. Bazen, "Sormak zorundaysanız hazır değilsiniz" gibi ifadeler olsa da, söyleyenleri açıklayamayacağımı
düşünmeme neden olur

5
@superM Lisp ve Lisp benzeri fonksiyonel diller, bir kez onları öğrendiğinde, artık onları açıklayamayacak şekilde bir özelliği vardır!
esoterik

18

Lisp'in yapay zeka (AI) alanındaki herkesin bahsettiği avantajının biraz tarihi bir kaza olduğunu düşünüyorum. Lisp AI için / alanında başladı, ancak genel amaçlı bir dil.

Yürütme hızının bir dilin tek önemli yönü olmadığına inanıyorum (bir kere yaptım). Bununla birlikte, Lisp ile ilgili sevdiğim yönlerden biri, benim için Python ve C'yi bir arada birleştiriyor. Hemen ve çok hızlı bir şekilde hiçbir bildirimde bulunmadan ve prototip olmadan kodlamaya başlayabilirim (çalışma zamanı ve REPL bunun için çok önemlidir). Çalışan bir şey yaptıktan sonra, tür bildirimleri ekliyorum ve kodumu yavaş yavaş "optimize ediyorum". SLIME’da bir tuşa basıp ilgilendiğim işlev için oluşturulmuş makine dilini izlemek harika bir şey. Python’da tür bildirimleri yok, bu yüzden daha fazla hız alamıyorum, ancak C’de hızlı bir şekilde bir şey yapmak çok daha acı verici. Lisp bu durumda çok faydalıdır.

Bunu söyledikten sonra Lisp'i çoğunlukla makrolardan dolayı seviyorum . Sonunda ne makroları başarabildiğini anladığınızda, kolayca parantez kullandığınızı düşünüyorum. Ayrıca, Emacs gibi editörler parantezleri kendileri yönetir , böylece mecbur değilsiniz. Ancak, başlangıçta o kadar kötü parantez bulamadığımı itiraf ediyorum ve bazı insanların onlara dayanamadıklarını biliyorum. Ancak, makroların tüm amacı derleme zamanında kod üretmek olduğundan, Lisp'teki kod standart bir veri yapısı kullanır ve parantezler yalnızca kodları listeler halinde gösterir ve bu da makroları yazmayı basitleştirir.

Lisp kolaylığı ile probleminizi daha iyi tanımlamak için küçük diller yazabileceğiniz başka bir dil bilmiyorum. Paul Graham'ın , Ortalamaları Dövüşmede bahsettiği avantaj budur . Aşırı modülerlik ve özlülük. Java'da, tek bir fikri ifade etmek için çok fazla ham metin yazmam gerekiyor. Lisp'te otomatik olarak bu kodu üreten bazı makrolar yazabilir ve daha sonra sadece bunları kullanabilirsiniz. Her neyse, bunun bazı örneklerini anlamanız ve sonra kendiniz için karar vermeniz gerekir. “Gördüğümde”, uçurulmuştum ve hala Lisp'in bu sebeple en iyi dil olduğunu düşünüyorum. Lisp makrolarının gücüyle uyuşup uyuşmadığını görmek için her zaman ana dillerdeki makroları ararım, ancak bugüne kadar hiç bulamadım. İleri, yakın bir saniye.

İş yazılımıyla ilgili birkaç eleştiriyle bitireceğim:

  1. İş yazılımının kütüphanelere ve iyi olanlara ihtiyacı vardır ve Lisp bu konuda iyi değildir. Genelde onlara ihtiyacım yok, ancak yaptığım zaman, birkaç kişinin kullandığı eksik yazılımların bir seçimini seçmek zorundayım. Bunu düzeltmek için katkıda bulunmalıyım, sanırım ...

  2. İş yazılımı genellikle büyük insanlar tarafından kurulur ve temelde dili değiştirdikleri için iletişimin makrolarla engellenebileceğini düşünüyorum. Program metni daha uzun ve tekrarlayan olsa bile, birçok programcı koddaki belirli desenleri daha rahat algılar. Sanırım ITA'da makrolarla ilgili bazı kurallar var ya da işbirliğini kolaylaştıran dev bir makro kütüphanesi var (ya da daha basit bir ifadeyle tüm programcılar Lisp uzmanıdır).


7
Clojure'u deneyin, JVM'de bir lisp. Yani JVM'yi kullanarak tüm java malzemelerini kullanabilirsiniz.
Zachary K

@zachary: JVM'de en az 2 Ortak Lisp uygulaması var. ABCL nispeten olgunlaşmıştır.
Larry Coleman

Clojure% 100 Java uyumludur (en azından Java'da Clojure'un geliştiremeyeceği ve Javaistlerin şikayet edemeyeceği bir şey bulamadım). Clojure, Common Lisp'in ve FP'nin en iyilerinden ağır bir şekilde etkilenir. Bununla ve SBCL ve CLisp ve Emacs ile herhangi bir Lisper bugünlerde bir kral gibi hissetmelidir.
Reb.Cabin

13

Lisp'ten hoşlanmıyorum.

(Kullandığı kavramların çoğunu, nasıl güçlü teknikleri yerel olarak erişilebilir kıldığını vb. Severim.

Ama aslında kullanmak gitmek için ikna olmamıştım, ((olsa birkaç kişi denedi ) dilin faydaları nedeniyle olabilir yeterince fayda yoktur bu yüzden, (bazıları doğrudan, bazıları dolaylı olarak) diğer programlama dilleri ile sağlanabilir öğrenerek ve dehşetli bir sözdizimine katlanarak vaktimi harcamama

Ama evet, bazılarının beğenme nedenlerinden ötürü, Stack Overflow sorularına bakın:

Bunlarla ilgili olarak muhtemelen birkaç soru daha var.


26
"Korkunç sözdizimine katlanmak". Belki bir Lisp acemi olduğumdan beri çok uzun, ama Lisp sözdiziminin basitliği ve düzenliliği çok büyük bir özellik, çünkü Lisp'i kendimde genişletmemi mümkün kıldı. Özel yineleyiciler ekleyebilirim, geliştiricinin mecbur kalmaması için otomatik olarak kendileri temizleyen yeni "with-xxx" kapsam yapıları ekleyebilirim, vb. Sözdizimi bir hata değil, bir özelliktir.
Michael H.

5
Bir dili kendiyle genişletme yeteneği, yarım düzine karakterle sınırlı bir sözdizimi gerektirmez . Ayrıca: "Sözdizimi bir hata değil, bir özelliktir" ? - Biliyorum. Buna böcek demedim.
Peter Boughton,

8
Tamam, makro sistemin faydalarını nasıl elde edersiniz? Kaç tane dil makul bir kısa bölümde onlara nesne yönelimli bir uzantı oluşturmanıza izin veriyor (Paul Graham, "On Lisp").
David Thornley

6
Sözdizimi diğer dillerden daha korkunç değildir. Parantezlerin bir süre sonra sadece görsel olarak “kaybolduğunu” buldum. İyi girintili kod kolayca okunabilir.
Barry Brown

8
Fakat S-exp'ler arasında kolayca hareket edebilme yeteneği çok büyük görünüyor ... Sonra parantez konusunda şu alıntıyı beğendim: Parantez? Hangi parantezler? Lisp programımın ilk ayından beri parantez görmedim. Lisp'teki parantezlerden şikayetçi olan insanlara, bir gazetedeki kelimeler arasındaki tüm boşluklardan rahatsız olup olmadıklarını sormak istiyorum "- Ken Tilton
Cedric Martin

9

"Lisp" i " Common Lisp " olarak yorumlayacağım ; Başka cevapların " Şema " diyeceğinden şüphem yok . (İpucu: Lisp bir dil ailesidir.)

"Hızlı" ne demek? Kıyaslama yapmak için harcanan zaman açısından, hayır, C'den daha hızlı değil ( ancak olabilir ).

Joe Random Hacker'ın çalışan bir program yazması ya da büyük yazılım sistemindeki bir hatayı düzeltmesi ne kadar sürüyor? Neredeyse kesin.

Bu hacker gelince , kullanıyorum çünkü kod yazmak istiyorum, kazan plakasını değil. Bir kez bir şeyler yazmak istiyorum ve kendimi sürekli tekrarlamıyorum. Ve ben yazarken programla etkileşime girmek istiyorum.


Editörünüzün içine, kodunuzun geri kalan kısmına hemen bir şeyler yapacak küçük bir işlev yazarsanız, bu harika olmaz mıydı? Yoksa bunu zaten yapabilir misin?
Mark C

4
@Mark: Emacs'i tarif ettiğini düşünüyorum.
Ferruccio

@Frucruccio İlk önce kodunu çalıştırman gerektiğini düşündüm.
Mark C,

2
@ Mark C: Eh, bölgeyi ve sonra M-x eval-region(veya eval-buffer) vurgulamak zorundasınız , ama hepsi bu.
Frank Shearar

1
@MarkC: Ayrıca çizik tamponundaysanız, sadece işlevinizi yazıp tuşuna basabilirsiniz C-j(girmeye ahlaki olarak eşdeğerdir) ve hemen yürürlüğe girer.
Tikhon Jelvis,

7

Lisp'i seviyorum çünkü düşüncelerimi ifade etmek için mükemmel bir ortam. En sevdiğim dil için öngörü, "Fikirleri ifade etmek için bir şey seçebilseydim, bu ne olurdu?" Şu anda, Lisp * ( Spesifik olması gereken şema ), kendime programlama notları yazarken buluyorum. Olarak IRL , kağıt ve kalem notlar. Programları düşünürken bile PHP veya Ruby ya da Python ile uygulama yapmam gerekiyor.

Bu, kendime öğrettiğim bir hile veya inek güvenilirliği için yaptığım bir şey değil (kimse defterimin içini zaten göremez); bu sadece Lisp'in benim için alternatiflerden herhangi birini düşünmem için çok daha doğal olması ve sizinle derinlemesine rezonansa giren herhangi bir dilden çok değerli olduğunuzu gösteriyor.

* Tıpkı bir dipnot gibi, Haskell biraz daha fazla şey öğrenirken bu farkı çok çabuk kapatıyor.


6

Mesele güçtür. Güç = İş (program işlevselliği) / Zaman

“Lisp programcılarını kazanmak için dışarı çıkmadık; C ++ programcılarının peşindeydik. Yarısından çoğunu Lisp'a sürüklemeyi başardık.”

- Guy Steele, Java'nın ortak yazarı

C ++ ve Java arasında bir çeşit eğri çizin. Devam edin, hat boyunca bir noktada Lisp'i bulacaksınız.


2
Buradaki sorun, Java’ya giden C ++ işlevselliğini kaybetmenizdir, ancak Lisp’e giderken yeniden alırsınız (genellikle geliştirilmiş biçimde).
David Thornley

@DavidT Bu tam alıntıdaki SO sorusunun kaynağa bir bağlantısı var ("cite" kelimesini aratın ). Alıntı çok ciddiye alınmamalıdır.
Mark C,

@David: Makrolar gibi. Sadece onları Java'ya (ve dolayısıyla C #) gitmeleri için dışarıda bırakmakla kalmadı, aynı zamanda onların eksikliğini bir "erdem" haline getirdiler. Temel dilin üzerine bir DSL ekliyorsam, makrolar gerçekten kullanışlıdır.
Mike Dunlavey,

@ Mike Dunlavey: C ++ 'daki makroları gerçekten beğenmedim (heck, onları C de beğenmedim ama orada fazla bir seçeneğim yok). Common Lisp'teki makroları gerçekten seviyorum. Biliyor musun, sanırım bu yorumla ilgili problemim hem C ++ hem de Common Lisp'i Java'dan çok daha fazla sevdiğim.
David Thornley,

@David: Lisp'teki makrolarda% 100 seninleyim. C / C ++ onlar çirkin ve kötüye kullanılmaya açık olmakla birlikte, (türü için kuşkusuz saçak yapmam) şeyler, onlar bu yüzden hiçbir şey daha iyi. Tabii ki, C ++ 'da yaptığım zaman, kötüye kullanım olarak kabul edilebilir, fakat Lisp'te sıcak olarak zekice sayılır. Git figürü.
Mike Dunlavey,

6

Paul Graham, bu soruyu Lisp'in Farklı Olduğunu Ne Yaptığında yanıtlar .

1990'ların ortalarında onun başlangıcı için kullandığını aklınızda bulundurun, Python ve Ruby bu noktada gerçekten olgun değildi (ya da hatta doğmamış bile).

Lisp temelde dinamik dillerin tüm avantajlarına sahip ve bugünün web uygulamalarının çoğu için Python ve Ruby'nin harika olduklarını düşünüyorum ve çerçeveler, belgeler ve canlı topluluklar avantajına sahipler.

Katil özelliği muhtemelen tüm programın ifadelerden oluşmasıdır. Bu, kod bloklarının etrafında fonksiyonlara (veya makrolara ...) geçebileceğiniz anlamına gelir, çünkü bir kod bloğu bir ifadeden başka bir şey değildir.

Python tam olarak bu özelliğe sahip değil; işlevleri tanımlamanız ve etrafa iletmeniz gerekir. Ruby'nin blokları var gibi görünüyor, belki de Lisp'in yapabileceği ile karşılaştırıldığında biraz sınırlı (emin değilim).


Paul Graham'ın makalesi ilginç, çünkü birkaç maddeye para kazandırarak, bugünlerde çoğu dilin listelediği özelliklere sahip görünüyor. Bu yüzden belki de Lisp o günlerde daha çekici oldu; Günümüzde bu özellikleri tanıtan dil olarak daha değerli?
Andres F.

Dil sözdizimi olarak AST, hala Lisp'in etki alanıdır. Derleme süresinde makroların tüm dilin mevcut olduğu lisp olmayan bir dil bilmiyorum (Evet derleyici temelde Lisp programı olan makro tanımı için temelde makro çağırıyor. Derleme zamanında makroda http ve db yapmak istiyorsunuz. ?)
przemo_li

6

Ben bir diz refleksi reaksiyonu oldu Planı geçmişte, ama şimdi (Lisp'i vermeye hazırım Clojure bir atış aslında).

Gördüğünüz gibi, yıllar içinde Java, C #, C ++, Python gibi dilleri topladım ve işler artık zor değil.

Clojure'un birçok sözü var, çok temiz görünüyor ve gerçek dünyadaki birçok sorunu çözebilir. Clojure gibi temiz bir dil için güçlü bir durum çok çekirdekli bilgisayarların ortaya çıkmasıdır.

Yay LİSP!

EDIT: ITA Yazılımı MIT dereceleri tarafından kuruldu ve MIT derecelerinin çoğunun öğrendiği tek dil Scheme / Lisp oldu. Yine de adil olmak gerekirse, çalışan bir üretim sistemine Lisp algoritmaları çalışırken takas edilebilir, bu da büyük bir artı.


8
Ynt: İşler artık zorlu değil --- Haskell'e bir şans verin ve bize ne düşündüğünüzü bildirin. Ayrıca, her zaman bir değişiklik için bazı INTERCAL öğrenmeye çalışabilirsiniz!
Mark C,

3
@Mark C, üzgünüm ama dokunmuyorum INTERCAL. Mücadele tek kriter değil; Gerçek problemleri de hızlı bir şekilde çözebilmelidir. En azından Haskell birçok kişi tarafından kullanılıyor ve kullanılıyor.
İş

Tabii ki bu jestti.
Mark C,

1
Bir üretim sunucusunda çalışan kodun (dikkatlice!) Güncellenmesi Lisp'in zevklerinden biridir, evet. Python, en azından onunla oynarken, bunu iyi yapmadı; Tüm Common Lisp uygulamaları sizin için hallederken, değişikliklerinizi anlatacak tüm fonksiyonları / yöntemleri manuel olarak yeniden derlemeniz gerekir. Geliştirme için aynı gücü kullanıyorum: bir şeyler yaz, bir şeyi test et, düzenle, test et - derleme döngüsü yok ve etkileşimli testlerini alabilir ve istersen bunları birim testlerine dönüştürebilirsin.
Michael H.

@Job Unuttum ... PLEASE?
Mark C,

6

Lisp ile ilgili sevdiğim şey paradigmaları aşması. Bazıları Lisp'in işlevsel olduğunu söylerken, diğerleri bildirici diyecek, bazıları ise çoklayıcı olduğunu söyleyecek. Bence bunların hepsi bu noktayı kaçırıyor. Lisp kullandığınızda, paradigma artık bir kısıtlama değildir.

Nesneleri ister misin? Onları alabilirsin. Fonksiyonel programlama ister misiniz? Alabilirsin. Prolog tarzı mantık programlama ister misiniz? Makrolar yaz. SQL tarzı bildirimsel programlama ister misiniz? Göreyim seni. Henüz icat edilmemiş bir paradigma kullanmak ister misiniz? Lisp'te yapılabileceğine eminim.

Kenara gelen Forth -like dilde, başka dil teklif esneklik bu düzeyde henüz görmedik.


+1 Çok paradigma programlaması, F # öncesinde onlarca yıl, çok iyi bir nokta.
Orbling

Keşke bunu on kez oylayabilseydim. Kaşık yok ... paradigma yok ... Common Lisp hakkındaki hislerimi büyük bir doğrulukla
açıklıyor

5

"Daha hızlı", ölçülmesi basit bir şey değildir - bu gerçekten hangi yönle kıyaslama yaptığınıza bağlıdır. Göreve ve Lisp uygulamasına bağlı olarak, hızlar C'ye yaklaşabilir. Ayrıntılar için dalmak için Büyük Karşılaştırma Çekimi bölümüne bakın. Lisp'in SBCL uygulaması Java 6 Server ile aynıdır ve Ruby veya Python'dan çok daha hızlıdır.

Ancak, saf hız, bir programlama dili seçmek için ana neden değildir - eğer öyleyse, hepimiz hala montaj dilinde programlama yaparız , değil mi? Benim için, Lisp’in günlük sevinci, kodun derlenmesiydi, ancak başvuruyu reddetmek, her şeyi yeniden derlemek ve sıfırdan başlamak zorunda kalmayacağım. Bunun yerine, tek bir işlevi değiştirebilirim ve bu değişiklik her yerde etkili olur ve uygulamamdaki etkiyi hemen görebilirim. Dahası, bu çok hızlı "yazma, test etme, daha fazla yazma, daha fazla test etme" yaklaşımı, kodu yazarken hemen önden test etmeyi çok daha kolay hale getirir (ve sonra bu etkileşimli probları daha sonra birim testlerine dönüştürebilirsiniz).

Düşünceye devam etmeden önce, her satırdan sonra, e-posta çıktınızı ekrana derlemek için bir düğmeye basmanız gerektiğine dair bir e-posta yazdığınızı hayal edin. Java ya da onun gibi başka bir dilde yazdığım şey benim için. Bazen bunu yapmak için bir neden var ve Java'yı iyi seviyorum, ancak Lisp daha duyarlı ve işlerin yapılması daha kolay.


Bugün yeni başlıyor olsaydım, muhtemelen Ruby'yi seçerdim - Lisp'in doğasının büyük bir kısmı kalıtsaldır, ancak daha modern kütüphanelere ve onu ileriye götüren tek bir yardımsever diktatöre sahiptir. Ancak, OP'nin sorduğu soru bu değildi.
Michael H.

Aslında başlamak için yakutu seçtim ve şimdi newLisp'i öğrenmeye çalışıyorum.
philosodad

5

Lisp ( newLisp ) 'ı birkaç nedenden dolayı öğreniyorum .

Birinci neden: Lisp beni farklı düşündürüyor, bu da beni daha iyi bir Ruby kodlayıcısı yapıyor.

Lisp'te bazı şeyleri yapmak çok tuhaf görünüyor, örneğin çoklu listelerde gezinmek için iç içe yineleme. Bu yüzden beni başka şeyler kullanmaya zorlar map. En sevdiğim dil, Ruby, aynı harita yöntemine sahip, ancak ben her zaman kullanmıyorum, çünkü bilinmiyor.: Zayıf bir teknik kullanarak bir şeyler yapmayı öğrendim ve dil bu tekniği desteklediğinde kullanmaya devam ediyorum.

İkinci neden: Lisp pratik ve iyi modern kütüphanelere sahip.

NewLisp için yusufçuk adı verilen çok hoş ve hafif bir web çerçevesi var . Bu, bazı görevler için PHP yerine newLisp kodunu kullanmama izin veriyor. PHP'yi gerçekten sevmiyorum ve newLisp bu özel görev için Ruby'den daha eğlenceli görünüyor.

Üç numaralı neden: Lisp, sözdizimsel ve kavramsal olarak tutarlı.

Benim için, Ruby ve Python arasındaki tutarlılık bu büyük fark.


+1: "Lisp sözdizimsel ve kavramsal olarak tutarlı." Bu bir dilin çok önemli bir özelliğidir. Bazı kötü tasarlanmış diller tutarlılıktan yoksundurlar, bazı sırayla bir araya getirilen deyimlerden oluşan büyük bir koleksiyona benziyorlar (aklımda bir dilden var ama onu isimlendirmeyeceğim :-)). Lisp bu açıdan çok tutarlı. Biraz zamanım olur olmaz onu kesinlikle öğrenmeye çalışacağım.
Giorgio

4

"Marka Sadakati" diyebilir misiniz?

Fortran'da başladım. Onu sevdim.

Lisp'e geçtim. İlk başta ondan nefret ettim. Sonra onu sevmeyi öğrendim ve Fortran'dan nefret ediyorum.

Daha sonra Pascal, C, C ++, çeşitli montajcılar, C #. (Aslında ben C # sevmiyorum.)

Sanırım kararsızım?


4

Lisp oluşturulduğunda matematikten başladılar, bilgisayar bilimi değil (henüz var olmayan). Ve Lisp ekibi gerçekten doğru bazı şeyler var. Lisp 1960'ta çöp topladı! Gerçekten iyi bir iş yaptılar.

Bence Eternal Flame şarkısı onu kapsıyor.


Evet görünüşe göre Lisp ilk GCed diliydi.
Mark C,

2

Büyük bir beraberlik topluluktur. Lisp, dilin icat edilmesinden bu yana en iddialı ve en parlak geliştiriciler için çizim yaptı. Araştırmacılar, daha önce çözülmeyen problemleri çözmeye çalışırken, yapay zeka (AI) araştırması, bilgisayar vizyonu, planlama, bilgi sunumu ve karmaşık sezgisel optimizasyonda olduğu gibi Lisp'i bulmanız olasıdır . Dil, hem en aşağıdan hem de yukarıdan aşağıya sorunların çözülmesine yardım ediyor; bu da en zorlu mücadelelerle yüzleşmede yardımcı oluyor.

Makrolar aracılığıyla genişletilebilir sözdizimi, dil tanımını genişletmeye nadiren ihtiyaç duyulduğu anlamına gelir. Dil kısıtlamasını daha sınırlı bir dilde gerektiren şeylerin çoğu Lisp ile yalnızca bir makro. Bu yüzden Lisp programcıları yeni keşfedilen dil kavramlarını yeni bir dil standardı olmadan ve mutlaka gerçek bir hız cezası kullanmadan kullanmakta serbesttirler. Temel düzeyde, küçük boy uzantılar tarafından kazan plakası kodlarının eklenmesi gereksizdir. Prolog tarzı birleştirme gibi kontrol akışındaki tüm yeni fikirler, uzantılar olarak verimli ve kompakt bir şekilde uygulanmaktadır.

OOP sistemi, CLOS , esneklik açısından kendi sınıfındadır. Bir tat aldıktan sonra ilkel C ++ / Java / C # OOP'ye geri dönmek çok zor. GoF  5 tasarım desenleri basit ve doğrudan ifade edilebildiklerinden gereksiz hale gelir.

Dilin tek bir kurumsal sahibi ve tek bir kesin uygulaması bulunmamakla birlikte, birçok uygun uygulamaya sahip bir ANSI standardı vardır. Her 10 yılda bir büyük yeni uygulamalar ortaya çıkıyor ve eski uygulamalar hala oldukça aktif. Uzmanlar, uzmanlık bilgilerini uzun bir süre boyunca kullanmayı planlayabilirler. Bu, bazı anarşist sürtünme ve toplumun parçalanmasına neden olur, ancak aynı zamanda halının dışarı çekilemediği ve dilin kurumsal veya proje için politik nedenlerden ötürü bozulmayacağı anlamına gelir. Üzerinde çalışılan her zaman birçok ticari ve açık kaynak uygulaması vardır. Daha fazla performans odaklı olanlar düzenli olarak en hızlı, en çok finanse edilen zorunlu dil uygulamalarının 2x faktöründe bir kıyaslama yaparlar.

Lisp'in ilk ticarileştirilmesinin aşil topuğu, hem dilin güvenlik özelliklerini hem de içerdikleri gelişmiş yazılım geliştirme ortamlarını, grafikler de dahil olmak üzere tam çevrimiçi dokümantasyon gibi inanılmaz özelliklerle donatmak için hafızalıydı. 64 MB'lik bir Symbolics Lisp Machine , 8 MB Sun iş istasyonuna karşı maliyet açısından uygun değildi. Bugün, RAM fiyatları çöktü ve özellikle ana Java, C #, PHP dillerinin bugün 30 yıl öncesine göre minimal düzeyde ilerlediği göz önüne alındığında Lisp dillerine büyük ilgi var.

Şimdi, akıllı geliştiricilerle Lisp'le zihniyet paylaşımı için rekabet içinde olan modern diller var: Python, Lua , Erlang , Haskell ve OCaml . Ancak hiçbiri aynı olgunluk, uyumluluk, çoklu standartlara uygun uygulamalar ve hızın karışımını sunmuyor.


1

Ben aslında Lisp yapmıyorum. Ancak çalıştığım yer , esas olarak Fortran'dan milyonlarca çizgiyle sınırlı elemanları yapıyor. Bilgi işlem konusunda en çok saygı duyduğum adam ( hesaplamalı akışkanlar mekaniği kodları ), ideal kombinasyonun dışarıdaki Lisp olduğunu düşünüyor (temelde bellek yönetimi ile ilgili sorunlardan kaçınırsınız çünkü) ve düşük seviye algoritmalar için Fortran (Fortran, istismar için en iyisidir) SSE / AVX'in vektör yetenekleri ve bu öncülüğün kapanmasının olası olmadığını düşünüyoruz).

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.