Python vs. Ruby untuk metaprogramming [tertutup]

90

Saat ini saya terutama seorang programmer D dan sedang mencari untuk menambahkan bahasa lain ke kotak peralatan saya, lebih disukai yang mendukung peretasan metaprogramming yang tidak dapat dilakukan dalam bahasa yang dikompilasi secara statis seperti D.

Saya telah membaca sedikit tentang Lisp dan saya ingin menemukan bahasa yang memungkinkan beberapa hal keren yang dilakukan Lisp, tetapi tanpa sintaks yang aneh, dll. Dari Lisp. Saya tidak ingin memulai perang api bahasa, dan saya yakin Ruby dan Python memiliki kompromi, jadi saya akan membuat daftar apa yang penting bagi saya secara pribadi. Tolong beri tahu saya apakah Ruby, Python, atau bahasa lain adalah yang terbaik untuk saya.

Penting:

  1. Metaprogramming yang bagus. Kemampuan untuk membuat kelas, metode, fungsi, dll. Pada waktu proses. Lebih disukai, perbedaan minimal antara kode dan data, gaya Lisp.
  2. Sintaks yang bagus, bersih, waras, dan semantik yang konsisten dan intuitif. Pada dasarnya bahasa modern yang dipikirkan dengan matang, menyenangkan untuk digunakan.
  3. Banyak paradigma. Tidak ada satu paradigma yang tepat untuk setiap proyek, atau bahkan setiap subproblem kecil dalam sebuah proyek.
  4. Bahasa menarik yang benar-benar memengaruhi cara berpikir seseorang tentang pemrograman.

Agak penting:

  1. Performa. Alangkah baiknya jika kinerjanya bagus, tetapi ketika kinerja adalah prioritas nyata, saya akan menggunakan D.
  2. Didokumentasikan dengan baik.

Tidak penting:

  1. Ukuran komunitas, ketersediaan perpustakaan, dll. Tidak satu pun dari ini yang merupakan karakteristik bahasa itu sendiri, dan semuanya dapat berubah dengan sangat cepat.
  2. Ketersediaan pekerjaan. Saya bukan programmer profesional penuh waktu. Saya seorang mahasiswa pascasarjana dan pemrograman sangat relevan dengan penelitian saya.
  3. Fitur apa pun yang pada dasarnya dirancang dengan proyek sangat besar yang dikerjakan oleh jutaan kera kode.
dsimcha
sumber
1
+1 Untuk pertanyaan yang umumnya sering diajukan.
Triptych
Sayangnya, jawaban berperingkat tinggi semuanya pada dasarnya mengatakan "itu tergantung" dan jawaban yang lebih rendah pada dasarnya adalah perang api Python vs Ruby.
Dan Burton
Sudahkah Anda mempertimbangkan Clojure?
Mark Thomas
Jawabannya adalah Julia ! Itu tidak ada saat itu: bit.ly/julia_meta ... bersukacitalah! Julia mencakup semua poin penting yang terdaftar oleh @dsimcha, ditambah kinerja dan semua poin lainnya menjadi kenyataan saat Julia terus berkembang.
SalchiPapa

Jawaban:

15

Sebenarnya tidak ada perbedaan besar antara python dan ruby ​​setidaknya di tingkat ideologis. Untuk sebagian besar, mereka hanya memiliki rasa yang berbeda dari hal yang sama. Jadi, saya akan merekomendasikan untuk melihat mana yang lebih cocok dengan gaya pemrograman Anda.

