Metaprogramlama için Python ile Ruby karşılaştırması [kapalı]


90

Şu anda öncelikle bir D programcısıyım ve araç kutuma başka bir dil eklemek istiyorum, tercihen D gibi statik olarak derlenmiş bir dilde yapılamayan meta programlama hack'lerini destekleyen bir dil.

Lisp hakkında biraz okudum ve Lisp'in yaptığı bazı harika şeylere izin veren, ancak Lisp'in garip sözdizimi vb. Olmayan bir dil bulmayı çok isterim. Ateşli bir dil savaşı başlatmak istemiyorum ve eminim hem Ruby hem de Python'un kendi ödünleri vardır, bu yüzden kişisel olarak benim için önemli olanları listeleyeceğim. Lütfen bana Ruby, Python veya başka bir dilin benim için en iyisi olup olmadığını söyleyin.

Önemli:

  1. İyi bir metaprogramlama. Çalışma zamanında sınıflar, yöntemler, işlevler vb. Oluşturma yeteneği. Tercihen, kod ve veri arasında minimum ayrım, Lisp stili.
  2. Güzel, temiz, mantıklı sözdizimi ve tutarlı, sezgisel anlambilim. Temelde iyi düşünülmüş, kullanımı eğlenceli, modern bir dil.
  3. Çoklu paradigmalar. Her proje, hatta bir proje içindeki her küçük alt problem için tek bir paradigma doğru değildir.
  4. Aslında programlama hakkında düşünme şeklini etkileyen ilginç bir dil.

Bir şekilde önemli:

  1. Verim. Performans iyi olsaydı iyi olurdu, ancak performans gerçek bir öncelik olduğunda, onun yerine D kullanacağım.
  2. İyi belgelenmiş.

Önemli değil:

  1. Topluluk boyutu, kütüphane mevcudiyeti vb. Bunların hiçbiri dilin kendisinin özellikleri değildir ve hepsi çok hızlı değişebilir.
  2. İş mevcudiyeti. Tam zamanlı, profesyonel bir programcı değilim. Ben bir yüksek lisans öğrencisiyim ve programlama araştırmamla teğetsel olarak alakalı.
  3. Bir milyon kod maymunu akılda tutularak üzerinde çalışılan çok büyük projelerle tasarlanmış tüm özellikler.

1
+1 Genel olarak iyi sorulan bir soru için.
Triptych

Ne yazık ki, yüksek puan alan cevapların tümü temelde "duruma göre değişir" diyor ve daha düşük cevaplar temelde Python ile Ruby ateş savaşı.
Dan Burton

Clojure'u düşündün mü?
Mark Thomas

Cevap Julia ! O zamanlar yoktu: bit.ly/julia_meta ... sevinin! Julia, @dsimcha tarafından listelenen tüm önemli noktaların yanı sıra performans ve diğer tüm noktalar Julia olgunlaşmaya devam ederken gerçek oluyor.
SalchiPapa

Yanıtlar:


15

Python ile yakut arasında en azından ideolojik düzeyde gerçekten çok büyük bir fark yok. Çoğunlukla, aynı şeyin farklı lezzetleridir. Bu nedenle, programlama tarzınıza hangisinin daha çok uyduğunu görmenizi tavsiye ederim.


30
Kesinlikle yoktur konum değil aynı şey. Yüzeyde benzer görünüm, ancak Ruby'nin en güçlü özelliklerini kullandığınızda, Python'un eşleşmediğini anlarsınız. Örnek olarak, Ruby'de bir DSL yazmaya karşı bir Python yazmaya veya çalışma zamanında işlev, yöntemler, sınıflar vb. Oluşturmaya çalışın. Ruby'de çok daha basittir.
FelipeC

14
Metaprogramlama yapmanız ender rastlanan bir durum değildir, bunun yapılması çok enderdir. En önemsiz program hariç tümü, olağan yeniden düzenleme araçlarına düşmeyen, ancak metaprogramlama ile kolayca ortadan kaldırılabilen yinelenen kalıplara sahiptir.
Wayne Conrad

