Hem CL hem de biraz Clojure ile birkaç ay boyunca Lisp hakkında bir şeyler öğrendikten ve oynadıktan sonra, hala C # yerine bir şey yazmak için zorlayıcı bir neden göremiyorum.
Gerçekten zorlayıcı nedenlerden birini veya birisinin gerçekten büyük bir şeyi kaçırdığımı belirtmesini isterim .
Lisp'in güçlü yönleri (araştırmam başına göre):
- Kompakt, etkileyici gösterim - C # 'dan çok, evet ... ama bu fikirleri de C # ile ifade edebiliyor gibiyim.
- İşlevsel programlama için örtülü destek - LINQ eklentisi yöntemleriyle C #:
- mapcar = .Secect (lambda)
- mapcan = .Seçin (lambda) .Açelik ((a, b) => a. Union (b))
- araba / ilk = .İlk ()
- cdr / rest = Atla (1) .... vb.
- Lambda ve daha üst düzey işlev desteği - C # buna sahip ve sözdizimi tartışmasız daha basit:
- "(lambda (x) (vücut))" ve "x => (vücut)"
- Clojure'da "# (" "ile" "" ""% 1 ","% 2 "güzel
- Nesnelerden ayrılmış yöntem gönderme - C #, uzatma yöntemleriyle buna sahiptir
- Multimethod gönderme - C #, bu doğal olarak yok, ancak birkaç saat içinde bir işlev çağrısı olarak uygulayabilir
- Kod Veridir (ve Makrolar) - Belki de "makro" almadım, ancak bir makro fikrinin bir işlev olarak uygulanamayacağı tek bir örnek görmedim; "dili" değiştirmiyor, ama bunun bir güç olduğundan emin değilim.
- DSLs - Yalnızca fonksiyon bileşimi ile yapabilir ... ama çalışır
- Türlenmemiş "keşif" programlaması - yapılar / sınıflar için, C # 'ın otomatik özellikleri ve "nesne" oldukça iyi çalışır ve ilerledikçe daha güçlü yazarak kolayca yükselebilirsiniz
- Windows olmayan bir donanımda çalışır - Evet, öyle mi? Kolej dışında, yalnızca evde Windows çalıştırmayan bir kişi ya da en azından * nix / Mac'te bir Windows sanal makinesi tanıdım. (Sonra tekrar, belki de bu düşündüğümden daha önemli ve beynimi yeni yıkadım ...)
- Aşağıdan yukarıya tasarım için REPL - Tamam, bunun gerçekten çok hoş olduğunu kabul ediyorum ve C # 'da özlüyorum.
Lisp'te özlediğim şeyler (C #, .NET, Visual Studio, Resharper karışımı nedeniyle):
- Namespaces. Statik yöntemlerle bile, bağlamlarını sınıflandırmak için onları bir "sınıfa" bağlamayı seviyorum (Clojure buna sahip görünüyor, CL görünmüyor.)
- Mükemmel derleme ve tasarım zamanı desteği
- tip sistemi etrafta dolaştığım veri yapılarının "doğruluğunu" belirlememe izin veriyor
- yanlış yazılmış herhangi bir şeyin gerçek zamanlı olduğunun altı çizilir; Bilmek için çalışma zamanı kadar beklemek zorunda değilim
- kod iyileştirmeleri (zorunlu olan yerine FP yaklaşımını kullanmak gibi) otomatik olarak kabul edilir
- GUI geliştirme araçları: WinForms ve WPF (Clojure'un Java GUI kitaplıklarına erişimi olduğunu biliyorum, ancak tamamen bana yabancılar.)
- GUI Hata ayıklama araçları: kesme noktaları, adım adım, adım adım, değer denetçileri (metin, xml, özel), saatler, iş parçacığı hata ayıklama, koşullu kesme noktaları, koda herhangi bir düzeyde atlama kabiliyeti olan çağrı yığını penceresi yığında
- (Adil olmak gerekirse, Emacs + Slime ile olan ilişkim bunun bir kısmını veriyor gibiydi, ama VS GUI odaklı yaklaşımın bir parçasıyım)
Lisp'i çevreleyen yutturmaca gerçekten seviyorum ve bir şans verdim.
Fakat Lisp'te yapabileceğim ve C # ile yapamayacağım bir şey var mı? C # biraz daha ayrıntılı olabilir, ama aynı zamanda otomatik tamamlama var.
Neyi kaçırıyorum? Neden Clojure / CL kullanmalıyım?
AND
veya OR
bir işlev olarak görmek isterim . Yapılabilir (verilen LAMBDA
, aynı zamanda bir makrodur), ancak bunu yapmanın tamamen berbat olmayacağı açık bir yol görmüyorum.