Jason Baker
sumber
30
Jelas tidak ada hal yang sama. Tampilannya mirip di permukaan, tetapi jika Anda menggunakan fitur Ruby yang paling kuat, Anda memahami bahwa Python bukanlah tandingan. Sebagai contoh, cobalah menulis DSL di Ruby vs menulis satu Python, atau membuat fungsi, metode, kelas, dll. Pada waktu proses. Jauh lebih mudah di Ruby.
FelipeC
14
Tidak jarang Anda perlu melakukan metaprogramming, hanya saja jarang sekali dilakukan. Semua kecuali program yang paling sepele memiliki pola pengulangan yang tidak termasuk dalam alat pemfaktoran ulang yang biasa tetapi dapat segera dihentikan oleh metaprogramming.
Wayne Conrad
10
Ruby dan Python sangat berbeda bahkan pada ide yang mengatur desain mereka. Python mereka menginginkannya dan mudah-mudahan satu cara yang jelas untuk melakukan sesuatu. Itu umumnya membuat bahasanya tidak seekspresif Ruby, tetapi membuatnya lebih konsisten. Ruby berasal dari bahasa Perl yang memiliki banyak cara untuk melakukan sesuatu. Ruby juga membuat beberapa hal menjadi sangat mudah dan sebenarnya menyertakan ide anggota pribadi. Python di sisi lain paling banyak hanya membuat beberapa hal lebih sulit untuk dilakukan, jadi Anda harus lebih eksplisit (seperti menambahkan atau menimpa perilaku di kelas).
Sean Copenhaver
5
Anda mungkin harus melakukan kursus kilat di keduanya, tetapi untuk metaprogramming yang mudah, tampaknya Ruby lebih cocok. Saya tidak memiliki banyak pengalaman, jadi ambillah dengan sebutir garam.
Sean Copenhaver
7
Ruby dan Python hanya mirip dalam fakta bahwa mereka memberitakan "kode indah". Mereka hanya memiliki pandangan yang sangat berbeda tentang keindahan itu (yang menurut IMO bagus)
Gabi Purcaru
69

Saya telah membaca sedikit tentang Lisp dan saya ingin menemukan bahasa yang memungkinkan beberapa hal keren yang dilakukan Lisp, tetapi tanpa sintaks yang aneh, dll. Dari Lisp.

Bukankah kita semua.

perbedaan minimal antara kode dan data, gaya Lisp

Sayangnya, perbedaan minimal antara kode dan data serta sintaks "aneh" adalah konsekuensi satu sama lain.

Jika Anda ingin sintaks yang mudah dibaca, Anda memiliki Python. Namun, kode tidak direpresentasikan dalam salah satu struktur data bawaan yang umum digunakan. Gagal — seperti kebanyakan bahasa — di item # 1 dari daftar 'penting' Anda. Itu membuatnya sulit untuk memberikan bantuan yang berguna.

Anda tidak bisa memiliki semuanya. Ingat, Anda bukanlah orang pertama yang memiliki pikiran ini. Jika sesuatu seperti bahasa ideal Anda ada, kami semua akan menggunakannya. Karena dunia nyata tidak memenuhi cita-cita Anda, Anda harus memprioritaskan kembali daftar keinginan Anda. Bagian "penting" harus diatur ulang untuk mengidentifikasi apa yang benar - benar penting bagi Anda.

S.Lott
sumber
3
Saya telah menemukan bahwa banyak bahasa menerapkan makro mirip Lisp dalam sintaks non-Lispy dan yang berakhir terjadi adalah menulis makro di sana sangat sulit, karena tidak ada yang secara alami mengetahui struktur data di mana kode diwakili, sehingga menulis makro menjadi terlalu sulit dan tidak ada yang melakukannya.
pupeno
11
Orang-orang menganggap Lisp sulit dibaca karena mereka tidak terbiasa dengan sintaks. Saya menemukan Lisp lebih mudah dibaca daripada C # (tapi lebih sulit dari Python).
Jules
1
Saya sangat setuju dengan poinnya, tetapi pengalaman saya tentang Ruby dan Lisp menunjukkan bahwa yang pertama sama baiknya untuk metaprogramming karena tanpa tanda kurung. Alternatif lain yang mendekati bisa jadi TCL dan JavaScript tetapi saya tidak akan menyukai mereka karena alasan lain.
Dering
Dahulu kala ada bahasa yang disebut Dylan yang seharusnya persis seperti itu.
Friedrich
17

Sejujurnya, sejauh fasilitas metaprogramming berjalan, Ruby dan Python jauh lebih mirip daripada yang diakui oleh beberapa penganutnya. Ulasan kedua bahasa ini menawarkan perbandingan / ulasan yang cukup bagus:

Jadi, pilih saja satu berdasarkan beberapa kriteria. Mungkin Anda menyukai Rails dan ingin mempelajari kode itu. Mungkin SciPy adalah kesukaan Anda. Lihatlah ekosistem perpustakaan, komunitas, dll, dan pilih salah satu. Anda pasti tidak akan kehilangan beberapa metaprogramming nirwana berdasarkan pilihan Anda juga.

ars
sumber
entri blog itu tampaknya lebih berkaitan dengan preferensi pribadi (cukup adil tetapi keindahan ada di mata yang melihatnya), daripada metaprogramming - yang merupakan poin utama OP.
Dering
16