10
Ruby ve Python, tasarımlarını yöneten fikirlerde bile oldukça farklıdır. Python istiyorlar ve umarım işleri yapmanın bariz bir yolunu istiyorlar. Bu genellikle dili Ruby kadar anlamlı kılar, ancak daha tutarlı hale getirir. Ruby, işleri yapmanın birçok yolu olan Perl tarzından biraz daha fazla gelir. Ayrıca Ruby bazı şeyleri çok kolaylaştırır ve aslında özel üyeler fikrini içerir. Öte yandan Python en fazla bazı şeyleri yapmayı zorlaştırır, bu yüzden daha açık olmanız gerekir (sınıflara davranış eklemek veya onları geçersiz kılmak gibi).
Sean Copenhaver

5
Muhtemelen her ikisinde de hızlandırılmış bir kurs yapmalısınız, ancak kolay meta programlama için Ruby'nin daha uygun olduğu görülüyor. Yine de pek tecrübem yok, o yüzden bunu biraz tuzla al.
Sean Copenhaver

7
Yakut ve Python vardır sadece onlar "güzel kod" vaaz gerçeği benzer. Onlar sadece (IMO iyidir) o güzellik şeye tamamen farklı görüşlere sahip
Gabi Purcaru

69

Lisp hakkında biraz okudum ve Lisp'in yaptığı bazı harika şeylere izin veren, ancak Lisp'in garip sözdizimi vb. Olmayan bir dil bulmayı çok isterim.

Hepimiz değil miyiz?

kod ve veri arasında minimum ayrım, Lisp stili

Ne yazık ki, kod ile veri ve "garip" sözdizimi arasındaki minimum ayrım, birbirlerinin sonuçlarıdır.

Okunması kolay sözdizimi istiyorsanız, Python'a sahipsiniz. Bununla birlikte, kod yaygın olarak kullanılan yerleşik veri yapılarının hiçbirinde temsil edilmemiştir . Çoğu dilin yaptığı gibi, 'önemli' listenizin 1. maddesinde başarısız olur. Bu, yararlı yardım sağlamayı zorlaştırır.

Hepsine sahip olamazsın. Unutma, bu düşünceye ilk sahip olan sen değilsin. İdeal diliniz gibi bir şey olsaydı, hepimiz onu kullanırdık. Gerçek dünya ideallerinizin gerisinde kaldığı için, istek listenizi yeniden önceliklendirmeniz gerekecek. Sizin için gerçekten neyin önemli olduğunu belirlemek için "önemli" bölümü yeniden düzenlenmelidir .


3
Pek çok dilin Lispy olmayan sözdizimlerinde Lisp benzeri makrolar uyguladığını buldum ve burada makro yazmanın çok zor olduğunu, çünkü kodun temsil edildiği veri yapılarını hiç kimse doğal olarak bilmediği için makro yazmak çok zor oluyor. ve kimse yapmıyor.
pupeno

11
İnsanlar, sözdizimine aşina olmadıkları için Lisp'i okumayı zor buluyor. Lisp'i okumayı C #'dan çok daha kolay buluyorum (ancak Python'dan daha zor).
Jules

1
Bu noktaya büyük ölçüde katılıyorum, ancak hem Ruby hem de Lisp ile ilgili deneyimlerim, eskisinin parantezler olmadan elde edilebildiği kadar metaprogramlama için de iyi olduğunu gösteriyor . Yaklaşan diğer alternatifler TCL ve JavaScript olabilir, ancak bunları başka nedenlerle tercih etmem.
inger

Uzun uzun agi Dylan adında bir dil vardı ve bu tam olarak böyle olmalıydı.
Friedrich

17

Dürüst olmak gerekirse, meta programlama tesisleri söz konusu olduğunda, Ruby ve Python, bazı taraftarlarının kabul etmek istediklerinden çok daha benzer. Her iki dilin bu incelemesi oldukça iyi bir karşılaştırma / inceleme sunuyor:

Bu nedenle, bazı kriterlere göre bir tane seçin. Belki Rails'i seviyorsunuz ve bu kodu incelemek istiyorsunuz. Belki SciPy senin işin. Kütüphaneler, topluluklar vb. Ekosisteme bakın ve birini seçin. Seçiminize bağlı olarak bazı meta programlama nirvanalarını kesinlikle kaybetmeyeceksiniz.


