LISP açıkçası AI şeyler için bir avantajdır, ancak görünmüyor Bana göre LISP, Java, C # ve hatta C'den daha hızlı. LISP ustası değilim, ancak LISP'de iş yazılımı yazmanın avantajını anlamakta inanılmaz zorlanıyorum.
Yine de bir hacker dili olarak kabul edilir.
Common LISP ile yetkin olmak için çalışmamın birkaç nedeni var.
Ortak LISP'ye karşı seçim yapmak için tek gerçek neden, standart kütüphanelerin tarihlendirilmesidir.
Bir uzuv çıkacağım ve genel durumda sözdiziminin profesyonel bir yazılım çalışanı için bir sorun olmaması gerektiğini söyleyeceğim.
Onun için LISP seviyorum
Programlama karmaşıklıkla mücadele ediyor. Soyutlamalar, gittikçe artan karmaşıklıkla mücadele etmek için tek etkili araçtır (çok sınırlı ve sürekli kafatası boyutumuzla). LISP ile soyutlamaları yönetmek, n + 1 istekleri olan bir cin gibi.
Doğru LISP cevabının daha cüceci olduğuna inanıyorum. Gibi bir şey: "Sormak zorunda kalırsanız, hazır değilsiniz."
Eğer biri daha fazla soru sorarsa, doğru cevap ya "evet" ya/veya bir soru ise ya da " Hazır değilsiniz. "
Herkesin bahsettiği yapay zeka (AI) alanındaki LISP avantajının biraz tarihsel bir kaza olduğunu düşünüyorum ... LISP yapay zeka için/içinde 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 (yine de yaptım). Ancak, LISP ile ilgili sevdiğim yönlerden biri benim için Python ve C'yi bir arada birleştiriyor. Hiçbir bildirim ve prototip olmadan hemen ve çok hızlı bir şekilde kodlamaya başlayabilirim (çalışma zamanı ve REPL bunun için çok önemlidir) Çalışan bir şeyimden sonra, tür bildirimleri ekler ve kodumu yavaş yavaş "optimize eder". merak ediyorum BALÇIK ve ilgilendiğim işlev için oluşturulan makine dilini izlemek merak ediyorum. Python, hiçbir tür bildirimleri, bu yüzden ben daha fazla hız elde edemezsiniz, ancak C'de hızlı bir şekilde bir şey yapmak çok daha acı vericidir.Bu durumda LISP çok yararlıdır.
Bunu söyledikten sonra, LISP'yi esas olarak makrolar nedeniyle seviyorum. Sonunda makroların neleri başarabildiğini anladığınızda, bence parantezlere kolayca katlanırsınız. Ayrıca, Emacs gibi editörler parantezleri kendileri yönetir, böylece zorunda kalmazsınız. Bununla birlikte, başlangıçta o kadar kötü parantez bulamadığımı itiraf ediyorum ve bazı insanların onlara dayanamayacağını biliyorum. Ancak, makroların tüm amacı derleme zamanında kod oluşturmak olduğundan, LISP'deki kod standart bir veri yapısı kullanır ve parantezler, kodların listeler olarak temsil edilmesini sağlar ve bu da makroların yazılmasını kolaylaştırır.
LISP kolaylığıyla probleminizi daha iyi tanımlamak için küçük alt diller yazabileceğiniz başka bir dil bilmiyorum. Paul Graham'ın Ortalamaları Atarak. Aşırı modülerlik ve özlülüktür. Java Ben tek bir fikir ifade etmek için bir sürü ham metin yazmak zorunda. LISP içinde ben otomatik olarak bu kodu üreten bazı makrolar yazabilirsiniz ve daha sonra sadece bunları kullanmak zorunda. bunun bazı örneklerini anlayın ve sonra kendiniz karar verin. "Gördüğümde" uçuruldum ve hala LISP'nin sadece bu nedenle en büyük dil olduğunu düşünüyorum. LISP makrolarının gücü, ama bugüne kadar hiç bulamadım.
İş yazılımı ile ilgili birkaç eleştiri ile bitireceğim:
İş yazılımı kütüphanelere ve iyi kitaplara ihtiyaç duyar ve LISP bu konuda iyi değildir. Genellikle onlara ihtiyacım yok, ama bunu yaptığımda, birkaç kişinin kullandığı eksik yazılımların küçük bir seçimini seçmem gerekiyor. Bunu düzeltmeye katkıda bulunmalıyım, sanırım ...
İş yazılımı genellikle büyük insan grupları tarafından oluşturulur ve bence iletişim makrolarla engellenebilir, çünkü temel olarak dili değiştirirler. Bir çok programcı, program metni daha uzun ve daha tekrarlı olsa bile, koddaki belirli kalıpları tespit etmekte daha rahattır. ITA'da makrolarla ilgili bazı kuralları olduğunu veya işbirliğini kolaylaştıran büyük bir makro kütüphanesine sahip olduklarını (veya daha basit bir şekilde tüm programcılar LISP uzmanları olduğunu) varsayalım.
LISP'den hoşlanmıyorum.
(Kullandığı kavramların çoğunu, güçlü tekniklerin doğal olarak nasıl kullanılabilir olmasını vb. Seviyorum.
Ama aslında onu kullanmaya hiç ikna olmadım, (( birkaç kişi denediyse bile ) çünkü dilin faydaları diğer programlama dilleriyle (bazıları doğrudan, bazıları dolaylı olarak) elde edilebilir, bu yüzden zamanımı öğrenerek ve korkunç sözdizimine katlanmak için zaman harcamam için yeterli fayda yoktur.))
Ancak evet, bazı insanların hoşlandığı nedenlerden ötürü şu Stack Overflow sorularını kontrol edin:
Muhtemelen bu sorular için de birkaç tane daha var.
"Daha hızlı" ne anlama geliyor? Bir kıyaslama yapmak için harcanan zaman açısından, hayır, C'den daha hızlı değildir ( ancak olabilir ).
Joe Random Hacker'ın çalışan bir program yazması veya büyük yazılım sistemindeki bir hatayı düzeltmesi ne kadar sürer? Neredeyse kesin.
Bu hacker gelince, ben kod yazmak istiyorum çünkü boilerplate kullanın. Bir kere bir kez yazmak istiyorum ve sürekli kendimi tekrarlamıyorum. Ben yazarken programla etkileşim kurmak istiyorum.
LISP'yi seviyorum çünkü düşüncelerimi ifade etmek için mükemmel bir araç. En sevdiğim dilin anlamı "Fikirleri ifade etmek için herhangi bir şey seçebilseydim, bu ne olurdu?". Şu anda LISP * ( Şema spesifik olmak gerekirse), kendime programlama notları yazarken bulduğum noktaya kadar. IRL , kağıt ve kalem notları. Programları düşünürken bile PHP veya Ruby veya Python) uygulamam gerekiyor.
Bu kendime öğrettiğim bir hile ya da nerd güvenilirliği için yaptığım bir şey değil (hiç kimse not defterimin içini göremez); sadece LISP düşünmek için çok daha doğal benim için herhangi bir alternatif daha ve sizinle derinden rezonans herhangi bir dil hazine olduğunu.
* Yine de bir dipnot gibi, Haskell daha fazla bilgi edindikçe boşluğu oldukça çabuk kapatıyor.
Paul Graham bu soruyu kendi kendine LISP'yi Farklı Kılan.
LISP temel olarak dinamik dillerin tüm avantajlarına sahiptir ve bence bugünün web uygulamalarının çoğu için Python ve Ruby oldukça harika ve avantajları var) çerçeve ve dokümantasyon ve canlı topluluklar.
Katil özelliği muhtemelen tüm programın ifadelerden oluşmasıdır. Bu, kod bloklarının etrafından işlevlere (veya makrolara ...) geçebileceğiniz anlamına gelir, çünkü kod bloğu bir ifadeden başka bir şey değildir.
Python tam olarak bu özelliğe sahip değildir; işlevleri tanımlamanız ve bunları aktarmanız gerekir. Ruby blokları var gibi görünüyor, belki de LISP ne yapabilirim ile karşılaştırıldığında biraz sınırlı (emin değilim).
Yıllar boyunca Java, C #, C++, Python gibi dillerin parçalarını topladım ve işler artık zor değil.
Clojure'un birçok sözü var, çok temiz görünüyor ve birçok gerçek dünya problemini çözebilir. Clojure gibi temiz bir dil için güçlü bir durum, çok çekirdekli bilgisayarların ortaya çıkmasıdır.
Yay LISP!
DÜZENLEME: ITA Yazılımı MIT sınıf tarafından kuruldu ve MIT sınıfının çoğunun öğrendiği tek dil Şema/LISP oldu. Adil olmak gerekirse, çalışan bir üretim sisteminde LISP algoritmaları çalışırken değiştirilebilir, bu da büyük bir artı.
LISP ile ilgili sevdiğim şey, paradigmaları aşması. Bazı insanlar LISP'nin işlevsel olduğunu söyleyecek, diğerleri bunun açıklayıcı olduğunu söyleyecek, diğerleri ise çokdilli olduğunu söyleyecek. Bence bütün bunlar bir noktayı kaçırıyor. LISP kullandığınızda paradigma artık bir kısıtlama değildir.
Nesne ister misiniz? Onları alabilirsin. Fonksiyonel programlama mı istiyorsunuz? Alabilirsin. Prolog - tarzı mantık programlama ister misiniz? Bazı makrolar yazın. SQL tarzı bildirimsel programlama ister misiniz? Göreyim seni. Henüz icat edilmemiş bir paradigma kullanmak ister misiniz? LISP'de yapılabileceğinden eminim.
Forth - gibi diller dışında, bu düzeyde esneklik sunan başka bir dil görmedim.
Sorun güç. Güç = İş (program işlevselliği)/Zaman
"LISP programcılarını kazanmak için dışarı çıkmadık; C++ programcılarının peşindeydik. Birçoğunu LISP'nin yarısına kadar sürüklemeyi başardık."
- Guy Steele, Java spec ortak yazar
C++ ve Java arasında bir tür eğri çizin. Devam edin ve çizginin bir noktasında LISP bulacaksınız.
Birkaç nedenden dolayı LISP ( newLisp ) öğreniyorum.
Birinci neden: LISP beni farklı düşünüyor, bu da beni daha iyi yapıyor Ruby kodlayıcı.
LISP'de bazı yollar yapmak çok garip görünüyor, örneğin birden fazla listeden geçmek için iç içe yineleme. Bu yüzden beni
map gibi başka şeyler kullanmaya zorluyor. En sevdiğim dil olan Ruby, aynı harita yöntemine sahip, ancak her zaman kullanmıyorum, çünkü bilmiyorum: Kötü bir teknik kullanarak bir şeyler yapmayı öğrendim ve dil bu tekniği desteklediğinde kullanmaya devam ediyorum.
İkinci neden: LISP pratiktir ve iyi modern kütüphanelere sahiptir.
NewLisp için yusufçuk adında çok hoş, hafif bir web çerçevesi var. Bu bana PHP yerine newLisp kodu kullanmamı sağlıyor. PHP'yi gerçekten sevmiyorum ve newLisp bu görev için Ruby'den daha eğlenceli görünüyor.
Üçüncü neden: LISP sözdizimsel ve kavramsal olarak tutarlıdır.
Benim için, bu Ruby ve Python, tutarlılık arasındaki büyük fark.
"Daha hızlı" ölçmek için basit bir şey değildir - gerçekten hangi ölçütü karşılaştırdığı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 dalış yapmak için Büyük Karşılaştırma Çekimi bölümüne bakın. LBSP'nin SBCL uygulaması Java 6 Sunucusu ile eşittir ve Ruby veya Python'dan önemli ölçüde daha hızlıdır).
Ancak, saf hız bir programlama dili seçmenin ana nedeni değildir - eğer öyleyse, hepimiz Assembly dili hala programlama yapacağız, değil mi? Benim için, LISP günlük sevinç kod derlenmiş olmasıdır, ama uygulamayı aşağı çekmek, her şeyi yeniden derlemek ve sonra sıfırdan çalışmaya başlamak zorunda değilsiniz. Bunun yerine, tek bir işlevi değiştirebilirim ve bu değişiklik her yerde yürürlüğe girer ve efekti hemen uygulamamda görebilirim. Dahası, bu çok hızlı "yazma, test etme, daha fazla yazma, daha fazla test etme" yaklaşımı, kodu yazarken hemen ön testi yapmayı çok daha kolay hale getirir (ve daha sonra bu etkileşimli probları birim testlerine dönüştürebilirsiniz).
Her satırdan sonra, düşüncelerinizi sürdürmeden önce e-posta çıktınızı ekrana derlemek için bir düğmeye basmanız gerektiğinde e-posta yazdığınızı düşünün. Java veya bunun gibi başka bir dilde yazmak benim için. Bazen bunu yapmak için bir neden var ve ben Java iyi, ama LISP sadece daha duyarlı ve işinizi yapmak daha kolay.
"Marka Sadakati" diyebilir misiniz?
Fortran'da başladım. Onu sevdim.
LISP'ye geçtim. İlk başta ondan nefret ettim. Sonra onu sevmeyi ve Fortran'dan nefret etmeyi öğrendim.
Daha sonra Pascal, C, C++, çeşitli montajcılar, C #. (Aslında C # 'ı sevmiyorum.)
Sanırım kararsızım?
LISP yaratıldığında bilgisayar bilimi değil, matematikten başlamışlardı (henüz mevcut değildi). Ve LISP ekibi bazı şeyleri GERÇEKTEN doğru yaptı. LISP 1960 yılında çöp topladı! Gerçekten harika bir iş çıkardılar.
Sanırım Ebedi Alev şarkıyı kapsıyor.
Büyük bir beraberlik topluluktur. LISP, dil icat edildiğinden beri en iddialı ve parlak geliştiriciler için bir çekilişe sahip. Araştırmacılar daha önce hiç çözülmemiş problemleri çözmeye çalıştıkları her yerde yapay zeka (AI) araştırma, bilgisayar görme, planlama, bilgi temsili ve karmaşık sezgisel optimizasyonda olduğu gibi LISP'yi bulmanız muhtemeldir. Dil, hem aşağıdan yukarıya hem de yukarıdan aşağıya aynı anda sorunlara çözüm buluyor, bu da en zorlu zorluklarla yüzleşmeye yardımcı oluyor gibi görünüyor.
Makrolar aracılığıyla genişletilebilir sözdizimi, nadiren dil tanımını genişletme ihtiyacı olduğu anlamına gelir. Daha kısıtlı bir dilde bir dil uzantısını gerektirecek şeylerin çoğu, LISP ile sadece bir makro uzaklıktadır. Dolayısıyla, LISP programcıları yeni icat edilen dil kavramlarını yeni bir dil standardı ve gerçek bir hız cezası olmadan kullanmakta özgürdürler. Temel düzeyde, kazan plakası rayları küçük uzantılar tarafından gereksiz hale getirilir. Prolog stili birleştirme gibi kontrol akışındaki tüm yeni fikirler, uzantılar olarak verimli ve kompakt bir şekilde uygulanır.
Dilin tek bir kurumsal sahibi ve tek bir kesin uygulaması yoktu, ancak birçok uygun uygulamaya sahip bir ANSI standardı var. Her on yılda büyük yeni uygulamalar ortaya çıkıyor ve eskileri hala oldukça aktif. Uzmanlar, uzmanlık bilgilerini uzun süre kullanmayı planlayabilirler. Bu, bazı anarşist sürtünme ve topluluk parçalanmasına neden olur, ancak aynı zamanda halının çekilemeyeceği ve dilin kurumsal veya proje siyasi nedenlerden dolayı can çekilemeyeceği anlamına gelir. Her zaman üzerinde çalışılan birden çok ticari ve açık kaynak uygulaması vardır. Daha fazla performans odaklı olanlar düzenli olarak en hızlı, çok finanse edilen zorunlu dil uygulamalarının 2 katı içinde kıyaslanmaktadır.
Erken LISP ticarileştirmesinin Aşil topuğu, hem dilin tür güvenlik özelliklerini hem de içerdikleri gelişmiş yazılım geliştirme ortamlarını karşılamak için bellek ayak izi idi ve grafikler dahil tam çevrimiçi belgeler gibi inanılmaz özelliklerle. 64 MB Symbolics LISP Machine , 8 MB Sun iş istasyonuna karşı uygun maliyetli değildi. Bugün, RAM fiyatlar çöktü ve özellikle ana Java, C #, PHP dillerin günümüzde çok az gelişmiş olduğu düşünüldüğünde) LISP dillerine büyük ilgi var 30 yıl önceki olanlar.
Akıllı geliştiricilerle zihniyet için LISP ile rekabet halinde olan modern diller var: Python, Lua , Erlang , Haskell ve OCaml . Ancak hiçbiri aynı olgunluk, uyumluluk, çoklu standartlara uygun uygulamalar ve hız karışımını sunmaz.
Aslında LISP yapmıyorum. Ama çalıştığım yer sonlu elemanlar ağırlıklı olarak Fortran'ın milyonlarca çizgisiyle. Bilgi işlem konusunda en çok saygı duyduğum adam (kodlar hesaplamalı akışkanlar mekaniği ) ideal kombinasyonun dışarıda LISP olduğunu düşünüyor (özellikle bellek yönetimi ile ilgili dağınık problemlerden kaçındığınız için) ve düşük seviye için Fortran algoritmaları (Fortran en iyi SSE / AVX ve bu ipucunun kapanmasının olası olmadığını düşünüyoruz).