Penafian: Saya hanya mencoba-coba dalam salah satu bahasa, tetapi saya setidaknya memiliki program kerja kecil (tidak hanya skrip cepat, yang saya gunakan Perl, bash atau GNU make) di keduanya.

Ruby bisa sangat bagus untuk "multi paradigma" poin 3, karena Ruby bekerja keras untuk memudahkan pembuatan bahasa khusus domain. Misalnya, telusuri online dan lihat beberapa bit kode Ruby on Rails, dan beberapa bit kode Rake. Keduanya adalah Ruby, dan Anda dapat melihat kesamaannya, tetapi keduanya tidak terlihat seperti yang biasanya Anda anggap sebagai bahasa yang sama.

Bagi saya Python sedikit lebih dapat diprediksi (mungkin berkorelasi dengan poin 'bersih' dan 'waras' 2), tetapi saya tidak begitu tahu apakah itu karena bahasanya itu sendiri atau hanya itu biasanya digunakan oleh orang-orang dengan nilai yang berbeda . Saya belum pernah mencoba sihir mendalam dengan Python. Saya pasti akan mengatakan bahwa kedua bahasa dipikirkan dengan baik.

Keduanya mendapat skor baik dalam 1 dan 4. [Sunting: sebenarnya 1 cukup diperdebatkan - ada "eval" di keduanya, seperti yang umum dalam bahasa yang ditafsirkan, tetapi mereka hampir tidak murni secara konseptual. Anda dapat mendefinisikan closure, menetapkan metode ke objek, dan lainnya. Tidak yakin apakah ini berjalan sejauh yang Anda inginkan.]

Secara pribadi saya menganggap Ruby lebih menyenangkan, tetapi sebagian karena lebih mudah untuk mengalihkan pikiran tentang cara-cara keren untuk melakukan sesuatu. Saya sebenarnya lebih sering menggunakan Python. Terkadang Anda tidak ingin keren, Anda ingin melanjutkannya sehingga selesai sebelum tidur ...

Tak satu pun dari mereka sulit untuk dikerjakan, jadi Anda bisa memutuskan untuk melakukan tugas kecil Anda berikutnya di satu, dan satu setelah itu di yang lain. Atau ambil buku pengantar tentang masing-masing dari perpustakaan, baca sepintas keduanya dan lihat apa yang menarik bagi Anda.

Steve Jessop
sumber
15

Pernahkah Anda mempertimbangkan Smalltalk? Ini menawarkan sintaks yang sangat sederhana, jelas dan dapat diperluas dengan kemampuan reflektifitas dan introspeksi dan lingkungan pengembangan terintegrasi penuh yang memanfaatkan kemampuan tersebut. Lihatlah beberapa pekerjaan yang dilakukan di Squeak Smalltalk misalnya. Banyak peneliti yang menggunakan Squeak nongkrong di milis Squeak dan #squeak di freenode, jadi Anda bisa mendapatkan bantuan tentang masalah yang kompleks dengan sangat mudah.

Indikator lain dari relevansinya saat ini: ia berjalan pada platform apa pun yang ingin Anda beri nama (termasuk iPhone ); Gilad Bracha mendasarkan karyanya dalam bahasa Newspeak pada Squeak; tim V8 bekerja keras pada VM Smalltalk ; dan Dan Ingalls serta Randal Schwartz baru-baru ini kembali ke pekerjaan Smalltalk setelah bertahun-tahun di alam liar.

Semoga berhasil dengan pencarian Anda - beri tahu kami keputusan Anda pada akhirnya.

mykdavies
sumber
14

Lisp memenuhi semua kriteria Anda, termasuk kinerja, dan ini adalah satu-satunya bahasa yang tidak memiliki sintaks (aneh). Jika Anda menghindarinya atas dasar informasi yang sangat tidak benar / salah kepala dan akibatnya melewatkan pengalaman menggunakan misalnya Emacs + SLIME + CL, Anda akan melakukan tindakan merugikan yang besar bagi diri Anda sendiri.

pengguna23611
sumber
4
Atau Anda dapat mencoba Clojure, yang menurut saya sangat bagus.
pupeno
1
Sangat setuju. Jika Anda menginginkan kekuatan Lisp, selami saja dan dapatkan! Sebenarnya cukup mudah untuk membiasakan diri dengan orang tua; itu bukan masalah besar seperti yang dilihat kebanyakan orang.
Dan Burton
11