bu blog girişinin, OP'nin ana noktası olan metaprogramlamadan ziyade kişisel tercihlerle (yeterince adil ancak güzellik bakanın gözündedir) ilgisi var gibi görünüyor.
inger

16

Feragatname: Her iki dilde de uğraşıyorum, ancak her ikisinde de en azından küçük çalışma programları (sadece Perl, bash veya GNU make kullandığım hızlı betikler değil) yazdım.

Ruby, "çoklu paradigmalar" 3. noktası için gerçekten iyi olabilir, çünkü alana özgü diller yaratmayı kolaylaştırmak için çok çalışır. Örneğin, çevrimiçi göz atın ve birkaç bit Ruby on Rails koduna ve birkaç bitlik Rake koduna bakın. İkisi de Ruby ve benzerlikleri görebilirsiniz, ancak normalde aynı dil olarak düşündüğünüz gibi görünmüyorlar.

Python bana biraz daha öngörülebilir görünüyor (muhtemelen 'temiz' ve 'mantıklı' 2. nokta ile ilişkili), ancak bunun dilin kendisinden mi yoksa sadece farklı değerlere sahip insanlar tarafından mı kullanıldığını gerçekten bilmiyorum . Python'da asla derin sihir yapmaya kalkışmadım. Her iki dilin de iyi düşünülmüş olduğunu kesinlikle söyleyebilirim.

Her ikisi de 1 ve 4'te iyi puanlar. [Düzenleme: Aslında 1 oldukça tartışılabilir - yorumlanan dillerde yaygın olduğu gibi her ikisinde de "eval" vardır, ancak kavramsal olarak pek saf değiller. Kapanışları tanımlayabilir, nesnelere yöntemler atayabilir ve başka şeyler yapabilirsiniz. Bunun istediğiniz kadar ileri gidip gitmeyeceğinden emin değilim.]

Şahsen ben Ruby'yi daha eğlenceli buluyorum, ancak kısmen bunun nedeni işleri yapmanın harika yollarını düşünerek dikkatin dağılmasının daha kolay olmasıdır. Aslında Python'u daha çok kullandım. Bazen havalı olmak istemezsin, onunla devam etmek istersin, bu yüzden yatmadan önce biter ...

İkisine de girmek zor değildir, bu nedenle bir sonraki küçük görevinizi birinde ve ondan sonra diğerinde yapmaya karar verebilirsiniz. Ya da kütüphaneden her biri için bir giriş kitabı alın, ikisini de gözden geçirin ve sizi neyin kaptığını görün.


15

Smalltalk'ı düşündün mü? Yansıtma ve iç gözlem yetenekleriyle çok basit, açık ve genişletilebilir bir sözdizimi ve bu yeteneklerden yararlanan tam entegre bir geliştirme ortamı sunar. Göz at yapılan çalışma varlığının bazı içinde Squeak Smalltalk mesela. Squeak kullanan birçok araştırmacı Squeak e-posta listesinde ve #squeak freenode'da takılıyor, böylece karmaşık konularda çok kolay yardım alabilirsiniz.

Mevcut alaka düzeyinin diğer göstergeleri: adlandırmak istediğiniz herhangi bir platformda çalışır ( iPhone dahil ); Gilad Bracha, Newspeak çalışmasını Squeak üzerine kuruyor; V8 ekibi, Smalltalk sanal makinelerinde başarılı oldu ; ve Dan Ingalls ve Randal Schwartz, vahşi doğada geçen yıllar sonra Smalltalk işine döndü.

Aramanızda iyi şanslar - sonunda neye karar verdiğinizi bize bildirin.


14

Lisp, performans dahil tüm kriterlerinizi karşılar ve sözdizimi (garip) olmayan tek dildir. Şaşırtıcı derecede yanlış bilgilendirilmiş / yanlış düşünülmüş bir temelde bundan kaçınırsanız ve sonuç olarak Emacs + SLIME + CL kullanma deneyimini kaçırırsanız, kendinize büyük bir kötülük yapmış olursunuz.


4
Ya da çok hoş bulduğum Clojure'u deneyebilirsiniz.
pupeno

