Lisans derecem Bilişsel Bilimler ve Yapay Zeka bölümlerinde yapıldı. Bundan sonra Lisp'e tek seferlik bir giriş yaptım. Dilin ilginç olduğunu düşündüm ("zarif" gibi) ama Greenspun'un Onuncu Kuralı'na gelene kadar pek düşünmedim:
Yeterince karmaşık olan herhangi bir C veya Fortran programı, Ortak Lisp'in yarısının geçici, gayri resmi olarak belirlenmiş, böcek basması, yavaş uygulanmasını içerir.
Greenspun'un amacı (kısmen) birçok karmaşık programın yerleşik tercümanlara sahip olduğuydu. Tercümana bir dile çevirmek yerine, yerleşik bir tercümana (veya derleyiciye) sahip olan Lisp gibi bir dili kullanmak daha mantıklı olabilir.
O zamanlar, özel bir dil için özel bir tercüman kullanarak kullanıcı tanımlı hesaplamalar yapan oldukça büyük bir uygulama üzerinde çalışıyordum. Lisp'teki çekirdeğini büyük ölçekli bir deney olarak yeniden yazmaya karar verdim.
Kabaca altı hafta sürdü. Orijinal kod ~ 100,000 satır Delphi (bir Pascal çeşidi) idi. Lisp'te bu ~ 10.000 satıra indirildi. Daha da şaşırtıcı olanı, Lisp motorunun 3-6 kat daha hızlı olmasıydı. Ve bunun bir Lisp neofitinin eseri olduğunu unutmayın! Tüm bu deneyim benim için oldukça açıktı; ilk defa performansı ve etkileyiciliği tek bir dilde birleştirme olasılığını gördüm.
Bir süre sonra web tabanlı bir proje üzerinde çalışmaya başladığımda birçok dilde seçmeler yaptım. Lisp ve Scheme'i karışıma dahil ettim. Sonunda bir Scheme uygulamasını seçtim-- Chez Scheme . Sonuçlardan çok memnun kaldım.
Web tabanlı proje, yüksek performanslı bir "seçim motoru" . Scheme'i, veri işlemeden veri sorgulamaya ve sayfa oluşturmaya kadar birçok farklı şekilde kullanıyoruz. Birçok noktada aslında farklı bir dille başladık, ancak aşağıda kısaca anlatacağım nedenlerden dolayı Scheme'ye geçtik.
Şimdi sorunuza cevap verebilirim (en azından kısmen).
Seçmeler sırasında çeşitli Lisp ve Scheme uygulamalarına baktık. Lisp tarafında baktık (inanıyorum) Allegro CL, CMUCL, SBCL ve LispWorks. Düzeni tarafında baktık (inanıyorum) Bigloo, Chicken, Chez, Gambit. (Dil seçimi uzun zaman önceydi; bu yüzden biraz pusluyum. Önemliyse bazı notlar alabilirim.)
Vuruştan hemen sonra a) yerli iplikler ve b) Linux, Mac ve Windows desteği aradık. Bu iki koşul bir araya gelince herkesi etkiledi (sanırım) Allegro ve Chez dışarı - yani değerlendirmeye devam etmek için çok iş parçacığı gereksinimini gevşetmek zorunda kaldık.
Bir takım küçük programlar hazırladık ve bunları değerlendirme ve test için kullandık. Bu bir takım sorunları ortaya çıkardı. Örneğin: Bazı uygulamalar bazı testlerin tamamlanmasını engelleyen bazı kusurları vardı; bazı uygulamalar çalışma zamanında kodu derleyemedi; bazı uygulamalar çalışma zamanı derlenmiş kodunu önceden derlenmiş kodla kolayca entegre edemedi; bazı uygulamalarda diğerlerinden daha belirgin (ya da açıkça daha kötü) çöp toplayıcıları vardı '; vb.
İhtiyaçlarımız için sadece üç ticari uygulama - Allegro, Chez ve Lispworks - temel testlerimizden geçti. Sadece üçü Chez, tüm testleri uçan renklerle geçti. O zamanlar Lispworks'ün herhangi bir platformda yerel ipliği olmadığını düşünüyorum (sanırım şimdi yapıyorlar) ve Allegro'nun sadece bazı platformlarda yerel iplikleri olduğunu düşünüyorum. Ayrıca, Allegro, çok sevmediğim bir "bizi arayın" çalışma süresi lisans ücretine sahipti. Lispworks'ün çalışma zamanı ücreti olmadığını ve Chez'nin basit (ve çok makul) bir düzenlemeye sahip olduğuna inanıyorum (ve sadece derleyiciyi çalışma zamanında kullanıyorsanız başladı).
Hem Lisp'te hem de Scheme'de biraz önemli kod parçaları üretmiş olmak bazı karşılaştırma ve karşıtlık noktalarıdır:
Lisp ortamları çok daha olgun. Paranın karşılığını daha çok alırsın. (Bunu söyledikten sonra, daha fazla kod daha fazla hataya da eşittir.)
Lisp ortamlarını öğrenmek çok daha zor. Uzman olmak için daha fazla zamana ihtiyacınız var; Common Lisp çok büyük bir dil - ve ticari uygulamaların üzerine eklediği kütüphanelere ulaşmadan önce bu. (Scheme'nin sözdizimi vakası, Lisp'teki herhangi bir şeyden çok daha ince ve karmaşık olduğunu söyledi.)
Lisp ortamlarında ikili dosya üretmek biraz daha zor olabilir. Gereksiz bitleri kaldırmak için resminizi "sallamanız" gerekir ve bu işlem sırasında programınızı doğru şekilde kullanmazsanız, daha sonra çalışma zamanı hataları ile sonuçlanabilirsiniz. . Buna karşılık, Chez ile ihtiyaç duyduğu tüm diğer dosyaları içeren üst düzey bir dosya derliyoruz ve işimiz bitti.
Daha önce, Scheme'yi başlangıçta istemediğimiz yerlerde kullanmaya başladığımızı söyledim. Neden? Başımın üstündeki üç nedeni düşünebilirim.
İlk önce, Chez'ye (ve geliştiricisi Cadence'e) güvenmeyi öğrendik. Takımdan çok şey istedik ve tutarlı bir şekilde teslim edildi. Mesela, Chez tarihsel olarak önemsiz derecede küçük bir kusur yaşadı ve hafıza yöneticisi çok, çok iyi oldu.
İkincisi, Chez'den aldığımız performansı sevmeyi öğrendik. Bir komut dosyası dili gibi hissettiren bir şey kullanıyorduk - ve yerel kod hızını alıyorduk. Önemi olmayan bazı şeyler için - ama asla zarar vermedi ve bazen çok yardımcı oldu.
Üçüncüsü, Scheme'nin sağlayabileceği soyutlamayı sevmeyi öğrendik. Bu arada sadece makro demek istemiyorum; Kapanışlar, lambdalar, kuyruk çağrıları, vb. Gibi şeyleri kastediyorum.
Scheme mükemmel mi? Hayır; bu bir takas. Birincisi, bireysel geliştiricilerin daha etkili olmalarını sağlar - ancak geliştiricilerin birbirlerinin kodlarını çiğnemeleri daha zordur, çünkü çoğu dilin (örneğin, döngüler için) sahip olduğu bildiriler Şema'da (örneğin, yapmanın milyonlarca yolu vardır) a döngü için). İkincisi, konuşmak, kiralamak, ödünç almak vb. İçin çok daha küçük bir geliştirici havuzu var.
Özetlemek gerekirse, şunu söyleyebilirim: Lisp ve Scheme, başka hiçbir yerde yaygın olarak bulunmayan bazı yetenekler sunar. Bu yetenek bir takastır, yani sizin durumunuzda anlamlı olan daha iyi olmuştu. Bizim durumumuzda Lisp veya Scheme ile gitmek arasındaki belirleyici faktörlerin, dil veya kütüphane özellikleri ile olduğundan çok temel özelliklerle (platform desteği, platform konuları, çalışma zamanı derlemesi, çalışma zamanı lisansı) yapması daha fazla. Yine, bizim durumumuzda da bir takas oldu: Chez ile istediğimiz temel özellikleri elde ettik, ancak ticari Lisp ortamlarının sahip olduğu geniş kütüphaneleri kaybettik.
Ayrıca, sadece yinelemek için: uzun zaman önce çeşitli Lisps ve Şemalara baktık; o zamandan beri hepsi gelişti ve gelişti.