4 poin "penting" Anda mengarah ke Ruby dengan tepat, sedangkan 2 poin "agak penting" diatur oleh Python. Jadilah itu.

Neo
sumber
11

Anda sedang mendeskripsikan Ruby.

  • Metaprogramming yang bagus. Kemampuan untuk membuat kelas, metode, fungsi, dll. Pada waktu proses. Lebih disukai, perbedaan minimal antara kode dan data, gaya Lisp.

Sangat mudah untuk memperluas dan memodifikasi primitif yang ada saat runtime. Di ruby ​​semuanya adalah objek, string, integer, bahkan fungsi.

Anda juga dapat membuat pintasan untuk gula sintaksis, misalnya dengan class_eval .

  • Sintaks yang bagus, bersih, waras, dan semantik yang konsisten dan intuitif. Pada dasarnya bahasa modern yang dipikirkan dengan matang, menyenangkan untuk digunakan.

Ruby mengikuti prinsip tidak terlalu mengejutkan , dan ketika membandingkan kode Ruby vs kode yang setara dalam bahasa lain, banyak orang menganggapnya lebih "indah".

  • Berbagai paradigma. Tidak ada satu paradigma yang tepat untuk setiap proyek, atau bahkan setiap subproblem kecil dalam sebuah proyek.

Anda dapat mengikuti imperatif, berorientasi objek, fungsional, dan reflektif.

  • Bahasa menarik yang benar-benar memengaruhi cara berpikir seseorang tentang pemrograman.

Itu sangat subyektif, tetapi dari sudut pandang saya kemampuan untuk menggunakan banyak paradigma pada saat yang sama memungkinkan munculnya ide-ide yang sangat menarik.

Saya sudah mencoba Python dan itu tidak sesuai dengan poin penting Anda.

FelipeC
sumber
11
-1 Saya menggunakan Python dan sangat cocok, perbedaan antara Python dan Ruby terletak pada aspek lain. Fanboy-ish noisemaker, kamu.
gorsky
6
Banyak bicara tapi tidak bisa berjalan. Mau memberikan contoh dalam Python tentang menambahkan metode secara dinamis untuk mengatakan, kelas String?
FelipeC
6
@ John Itulah maksud saya; itu sangat rumit dan jelek (belum lagi tidak mungkin untuk kelas String). OTOH di Ruby sangat sederhana: "self.class.send (: define_method,: method_name) {method_code}"
FelipeC
2
Ruby mungkin mencoba untuk mengikuti pols, tapi saya tidak akan mengatakan itu tidak . Misalnya, lambda/ Proc.newmess telah disebut "perilaku mengejutkan" dan "sangat berlawanan dengan intuisi" di SO. :-) Bahasa apapun sebesar dan serumit Ruby pasti memiliki area yang membingungkan.
Ken
2
@Token berikut adalah contoh monkey-patching Stringdi Ruby untuk tujuan metaprogramming: coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/… . Subclassing tidak akan berhasil; namun, fungsi dua argumen sederhana akan.
P Shved
8

Bandingkan contoh kode yang melakukan hal yang sama (gabung dengan deskripsi item tidak kosong baris baru dari myListdaftar) dalam berbagai bahasa (bahasa disusun dalam urutan abjad terbalik):

Ruby :

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

Atau

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

Python :

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

Atau

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

Perl :

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

Atau

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")

Berikut panduan Io .