1
Kesinlikle katılıyorum. Lisp'in gücünü istiyorsanız, sadece dalın ve ona sahip olun! Aslında parantezlere alışmak oldukça kolaydır; çoğu insanın sandığı kadar önemli değiller.
Dan Burton

11

4 "önemli" puanınız tam olarak Ruby'ye götürürken, 2 "biraz önemli" nokta Python tarafından yönetilir. Öyle olsun.


11

Ruby'yi tanımlıyorsunuz.

  • İyi bir metaprogramlama. Çalışma zamanında sınıflar, yöntemler, işlevler vb. Oluşturma yeteneği. Tercihen, kod ve veri arasında minimum ayrım, Lisp stili.

Mevcut ilkelleri çalışma zamanında genişletmek ve değiştirmek çok kolaydır . Ruby'de her şey bir nesnedir, dizelerdir, tam sayılardır, hatta işlevlerdir.

Ayrıca sözdizimsel şeker için kısayollar da oluşturabilirsiniz, örneğin class_eval ile .

  • Güzel, temiz, mantıklı sözdizimi ve tutarlı, sezgisel anlambilim. Temelde iyi düşünülmüş, kullanımı eğlenceli, modern bir dil.

Ruby daha az sürpriz ilkesini izler ve Ruby kodunu başka bir dildeki karşılığını karşılaştırırken birçok kişi onu daha "güzel" olarak görür.

  • Çoklu paradigmalar. Her proje, hatta bir proje içindeki her küçük alt problem için tek bir paradigma doğru değildir.

Zorunlu, nesne yönelimli, işlevsel ve yansıtıcı takip edebilirsiniz.

  • Aslında programlama hakkında düşünme şeklini etkileyen ilginç bir dil.

Bu çok öznel, ancak benim bakış açıma göre, birçok paradigmayı aynı anda kullanma yeteneği çok ilginç fikirlere izin veriyor.

Python'u denedim ve önemli noktalarınıza uymuyor.


11
-1 Python kullanıyorum ve mükemmel uyuyor, Python ve Ruby arasındaki farklılıklar başka yönlerden yatıyor. Fanboy-ish gürültücü, sensin.
gorsky

6
Çok konuşma ama yürüyüş yok. String sınıfına dinamik olarak bir yöntem eklemenin Python'da bir örneğini sağlamak ister misiniz?
FelipeC

6
@john Bu kesinlikle benim açımdan; çok karmaşık ve çirkin ( String sınıfı için imkansız olduğundan bahsetmiyorum bile ). Ruby'de OTOH çok basit: "self.class.send (: define_method,: method_name) {method_code}"
FelipeC

2
Yakut olabilir denemek Pöls takip etmek, ama söyleyemem yapar . Örneğin, lambda/ Proc.newmess, burada SO'da "şaşırtıcı davranış" ve "son derece mantıksız" olarak adlandırılmıştır. :-) Ruby gibi büyük ve karmaşık herhangi bir dilin bu tür kafa karıştırıcı alanlara sahip olması kaçınılmazdır.
Ken

2
@Token String, metaprogramlama amaçları için Ruby'de maymun yamasına bir örnek : coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/… . Alt sınıflandırma işe yaramaz; ancak, basit bir iki bağımsız değişken işlevi olur.
P Shved

8

Farklı dillerde aynı şeyi yapan kod örneklerini karşılaştırın (bir myListlistedeki öğelerin boş olmayan yeni satırıyla birleştirin ) (diller ters alfabetik sırayla düzenlenmiştir):

Yakut :

myList.collect { |f| f.description }.select { |d| d != "" }.join("\n")

Veya

myList.map(&:description).reject(&:empty?).join("\n")

Python :

descriptions = (f.description() for f in mylist)
"\n".join(filter(len, descriptions)) 

Veya

"\n".join(f.description() for f in mylist if f.description())

Perl :

join "\n", grep { $_ } map { $_->description } @myList;

Veya

join "\n", grep /./, map { $_->description } @myList;

Javascript :

myList.map(function(e) e.description())
      .filter(function(e) e).join("\n")

Io :

myList collect(description) select(!="") join("\n")

İşte bir Io kılavuzu .


3
(biçim nil "~ {~ a ~ ^ ~% ~}" (nil'i kaldırın (mapcar # 'description mylist)))
Rainer Joswig

güzel, ama metaprogramlama burada nerede? soruyla uzaktan ilişkili, biraz işlevsel bir tarz gibi görünüyor.
inger

6

Ruby, "ana akım" olma açısından Lisp'ten daha iyi olurdu (bu gerçekten ne anlama geliyorsa, ama gerçekçi bir endişe, eğer buna devam ederseniz, Lisp programlaması hakkındaki sorularınıza cevap bulmanın ne kadar kolay olacağıdır.) Her durumda , Ruby'yi almak çok kolay oldu. İlk olarak Python'u (veya bu konudaki diğer dilleri) öğrenmeye harcadığım zamanla aynı süre içinde, çok geçmeden daha önce hiç olmadığı kadar verimli bir şekilde daha iyi kod yazıyordum . Yine de bu sadece bir kişinin görüşü; bir parça tuzla al, sanırım. Bu noktada Ruby hakkında Python veya Lisp'ten çok daha fazlasını biliyorum, ancak geçiş yapmadan önce uzun bir süre Python kullanıcısı olduğumu bilmelisiniz.

Lisp kesinlikle oldukça havalı ve araştırmaya değer; sizin de söylediğiniz gibi, topluluğun boyutu vb. oldukça hızlı değişebilir. Bununla birlikte, büyüklüğün kendisi topluluğun kalitesi kadar önemli değildir . Örneğin, #ruby-langkanal hala bazı inanılmaz derecede zeki insanlarla dolu. Lisp gerçekten zeki insanları da cezbediyor gibi görünüyor. Çok fazla ilk elden deneyimim olmadığı için Python topluluğu hakkında fazla konuşamam, ancak bazen "çok büyük" gibi görünüyor. (İnsanların IRC kanallarında oldukça kaba davrandıklarını hatırlıyorum ve gerçekten Python'a giren arkadaşlardan duyduğuma göre bu istisnadan çok kural gibi görünüyor.)

Her neyse, yararlı bulabileceğiniz bazı kaynaklar şunlardır:

1) Pragmatik Programcılar Ruby Metaprogramming serisi ( http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming ) - ücretsiz değil, ancak sonraki bölümler oldukça ilgi çekicidir . (İndirmek ve ne hakkında öğreneceğinizi görmek isterseniz kod ücretsizdir.)

2) Lisp Üzerine, Paul Graham ( http://www.paulgraham.com/onlisp.html ). Biraz eski, ancak bir klasik (ve ücretsiz olarak indirilebilir).


5

Python'u birçok proje için kullanıyorum ve Python'un istediğiniz tüm özellikleri sağladığını düşünüyorum.

önemli:

  1. Metaprogramlama: Python, metasınıfları ve çalışma zamanı sınıfı / yöntem oluşturmayı vb. Destekler.
  2. Sözdizimi: Bu bir şekilde öznel. Pythons sözdizimini basitliği için seviyorum, ancak bazı İnsanlar Python'un boşluklara duyarlı olduğundan şikayet ediyor.
  3. Paradigmalar: Python prosedürel, nesne yönelimli ve temel işlevsel programlamayı destekler.
  4. Python'un çok pratik odaklı bir stili olduğunu düşünüyorum, benim için çok ilham vericiydi.

Bir şekilde önemli:

  1. Performans: Bir betik dili. Ancak Python için C uzantıları yazmak yaygın bir optimizasyon uygulamasıdır.
  2. Dokümantasyon: Şikayet edemem. Birinin Java'dan bildiği kadar ayrıntılı değil, ama yeterince iyi.

Yüksek lisans öğrencisi olduğunuz için, Python'un bir bilim adamının ihtiyacı olan tek şey olduğunu iddia eden bu makaleyi okumak isteyebilirsiniz . Maalesef Python'u Ruby ile karşılaştıramıyorum çünkü bu dili hiç kullanmadım.

Saygılarımızla, Dennis


3
Python boşluklara duyarlı değildir. Girintileme duyarlıdır.
jfs

5

@Jason sırasıyla katılmıyorum. Ruby'yi meta programlama için Python'dan daha üstün kılan farklılıklar vardır - hem felsefi hem de pragmatik. Yeni başlayanlar için Ruby, Single Inheritance ve Mixins ile miras hakkını elde eder . Ve meta programlamaya gelince, her şeyin benlikle ilgili olduğunu anlamanız gerekir . Buradaki kanonik fark, Ruby'de çalışma zamanında kendilik nesnesine erişebilmenizdir - Python'da bunu yapamazsınız!

Python'dan farklı olarak, Ruby'de ayrı bir derleme veya çalıştırma aşaması yoktur. Ruby'de her kod satırı belirli bir öz nesneye karşı çalıştırılır . Ruby'de her sınıf hem nesneden hem de gizli bir meta sınıftan miras alır. Bu, bazı ilginç dinamikler ortaya çıkarır:

class Ninja
  def rank
    puts "Orange Clan"
  end

  self.name #=> "Ninja"
end

Kullanılması self.name Ninja sınıfların Metaclass kere adı yöntemini Ninja sınıf adını döndürmek için. Python'da metaprogramlama çiçeği çok mu güzel? Bundan içtenlikle şüpheliyim!


4

Eğer lisp sözdizimini sevmiyorsanız, belki de assembler gitme yoludur. :-)