J.F. Sebastian
sumber
3
(format nil "~ {~ a ~ ^ ~% ~}" (hapus nil (mapcar # 'description mylist)))
Rainer Joswig
bagus, tapi di mana metaprogramming di sini? sepertinya ini adalah gaya yang sedikit fungsional, terkait dengan pertanyaan tersebut.
Dering
6

Ruby akan lebih baik daripada Lisp dalam hal menjadi "mainstream" (apa pun yang benar-benar berarti, tapi salah satu perhatian realistis adalah bagaimana mudahnya akan menemukan jawaban atas pertanyaan Anda pada pemrograman Lisp jika Anda pergi dengan itu.) Dalam hal apapun , Menurut saya Ruby sangat mudah diambil. Dalam jumlah waktu yang sama yang saya habiskan untuk pertama kali belajar Python (atau bahasa lain dalam hal ini), saya segera menulis kode yang lebih baik dengan jauh lebih efisien daripada yang pernah saya miliki sebelumnya. Itu hanya pendapat satu orang; ambillah dengan sebutir garam, kurasa. Saya tahu lebih banyak tentang Ruby pada saat ini daripada yang saya lakukan Python atau Lisp, tetapi Anda harus tahu bahwa saya adalah orang Python cukup lama sebelum saya beralih.

Lisp jelas cukup keren dan layak untuk dilihat; seperti yang Anda katakan, ukuran komunitas, dll. dapat berubah cukup cepat. Meski begitu, ukuran itu sendiri tidak sepenting kualitas komunitas. Misalnya, #ruby-langsaluran tersebut masih diisi oleh beberapa orang yang sangat pintar. Lisp tampaknya juga menarik beberapa orang yang sangat pintar. Saya tidak dapat berbicara banyak tentang komunitas Python karena saya tidak memiliki banyak pengalaman langsung, tetapi terkadang tampaknya "terlalu besar". (Saya ingat orang-orang bersikap cukup kasar pada saluran IRC mereka, dan dari apa yang saya dengar dari teman-teman yang benar-benar menyukai Python, itu tampaknya menjadi aturan daripada pengecualian.)

Bagaimanapun, beberapa sumber daya yang mungkin berguna bagi Anda adalah:

1) Seri Pemrograman Ruby Pragmatic Programmer Ruby ( http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming ) - tidak gratis, tetapi episode-episode selanjutnya cukup menarik. (Kode ini gratis, jika Anda ingin mengunduhnya dan melihat apa yang akan Anda pelajari.)

2) Tentang Lisp oleh Paul Graham ( http://www.paulgraham.com/onlisp.html ). Ini agak tua, tapi ini klasik (dan dapat diunduh secara gratis).

Benjamin Oakes
sumber
5

Saya menggunakan Python untuk banyak proyek dan menurut saya Python menyediakan semua fitur yang Anda minta.

penting:

  1. Metaprogramming: Python mendukung metaclass dan runtime class / method generation dll
  2. Sintaks: Yah, itu subjektif. Saya suka sintaks Pythons karena kesederhanaannya, tetapi beberapa orang mengeluh bahwa Python sensitif terhadap spasi.
  3. Paradigma: Python mendukung pemrograman fungsional prosedural, berorientasi objek dan dasar.
  4. Saya pikir Python memiliki gaya berorientasi yang sangat praktis, itu sangat menginspirasi saya.

Agak penting:

  1. Kinerja: Ini adalah bahasa skrip. Tetapi menulis ekstensi C untuk Python adalah praktik pengoptimalan yang umum.
  2. Dokumentasi: Saya tidak bisa mengeluh. Ini tidak sedetail yang mungkin diketahui seseorang dari Jawa, tapi cukup bagus.

Sebagai mahasiswa pascasarjana, Anda mungkin ingin membaca makalah ini yang mengklaim bahwa Python adalah semua yang dibutuhkan ilmuwan . Sayangnya saya tidak bisa membandingkan Python dengan Ruby, karena saya tidak pernah menggunakan bahasa itu.

Salam, Dennis

xardias
sumber
3
Python tidak peka spasi. Ini peka terhadap lekukan.
jfs
5

@Jason I masing-masing tidak setuju. Ada perbedaan yang membuat Ruby lebih unggul dari Python untuk metaprogramming - filosofis dan pragmatis. Sebagai permulaan, Ruby mendapatkan hak warisan dengan Single Inheritance dan Mixins . Dan ketika datang ke metaprogramming Anda hanya perlu memahami bahwa itu semua tentang diri . Perbedaan kanonik di sini adalah bahwa di Ruby Anda memiliki akses ke objek diri saat runtime - dengan Python Anda tidak memilikinya!

Tidak seperti Python, di Ruby tidak ada fase kompilasi atau runtime yang terpisah. Di Ruby, setiap baris kode dieksekusi terhadap objek diri tertentu . Di Ruby, setiap kelas mewarisi dari objek dan metaclass tersembunyi. Ini menghasilkan beberapa dinamika yang menarik:

class Ninja
  def rank
    puts "Orange Clan"
  end

  self.name #=> "Ninja"
end

Menggunakan self.name mengakses metode nama metaclass kelas Ninja untuk mengembalikan nama kelas Ninja. Apakah bunga metaprogramming begitu indah dengan Python? Saya sangat meragukannya!

Eric Davidson
sumber
4

Nah, jika Anda tidak menyukai sintaks cadel, mungkin assembler adalah cara yang tepat. :-)

Ini pasti memiliki perbedaan minimal antara kode dan data, multi-paradigma (atau mungkin itu bukan-paradigma) dan itu adalah pengalaman yang memperluas pikiran (jika membosankan) baik dalam hal pembelajaran dan trik yang dapat Anda lakukan.

rickardg
sumber
Saya pikir saya telah melakukan lebih banyak pemrograman meta dalam bahasa assembly daripada bahasa lain. Kode adalah data dan data dapat mencoba menjadi kode. Dan data tidak ditandatangani atau tidak, itu opcode yang memutuskan.
Nosredna
1
Saya memiliki kode assembler yang dapat Anda klaim sebagai OO. Ia memiliki hal-hal yang terlihat seperti metode - Anda memanggil salah satu yang bergantung pada "kelas".
justintime
4

Io memenuhi semua poin "Penting" Anda. Saya tidak berpikir ada bahasa yang lebih baik di luar sana untuk melakukan peretasan meta gila.

frigolitmonster
sumber
Terima kasih untuk itu, tidak mengetahuinya. Terlihat menyenangkan pada pandangan pertama, mungkin banyak (()) tapi bagaimanapun juga. Semoga saya bisa meluangkan waktu untuk melihat-lihat, segera.
flq
3

salah satu yang mendukung peretasan metaprogramming yang tidak dapat dilakukan dalam bahasa yang dikompilasi secara statis

Saya ingin sekali menemukan bahasa yang memungkinkan beberapa hal keren yang dilakukan Lisp

Lisp dapat dikompilasi.

RHSeeger
sumber
3

Apakah Anda mencoba Rebol?

Segera
sumber
3

Jawaban saya bukanlah keduanya. Saya tahu kedua bahasa tersebut, mengambil kelas di Ruby dan telah memprogram dengan python selama beberapa tahun. Lisp pandai metaprogramming karena fakta bahwa satu-satunya tujuan adalah untuk mengubah daftar, kode sumbernya sendiri hanyalah daftar token sehingga metaprogramming itu alami. Tiga bahasa yang paling saya suka untuk jenis hal ini adalah Rebol, Forth, dan Factor. Rebol adalah bahasa dialek yang sangat kuat yang mengambil kode dari aliran inputnya, menjalankan ekspresi terhadapnya dan mengubahnya menggunakan aturan yang ditulis dalam bahasa tersebut. Sangat ekspresif dan sangat pandai dalam bahasa. Factor dan Forth kurang lebih sepenuhnya terpisah dari sintaksis dan Anda memprogramnya dengan mendefinisikan dan memanggil kata-kata. Mereka umumnya kebanyakan ditulis dalam bahasa mereka sendiri. Anda tidak menulis lamaran dalam pengertian tradisional, Anda memperluas bahasa dengan menulis kata-kata Anda sendiri untuk mendefinisikan aplikasi khusus Anda. Factor bisa sangat bagus karena memiliki banyak fitur yang hanya saya lihat di smalltalk untuk mengevaluasi dan bekerja dengan kode sumber. Ruang kerja yang sangat bagus, dokumen interaktif, dll.

ToddB
sumber
2

Tidak banyak yang memisahkan Python dan Ruby. Menurut saya komunitas Python lebih besar dan lebih dewasa daripada komunitas Ruby, dan itu sangat penting bagi saya. Ruby adalah bahasa yang lebih fleksibel, yang berdampak positif dan negatif. Namun, saya yakin akan ada banyak orang yang membahas kedua bahasa ini secara mendetail, jadi saya akan memberikan opsi ketiga ke dalam ring. Bagaimana dengan JavaScript?

JavaScript pada awalnya dirancang untuk menjadi Skema untuk web, dan berbasis prototipe, yang merupakan keunggulan dari Python dan Ruby dalam hal multi-paradigma dan metaprogramming. Sintaksnya tidak sebaik dua lainnya, tetapi ini mungkin bahasa yang paling banyak digunakan, dan kinerjanya semakin baik setiap hari.

Jim
sumber
2

Jika Anda menyukai konsep kode-is-data gaya cadel, tetapi tidak menyukai sintaksis Lispy, mungkin Prolog akan menjadi pilihan yang baik.

Apakah itu memenuhi syarat sebagai "menyenangkan untuk digunakan, bahasa modern", saya akan menyerahkan kepada orang lain untuk menilai. ;-)