Kod ve veri arasında kesinlikle minimum ayrım var, çok paradigmadır (veya belki bu paradigma değildir) ve hem öğrenme hem de yapabileceğiniz püf noktaları açısından zihin genişleten (sıkıcıysa) bir deneyimdir.


Sanırım assembly dilinde diğer dillerden daha fazla meta programlama yaptım. Kod veridir ve veriler kod olmaya çalışabilir. Veriler imzalı veya imzasız değildir, karar veren işlem kodudur.
Nosredna

1
OO olduğunu iddia edebileceğiniz montajcı kodum var. Yöntemlere benzeyen şeyler vardır - "sınıfa" bağlı olanı çağırırsınız.
justintime

4

Io, tüm "Önemli" noktalarınızı karşılar. Çılgın meta bilgisayar korsanlığı yapmak için daha iyi bir dil olduğunu sanmıyorum.


Bunun için teşekkürler, bilmiyordum. İlk bakışta eğlenceli görünüyor, belki bolca (()) ama yine de. Umarım yakında bakmak için zaman bulurum.
flq

3

statik olarak derlenmiş bir dilde yapılamayan meta programlama hack'lerini destekleyen bir

Lisp'in yaptığı bazı harika şeylere izin veren bir dil bulmayı çok isterim

Lisp derlenebilir.



3

Cevabım ikisi de olmayacak. Her iki dili de biliyorum, Ruby üzerine bir ders aldım ve birkaç yıldır python'da programlama yapıyorum. Lisp, tek amacının listeleri dönüştürmek olduğu gerçeğinden ötürü meta programlamada iyidir, kendi kaynak kodu yalnızca belirteçlerin bir listesidir, dolayısıyla meta programlama doğaldır. Bu tür şeyler için en çok sevdiğim üç dil Rebol, Forth ve Factor. Rebol, giriş akışından kod alan, ona karşı bir ifade çalıştıran ve dilde yazılmış kuralları kullanarak onu dönüştüren çok güçlü bir lehçe dilidir. Çok etkileyici ve lehçelemede son derece iyi. Faktör ve Forth, sözdiziminden aşağı yukarı tamamen ayrılmıştır ve bunları kelimeleri tanımlayarak ve çağırarak programlarsınız. Genelde çoğunlukla kendi dillerinde yazılırlar. Geleneksel anlamda uygulama yazmıyorsunuz, özel uygulamanızı tanımlamak için kendi kelimelerinizi yazarak dili genişletirsiniz. Yalnızca smalltalk'ta gördüğüm, kaynak kodunu değerlendirmek ve onunla çalışmak için gördüğüm birçok özelliğe sahip olduğu için faktör özellikle güzel olabilir. Gerçekten güzel bir çalışma alanı, etkileşimli belgeler vb.


2