JesperE
sumber
2

Ruby adalah pilihan saya setelah menjelajahi Python, Smalltalk, dan Ruby.

ryw
sumber
2

Bagaimana dengan OCaml?

Fitur OCaml: sistem tipe statis, inferensi tipe, polimorfisme parametrik, rekursi ekor, pencocokan pola, penutupan leksikal kelas satu, functor (modul parametrik), penanganan pengecualian, dan pengumpulan sampah otomatis generasi inkremental.

Saya pikir itu memenuhi yang berikut:

Penting:

  1. Sintaks yang bagus, bersih, waras, dan semantik yang konsisten dan intuitif. Pada dasarnya bahasa modern yang dipikirkan dengan matang, menyenangkan untuk digunakan.
  2. Berbagai paradigma. Tidak ada satu paradigma yang tepat untuk setiap proyek, atau bahkan setiap subproblem kecil dalam sebuah proyek.
  3. Bahasa menarik yang benar-benar memengaruhi cara berpikir seseorang tentang pemrograman.

Agak penting:

  1. Performa. Alangkah baiknya jika kinerjanya bagus, tetapi ketika kinerja adalah prioritas nyata, saya akan menggunakan D.
  2. Didokumentasikan dengan baik.
Robert Vuković
sumber
OCaml memungkinkan Anda untuk membuat kelas / metode saat runtime? Bagaimana cara kerjanya?
Jason Creighton
Saya baru saja membaca tentang OCaml dan mungkin tidak dapat membuat sesuatu pada saat runtime jadi saya telah menghapusnya.
Robert Vuković
2