Python ve Ruby'yi ayıracak pek bir şey yok. Python topluluğunun Ruby topluluğundan daha büyük ve daha olgun olduğunu söyleyebilirim ve bu benim için gerçekten önemli. Ruby, olumlu ve olumsuz yansımaları olan daha esnek bir dildir. Bununla birlikte, bu iki dilde de ayrıntılara girecek pek çok insan olacağına eminim, bu yüzden ringe üçüncü bir seçenek ekleyeceğim. JavaScript'e ne dersiniz?

JavaScript, başlangıçta Web için Şema olarak tasarlanmıştı ve prototip tabanlıdır; bu, çoklu paradigma ve meta programlama söz konusu olduğunda Python ve Ruby'ye göre bir avantajdır. Sözdizimi diğer ikisi kadar güzel değil, ancak muhtemelen var olan en yaygın kullanılan dildir ve performans her geçen gün daha iyi hale geliyor.


2

Lisp tarzı kod-veridir konseptini seviyorsanız, ancak Lispy sözdizimini sevmiyorsanız, belki Prolog iyi bir seçim olabilir.

Bu, "kullanımı eğlenceli, modern bir dil" olarak nitelendirilsin, yargılamak için başkalarına bırakacağım. ;-)


2

Ruby Python, Smalltalk ve Ruby'yi keşfettikten sonra benim seçimim.


2

OCaml ne olacak?

OCaml özellikleri: bir statik tip sistemi, tür çıkarımı, parametrik çok biçimlilik, kuyruk özyineleme, örüntü eşleştirme, birinci sınıf sözcüksel kapanışlar, işlevler (parametrik modüller), istisna işleme ve artımlı nesil otomatik çöp toplama.

Aşağıdakileri tatmin ettiğini düşünüyorum:

Önemli:

  1. Güzel, temiz, mantıklı sözdizimi ve tutarlı, sezgisel anlambilim. Temelde iyi düşünülmüş, kullanımı eğlenceli, modern bir dil.
  2. Çoklu paradigmalar. Her proje, hatta bir proje içindeki her küçük alt problem için tek bir paradigma doğru değildir.
  3. Aslında programlama hakkında düşünme şeklini etkileyen ilginç bir dil.

Bir şekilde önemli:

  1. Verim. Performans iyi olsaydı iyi olurdu, ancak performans gerçek bir öncelik olduğunda, onun yerine D kullanacağım.
  2. İyi belgelenmiş.

OCaml, çalışma zamanında sınıflar / yöntemler oluşturmanıza izin verir mi? Bu nasıl çalışıyor?
Jason Creighton

Sadece OCaml hakkında okudum ve belki çalışma zamanında bir şeyler oluşturamıyor, bu yüzden onu kaldırdım.
Robert Vuković


1

Python tarzı sözdizimi ve lisp benzeri makrolar (gerçek kod olan makrolar) ve iyi DSL için bkz. Yakınsama .


1

Python'un arzu ettiğiniz her şeyi yerine getireceğinden emin değilim (özellikle kod ve veri arasındaki minimum ayrım hakkında), ancak python lehine bir argüman var. D'de python için uzantıları programlamanızı kolaylaştıran bir proje var, böylece her iki dünyanın en iyisine sahip olabilirsiniz. http://pyd.dsource.org/celerid.html



1

Ruby ile gitmenizi tavsiye ederim.

İlk öğrenmeye başladığımda, öğrenmeyi gerçekten kolay buldum.


1

Ruby Programlama Dilini Ruby Uygulamaları ile karıştırmayın, Ruby'de POSIX işlemlerinin mümkün olmadığını düşünerek.

Basitçe pthread desteği ile derleyebilirsiniz ve bu, kelime oyununu affederseniz, bu iş parçacığı oluşturulduğunda zaten mümkündü .

Bu sorunun cevabı basit. Eğer peltek seviyorsanız, muhtemelen yakutu tercih edeceksiniz. Ya da ne istersen.




0

Ana noktanızla ilgili olarak (meta programlama): Groovy Sürüm 1.6, standart ve entegre bir özellik olarak yerleşik AST (Özet Sözdizimi Ağacı) programlamasına sahiptir. Ruby'de RubyParser var, ancak bu bir eklenti.

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.