Saya telah menggunakan Python sedikit sekali, tetapi lebih banyak Ruby. Namun saya berpendapat mereka berdua memberikan apa yang Anda minta.

Jika saya melihat keempat poin Anda, maka Anda setidaknya dapat memeriksa: http://www.iolanguage.com/

Dan Mozart / Oz mungkin menarik juga untuk Anda: http://mozart.github.io/

Salam Friedrich

Friedrich
sumber
1

Untuk sintaks gaya python dan makro mirip cadel (makro yang merupakan kode nyata) dan DSL yang baik, lihat konvergen .

Kasprzol
sumber
1

Saya tidak yakin bahwa Python akan memenuhi semua hal yang Anda inginkan (terutama poin tentang perbedaan minimal antara kode dan data), tetapi ada satu argumen yang mendukung python. Ada sebuah proyek di luar sana yang memudahkan Anda memprogram ekstensi untuk python di D, sehingga Anda bisa mendapatkan yang terbaik dari kedua dunia tersebut. http://pyd.dsource.org/celerid.html

Mauli
sumber
1

Jika Anda menyukai mawar, Anda harus belajar hidup dengan duri :)

AgentOrange
sumber
1

Saya akan merekomendasikan Anda menggunakan Ruby.

Ketika saya pertama kali mempelajarinya, saya merasa sangat mudah untuk memahaminya.

Mardix
sumber
1

Jangan mencampurkan Bahasa Pemrograman Ruby dengan Implementasi Ruby, karena berpikir bahwa utas POSIX tidak dimungkinkan di ruby.

Anda dapat dengan mudah mengkompilasi dengan dukungan pthread, dan ini sudah mungkin pada saat utas ini dibuat , jika Anda mengampuni permainan kata-kata tersebut.

Jawaban atas pertanyaan ini sederhana. Jika Anda suka cadel, Anda mungkin lebih suka ruby. Atau, apapun yang Anda suka.

nonanonim
sumber
0

Saya menyarankan agar Anda mencoba kedua bahasa dan memilih salah satu yang menarik bagi Anda. Python dan Ruby dapat melakukan apa yang Anda inginkan.

Baca juga utas ini .

Alexander Kojevnikov
sumber
0

Gunakan JS, cukup periksa AJS (Sintaks JavaScript Alternatif) di github saya http://github.com/visionmedia, ini akan memberi Anda beberapa penutupan yang tampak lebih bersih dll: D

TJ Holowaychuk
sumber
0

Mengenai poin utama Anda (meta-pemrograman): Groovy versi 1.6 memiliki pemrograman AST (Abstract Syntax Tree) bawaan sebagai fitur standar dan terintegrasi. Ruby memiliki RubyParser, tetapi ini adalah add-on.

groovy
sumber