Python so với Ruby để lập trình siêu hình [đã đóng]


90

Tôi hiện chủ yếu là một lập trình viên D và đang tìm cách thêm một ngôn ngữ khác vào hộp công cụ của mình, tốt nhất là một ngôn ngữ hỗ trợ các bản hack lập trình siêu mẫu mà không thể thực hiện được bằng một ngôn ngữ được biên dịch tĩnh như D.

Tôi đã đọc một chút về Lisp và tôi muốn tìm một ngôn ngữ cho phép một số nội dung thú vị mà Lisp thực hiện, nhưng không có cú pháp lạ, v.v. của Lisp. Tôi không muốn bắt đầu một cuộc chiến ngôn ngữ và tôi chắc chắn rằng cả Ruby và Python đều có sự đánh đổi của chúng, vì vậy tôi sẽ liệt kê những gì quan trọng đối với cá nhân tôi. Vui lòng cho tôi biết liệu Ruby, Python hay một số ngôn ngữ khác sẽ phù hợp nhất với tôi.

Quan trọng:

  1. Lập trình ẩn dụ tốt. Khả năng tạo các lớp, phương thức, hàm, v.v. trong thời gian chạy. Tốt hơn là, sự khác biệt tối thiểu giữa mã và dữ liệu, kiểu Lisp.
  2. Đẹp, rõ ràng, cú pháp lành mạnh và ngữ nghĩa nhất quán, trực quan. Về cơ bản là một ngôn ngữ hiện đại được suy nghĩ kỹ lưỡng, thú vị khi sử dụng.
  3. Nhiều mô hình. Không có mô hình nào phù hợp với mọi dự án, hoặc thậm chí mọi vấn đề nhỏ trong dự án.
  4. Một ngôn ngữ thú vị thực sự ảnh hưởng đến cách người ta nghĩ về lập trình.

Hơi quan trọng:

  1. Hiệu suất. Sẽ rất tuyệt nếu hiệu suất là tốt, nhưng khi hiệu suất là một ưu tiên thực sự, tôi sẽ sử dụng D để thay thế.
  2. Được ghi chép đầy đủ.

Không quan trọng:

  1. Quy mô cộng đồng, tính khả dụng của thư viện, v.v. Không có điều nào trong số này là đặc điểm của ngôn ngữ và tất cả đều có thể thay đổi rất nhanh.
  2. Có việc làm. Tôi không phải là một lập trình viên chuyên nghiệp, toàn thời gian. Tôi là một sinh viên tốt nghiệp và lập trình có liên quan rõ ràng đến nghiên cứu của tôi.
  3. Bất kỳ tính năng nào được thiết kế chủ yếu với các dự án rất lớn do hàng triệu con khỉ mã làm việc trong tâm trí.

1
+1 Đối với một câu hỏi thường được hỏi nhiều.
Triptych

Đáng buồn thay, tất cả các câu trả lời được đánh giá cao về cơ bản đều nói "điều đó phụ thuộc" và các câu trả lời thấp hơn về cơ bản là cuộc chiến giữa Python và Ruby.
Dan Burton

Bạn đã xem xét Clojure?
Mark Thomas

Câu trả lời là Julia ! Nó chỉ không tồn tại hồi đó: bit.ly/julia_meta ... vui mừng! Julia bao gồm tất cả các điểm quan trọng được liệt kê bởi @dsimcha, cộng với hiệu suất và tất cả các điểm khác đang trở thành sự thật khi Julia tiếp tục trưởng thành.
SalchiPapa

Câu trả lời:


15

Không thực sự có sự khác biệt lớn giữa python và ruby ​​ít nhất là ở cấp độ hệ tư tưởng. Phần lớn, chúng chỉ là những hương vị khác nhau của cùng một thứ. Vì vậy, tôi khuyên bạn nên xem cái nào phù hợp với phong cách lập trình của bạn hơn.


30
Chắc chắn là không có điều tương tự. Bề ngoài trông giống nhau, nhưng một trong những bạn sử dụng các tính năng mạnh mẽ nhất của Ruby, bạn hiểu rằng Python không thể sánh được. Ví dụ, hãy thử viết một DSL bằng Ruby so với viết một Python hoặc tạo hàm, phương thức, lớp, v.v. trong thời gian chạy. Nó dễ hiểu hơn nhiều trong Ruby.
FelipeC

14
Không hiếm khi bạn cần phải lập trình siêu mẫu, chỉ hiếm khi nó được thực hiện. Tất cả, trừ chương trình tầm thường nhất đều có các mẫu lặp lại không phù hợp với các công cụ tái cấu trúc thông thường nhưng có thể dễ dàng bị loại bỏ bằng cách lập trình siêu mẫu.
Wayne Conrad

10
Ruby và Python rất khác nhau ngay cả ở những ý tưởng chi phối thiết kế của chúng. Python họ muốn một và hy vọng một cách rõ ràng để thực hiện mọi việc. Điều đó nói chung làm cho ngôn ngữ không biểu cảm như Ruby, nhưng nó làm cho nó nhất quán hơn. Ruby xuất hiện nhiều hơn một chút từ Perl way of things, nơi có nhiều cách để thực hiện mọi thứ. Ngoài ra, Ruby làm cho một số thứ trở nên siêu dễ dàng và thực sự bao gồm ý tưởng về các thành viên riêng tư. Mặt khác, Python chỉ làm cho một số thứ khó làm hơn, vì vậy bạn phải rõ ràng hơn (như thêm hoặc ghi đè hành vi trên các lớp).
Sean Copenhaver

5
Bạn có thể nên thực hiện một khóa học về sự cố trong cả hai, nhưng để dễ dàng lập trình siêu thị, có vẻ như Ruby phù hợp hơn. Tuy nhiên, tôi không có nhiều kinh nghiệm, vì vậy hãy coi đó là hạt muối.
Sean Copenhaver

7
Ruby và Python chỉ giống nhau ở chỗ chúng rao giảng "mã đẹp". Họ chỉ có quan điểm hoàn toàn khác nhau về vẻ đẹp mà điều (mà IMO là tốt)
Gabi Purcaru

69

Tôi đã đọc một chút về Lisp và tôi muốn tìm một ngôn ngữ cho phép một số nội dung thú vị mà Lisp thực hiện, nhưng không có cú pháp lạ, v.v. của Lisp.

Không phải tất cả chúng ta.

sự khác biệt tối thiểu giữa mã và dữ liệu, kiểu Lisp

Đáng buồn thay, sự khác biệt tối thiểu giữa mã và dữ liệu và cú pháp "lạ" là hệ quả của nhau.

Nếu bạn muốn cú pháp dễ đọc, bạn có Python. Tuy nhiên, mã này không được biểu diễn trong bất kỳ cấu trúc dữ liệu tích hợp nào thường được sử dụng. Nó không thành công — như hầu hết các ngôn ngữ — ở mục số 1 trong danh sách 'quan trọng' của bạn. Điều đó gây khó khăn cho việc cung cấp trợ giúp hữu ích.

Bạn không thể có tất cả. Hãy nhớ rằng, bạn không phải là người đầu tiên có suy nghĩ này. Nếu thứ gì đó giống như ngôn ngữ lý tưởng của bạn tồn tại, tất cả chúng tôi sẽ sử dụng nó. Vì thế giới thực không phù hợp với lý tưởng của bạn, bạn sẽ phải ưu tiên lại danh sách mong muốn của mình. Phần "quan trọng" phải được sắp xếp lại để xác định điều gì thực sự quan trọng đối với bạn.


3
Tôi đã phát hiện ra rằng nhiều ngôn ngữ triển khai macro giống Lisp trong các cú pháp không phải Lispy và điều cuối cùng xảy ra là việc viết macro ở đó rất khó, bởi vì không ai tự nhiên biết cấu trúc dữ liệu mà mã được biểu diễn, do đó viết macro trở nên quá khó và không ai làm điều đó.
pupeno 27/10/08

11
Mọi người thấy Lisp khó đọc vì họ không quen với cú pháp. Tôi thấy Lisp dễ đọc hơn nhiều so với C # (nhưng khó hơn Python).
Jules

1
Tôi phần lớn đồng ý với quan điểm này, nhưng kinh nghiệm của tôi về cả Ruby và Lisp cho thấy rằng cái trước rất tốt cho việc lập trình siêu thị vì nó không có dấu ngoặc đơn. Các lựa chọn thay thế khác sắp xảy ra có thể là TCL và JavaScript nhưng tôi sẽ không ưu tiên chúng vì những lý do khác.
inger

Từ lâu, có một ngôn ngữ gọi là Dylan, chính xác là như vậy.
Friedrich

17

Thành thật mà nói, theo như các phương tiện lập trình siêu hình, Ruby và Python giống nhau hơn rất nhiều so với một số ứng dụng quen thuộc của chúng như thừa nhận. Đánh giá về cả hai ngôn ngữ này cung cấp một so sánh / đánh giá khá tốt:

Vì vậy, chỉ cần chọn một dựa trên một số tiêu chí. Có thể bạn thích Rails và muốn nghiên cứu mã đó. Có lẽ SciPy là thứ của bạn. Nhìn vào hệ sinh thái của thư viện, cộng đồng, v.v. và chọn một. Bạn chắc chắn sẽ không thất vọng với một số niết bàn được lập trình siêu hình dựa trên sự lựa chọn của bạn.


mục nhập blog đó dường như liên quan nhiều hơn đến sở thích cá nhân (đủ công bằng nhưng vẻ đẹp là trong mắt người xem), hơn là lập trình ẩn dụ - đó là điểm chính của OP.
inger 14/09/11

16

Tuyên bố từ chối trách nhiệm: Tôi chỉ sử dụng một trong hai ngôn ngữ, nhưng ít nhất tôi đã viết các chương trình làm việc nhỏ (không chỉ là các tập lệnh nhanh, mà tôi sử dụng Perl, bash hoặc GNU make) cho cả hai.

Ruby có thể thực sự tốt cho "đa mô hình" điểm 3, bởi vì nó hoạt động chăm chỉ để giúp dễ dàng tạo các ngôn ngữ dành riêng cho miền. Ví dụ: duyệt trực tuyến và xem một vài bit mã Ruby on Rails và một vài bit mã Rake. Cả hai đều là Ruby và bạn có thể thấy những điểm tương đồng, nhưng chúng không giống những gì bạn thường nghĩ về cùng một ngôn ngữ.

Đối với tôi, Python có vẻ dễ dự đoán hơn một chút (có thể tương quan với điểm 2 'sạch' và 'lành mạnh'), nhưng tôi thực sự không biết liệu đó là do bản thân ngôn ngữ hay chỉ vì nó thường được sử dụng bởi những người có các giá trị khác nhau . Tôi chưa bao giờ thử sử dụng phép thuật sâu trong Python. Tôi chắc chắn sẽ nói rằng cả hai ngôn ngữ đều được suy nghĩ kỹ càng.

Cả hai đều đạt điểm cao ở 1 và 4. [Chỉnh sửa: thực sự là 1 khá đáng tranh cãi - có "eval" trong cả hai, như phổ biến trong các ngôn ngữ thông dịch, nhưng chúng hầu như không thuần túy về mặt khái niệm. Bạn có thể xác định các bao đóng, gán các phương thức cho các đối tượng và những gì khác. Không chắc liệu điều này có đi xa như bạn muốn hay không.]

Cá nhân tôi thấy Ruby vui hơn, nhưng một phần đó là vì nó dễ bị phân tâm khi nghĩ ra những cách hay ho để làm mọi việc. Tôi thực sự đã sử dụng Python nhiều hơn. Đôi khi bạn không muốn mát mẻ, bạn muốn tiếp tục với nó vì vậy nó được thực hiện trước khi đi ngủ ...

Không ai trong số họ là khó để tham gia, vì vậy bạn có thể quyết định thực hiện nhiệm vụ nhỏ tiếp theo của mình trong một và nhiệm vụ sau đó trong nhiệm vụ khác. Hoặc chọn một cuốn sách giới thiệu về từng cuốn từ thư viện, đọc lướt qua cả hai và xem bạn thu hút được điều gì.


15

Bạn đã coi Smalltalk chưa? Nó cung cấp một cú pháp rất đơn giản, rõ ràng và có thể mở rộng với khả năng phản xạ và xem xét nội tâm và một môi trường phát triển tích hợp đầy đủ để tận dụng những khả năng đó. Ví dụ, hãy xem một số công việc đang được thực hiện trong Squeak Smalltalk . Rất nhiều nhà nghiên cứu sử dụng Squeak đã tìm thấy danh sách gửi thư Squeak và #squeak trên freenode, vì vậy bạn có thể nhận được trợ giúp về các vấn đề phức tạp rất dễ dàng.

Các chỉ số khác về mức độ liên quan hiện tại của nó: nó chạy trên bất kỳ nền tảng nào bạn muốn đặt tên (bao gồm cả iPhone ); Gilad Bracha đang dựa trên tác phẩm Báo chí của mình trên Squeak; nhóm V8 đã cắt răng của họ trên máy ảo Smalltalk ; và Dan Ingalls và Randal Schwartz gần đây đã trở lại công việc Smalltalk sau nhiều năm sống ở vùng hoang dã.

Chúc bạn may mắn với tìm kiếm của mình - hãy cho chúng tôi biết cuối cùng thì bạn quyết định điều gì.


14

Lisp đáp ứng tất cả các tiêu chí của bạn, bao gồm cả hiệu suất và nó là ngôn ngữ duy nhất không có cú pháp (lạ). Nếu bạn trốn tránh nó trên cơ sở thiếu thông tin / sai lầm đáng kinh ngạc như vậy và do đó bỏ lỡ trải nghiệm sử dụng, ví dụ: Emacs + SLIME + CL, bạn sẽ tự làm mình trở thành kẻ bất lương.


4
Hoặc bạn có thể thử Clojure, mình thấy rất hay.
pupeno 27/10/08

1
Rất đồng ý. Nếu bạn muốn sức mạnh của Lisp, chỉ cần đi sâu vào và có nó! Nó thực sự khá dễ dàng để làm quen với parens; chúng không phải là một vấn đề lớn như hầu hết mọi người làm cho chúng ra.
Dan Burton

11

4 điểm "quan trọng" của bạn dẫn đến Ruby một cách chính xác, trong khi 2 điểm "hơi quan trọng" do Python cai trị. Như chỉ thị.


11

Bạn đang mô tả Ruby.

  • Lập trình ẩn dụ tốt. Khả năng tạo các lớp, phương thức, hàm, v.v. trong thời gian chạy. Tốt hơn là, sự khác biệt tối thiểu giữa mã và dữ liệu, kiểu Lisp.

Rất dễ dàng để mở rộng sửa đổi các nguyên thủy hiện có trong thời gian chạy. Trong ruby, mọi thứ là một đối tượng, chuỗi, số nguyên, thậm chí cả hàm.

Bạn cũng có thể tạo các phím tắt cho đường cú pháp, ví dụ với class_eval .

  • Đẹp, rõ ràng, cú pháp lành mạnh và ngữ nghĩa nhất quán, trực quan. Về cơ bản là một ngôn ngữ hiện đại được suy nghĩ kỹ lưỡng, thú vị khi sử dụng.

Ruby tuân theo nguyên tắc ít gây ngạc nhiên hơn , và khi so sánh mã Ruby với mã tương đương trong ngôn ngữ khác, nhiều người cho rằng nó "đẹp" hơn.

  • Nhiều mô hình. Không có mô hình nào phù hợp với mọi dự án, hoặc thậm chí mọi vấn đề nhỏ trong dự án.

Bạn có thể làm theo mệnh lệnh, hướng đối tượng, chức năng và phản chiếu.

  • Một ngôn ngữ thú vị thực sự ảnh hưởng đến cách người ta nghĩ về lập trình.

Đó là điều rất chủ quan, nhưng theo quan điểm của tôi, khả năng sử dụng nhiều mô hình cùng lúc cho phép tạo ra những ý tưởng rất thú vị.

Tôi đã thử Python và nó không phù hợp với những điểm quan trọng của bạn.


11
-1 Tôi đang sử dụng Python và nó hoàn toàn phù hợp, sự khác biệt giữa Python và Ruby nằm ở các khía cạnh khác. Fanboy-ish noisemaker, bạn đang có.
gorsky

6
Nói nhiều nhưng không đi bộ. Bạn muốn cung cấp một ví dụ bằng Python về việc thêm động một phương thức, chẳng hạn như lớp String?
FelipeC

6
@john Đó chính xác là quan điểm của tôi; nó rất phức tạp và xấu xí (chưa kể là không thể đối với lớp String). OTOH trong Ruby rất đơn giản: "self.class.send (: define_method,: method_name) {method_code}"
FelipeC

2
Ruby có thể cố gắng làm theo PoLS, nhưng tôi sẽ không nói điều đó . Ví dụ, lambda/ Proc.newmess đã được gọi là "hành vi đáng ngạc nhiên" và "rất phản trực giác" ở đây trên SO. :-) Bất kỳ ngôn ngữ nào lớn và phức tạp như Ruby đều có những chỗ khó hiểu như vậy.
Ken

2
@Token đây là một ví dụ về việc vá lỗi khỉ Stringtrong Ruby cho mục đích lập trình siêu hình: coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/… . Phân lớp sẽ không làm được; tuy nhiên, một hàm hai đối số đơn giản sẽ.
P Shved

8

So sánh các ví dụ mã làm điều tương tự (kết hợp với dòng mô tả không trống dòng mới của các mục từ myListdanh sách) bằng các ngôn ngữ khác nhau (các ngôn ngữ được sắp xếp theo thứ tự bảng chữ cái ngược lại):

Ruby :

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

Hoặc là

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

Python :

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

Hoặc là

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

Perl :

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

Hoặc là

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

Đây là một hướng dẫn Io .


3
(định dạng nil "~ {~ a ~ ^ ~% ~}" (xóa nil (mapcar # 'description mylist)))
Rainer Joswig 16/10/10

hay đấy, nhưng lập trình ẩn ở đây là ở đâu? nó dường như là một số phong cách hơi chức năng, liên quan từ xa đến câu hỏi.
inger

6

Ruby sẽ tốt hơn Lisp về mặt "chính thống" (bất kể điều đó thực sự có nghĩa là gì, nhưng một mối quan tâm thực tế là việc tìm câu trả lời cho các câu hỏi của bạn về lập trình Lisp sẽ dễ dàng như thế nào nếu bạn đồng ý với điều đó.) , Tôi thấy Ruby rất dễ lấy. Trong cùng khoảng thời gian mà tôi đã dành để học Python lần đầu tiên (hoặc các ngôn ngữ khác cho vấn đề đó), tôi đã sớm viết mã tốt hơn hiệu quả hơn nhiều so với trước đây. Đó chỉ là ý kiến ​​của một người; tôi đoán nó với một hạt muối. Tôi biết nhiều hơn về Ruby vào thời điểm này so với Python hoặc Lisp, nhưng bạn nên biết rằng tôi đã là một người sử dụng Python một thời gian trước khi chuyển sang.

Lisp chắc chắn khá thú vị và đáng để xem xét; như bạn đã nói, quy mô của cộng đồng, v.v. có thể thay đổi khá nhanh. Điều đó đang được nói, bản thân quy mô không quan trọng bằng chất lượng của cộng đồng. Ví dụ: #ruby-langkênh vẫn có một số người cực kỳ thông minh. Lisp dường như cũng thu hút một số người thực sự thông minh. Tôi không thể nói nhiều về cộng đồng Python vì tôi không có nhiều kinh nghiệm trực tiếp, nhưng đôi khi nó có vẻ "quá lớn". (Tôi nhớ mọi người khá thô lỗ trên kênh IRC của họ và từ những gì tôi nghe được từ những người bạn thực sự yêu thích Python, đó dường như là quy tắc hơn là ngoại lệ.)

Dù sao, một số tài nguyên mà bạn có thể thấy hữu ích là:

1) Loạt chương trình lập trình viên thực dụng Ruby Metaprogramming ( http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming ) - không miễn phí, nhưng các tập sau khá hấp dẫn. (Mã này miễn phí, nếu bạn muốn tải xuống và xem những gì bạn đang học.)

2) Trên Lisp của Paul Graham ( http://www.paulgraham.com/onlisp.html ). Nó hơi cũ, nhưng nó là một phiên bản cổ điển (và có thể tải xuống miễn phí).


5

Tôi đang sử dụng Python cho nhiều dự án và tôi nghĩ Python cung cấp tất cả các tính năng mà bạn yêu cầu.

quan trọng:

  1. Siêu lập trình: Python hỗ trợ siêu kính và tạo lớp / phương thức thời gian chạy, v.v.
  2. Cú pháp: Đó là cách nào đó mang tính chủ quan. Tôi thích cú pháp Pythons vì sự đơn giản của nó, nhưng một số người phàn nàn rằng Python nhạy cảm với khoảng trắng.
  3. Mô hình: Python hỗ trợ lập trình thủ tục, hướng đối tượng và chức năng cơ bản.
  4. Tôi nghĩ Python có phong cách định hướng rất thực tế, nó rất truyền cảm hứng cho tôi.

Hơi quan trọng:

  1. Hiệu suất: Đó là một ngôn ngữ kịch bản. Nhưng viết phần mở rộng C cho Python là một thực tiễn tối ưu hóa phổ biến.
  2. Tài liệu: Tôi không thể phàn nàn. Nó không quá chi tiết như ai đó có thể biết từ Java, nhưng nó đủ tốt.

Khi bạn là sinh viên tốt nghiệp, bạn có thể muốn đọc bài báo này tuyên bố rằng Python là tất cả những gì một nhà khoa học cần . Thật không may, tôi không thể so sánh Python với Ruby, vì tôi chưa bao giờ sử dụng ngôn ngữ đó.

Trân trọng, Dennis


3
Python không nhạy cảm với khoảng trắng Nó nhạy cảm với thụt đầu dòng.
jfs 28/12/08

5

@Jason Tôi tương ứng không đồng ý. Có những điểm khác biệt khiến Ruby vượt trội hơn Python về lập trình siêu hình - cả triết học và thực dụng. Đối với người mới bắt đầu, Ruby được quyền thừa kế với Single Inheritance và Mixins . Và khi nói đến siêu lập trình, bạn chỉ cần hiểu rằng đó là tất cả về bản thân . Sự khác biệt kinh điển ở đây là trong Ruby, bạn có quyền truy cập vào đối tượng self trong thời gian chạy - trong Python thì không!

Không giống như Python, trong Ruby không có giai đoạn biên dịch hoặc thời gian chạy riêng biệt. Trong Ruby, mọi dòng mã được thực thi dựa trên một đối tượng self cụ thể. Trong Ruby, mọi lớp kế thừa từ cả đối tượng và một siêu kính ẩn. Điều này tạo ra một số động lực thú vị:

class Ninja
  def rank
    puts "Orange Clan"
  end

  self.name #=> "Ninja"
end

Sử dụng self.name truy cập vào phương thức tên siêu kính của các lớp Ninja để trả về tên lớp của Ninja. Lập trình ẩn hoa có đẹp như vậy trong Python không? Tôi chân thành nghi ngờ điều đó!


4

Chà, nếu bạn không thích cú pháp lisp thì có lẽ trình hợp dịch là cách tốt nhất. :-)

Nó chắc chắn có sự khác biệt tối thiểu giữa mã và dữ liệu, là đa mô hình (hoặc có thể đó là không mô hình) và đó là một tâm trí mở rộng kinh nghiệm (nếu tẻ nhạt) cả về học tập và thủ thuật bạn có thể làm.


Tôi nghĩ rằng tôi đã lập trình meta bằng hợp ngữ nhiều hơn bất kỳ ngôn ngữ nào khác. Mã là dữ liệu và dữ liệu có thể cố gắng trở thành mã. Và dữ liệu không được ký hay chưa được ký, chính là opcode quyết định.
Nosredna 29/07/09

1
Tôi có mã trình hợp dịch mà bạn có thể khẳng định là OO. Nó có những thứ trông giống như các phương thức - bạn gọi một phương thức phụ thuộc vào "lớp".
justintime

4

Io thỏa mãn tất cả các điểm "Quan trọng" của bạn. Tôi không nghĩ rằng có một ngôn ngữ tốt hơn để thực hiện những trò hack meta điên rồ.


Cảm ơn vì điều đó, không biết nó. Thoạt nhìn vui vẻ, có thể nhiều (()) nhưng dù sao. Hy vọng tôi sẽ sớm tìm thấy thời gian để xem.
flq

3

một hỗ trợ các thủ thuật lập trình siêu mẫu không thể thực hiện được bằng ngôn ngữ biên dịch tĩnh

Tôi rất thích tìm một ngôn ngữ cho phép một số nội dung thú vị mà Lisp thực hiện

Lisp có thể được biên dịch.



3

Câu trả lời của tôi sẽ không. Tôi biết cả hai ngôn ngữ, đã tham gia một lớp học về Ruby và đã lập trình bằng python trong vài năm. Lisp giỏi trong việc lập trình siêu thị do mục đích duy nhất của nó là biến đổi danh sách, mã nguồn của chính nó chỉ là một danh sách các mã thông báo nên việc lập trình siêu hình là điều đương nhiên. Ba ngôn ngữ tôi thích nhất cho loại thứ này là Rebol, Forth và Factor. Rebol là một ngôn ngữ quay số rất mạnh, lấy mã từ luồng đầu vào của nó, chạy một biểu thức chống lại nó và biến đổi nó bằng cách sử dụng các quy tắc được viết bằng ngôn ngữ này. Rất biểu cảm và cực kỳ giỏi trong phương ngữ. Factor và Forth ít nhiều khác biệt hoàn toàn với cú pháp và bạn lập trình chúng bằng cách định nghĩa và gọi các từ. Chúng thường chủ yếu được viết bằng ngôn ngữ của họ. Bạn không viết ứng dụng theo nghĩa truyền thống, bạn mở rộng ngôn ngữ bằng cách viết các từ của riêng bạn để xác định ứng dụng cụ thể của bạn. Factor có thể đặc biệt hay vì nó có nhiều tính năng mà tôi chỉ thấy trong smalltalk để đánh giá và làm việc với mã nguồn. Một không gian làm việc thực sự đẹp, các tài liệu tương tác, v.v.


2

Không thực sự có nhiều thứ để tách Python và Ruby. Tôi muốn nói rằng cộng đồng Python lớn hơn và trưởng thành hơn cộng đồng Ruby, và điều đó thực sự quan trọng đối với tôi. Ruby là một ngôn ngữ linh hoạt hơn, có tác động tích cực và tiêu cực. Tuy nhiên, tôi chắc chắn rằng sẽ có nhiều người tìm hiểu chi tiết về cả hai ngôn ngữ này, vì vậy tôi sẽ đưa ra lựa chọn thứ ba. Làm thế nào về JavaScript?

JavaScript ban đầu được thiết kế để trở thành Đề án cho web và nó dựa trên nguyên mẫu, đây là một lợi thế so với Python và Ruby về đa mô hình và lập trình siêu mô hình. Cú pháp không đẹp bằng hai ngôn ngữ kia, nhưng nó có lẽ là ngôn ngữ được triển khai rộng rãi nhất hiện nay và hiệu suất đang tốt hơn mỗi ngày.


2

Nếu bạn thích khái niệm mã là dữ liệu kiểu lisp, nhưng không thích cú pháp Lispy, có lẽ Prolog sẽ là một lựa chọn tốt.

Liệu đó có đủ tiêu chuẩn là "ngôn ngữ hiện đại, thú vị" hay không, tôi sẽ để người khác đánh giá. ;-)


2

Ruby là lựa chọn của tôi sau khi khám phá Python, Smalltalk và Ruby.


2

Còn OCaml thì sao?

Các tính năng của OCaml: một hệ thống kiểu tĩnh, kiểu suy luận, đa hình tham số, đệ quy đuôi, đối sánh mẫu, đóng từ vựng hạng nhất, bộ hàm (mô-đun tham số), xử lý ngoại lệ và thu gom rác tự động theo thế hệ gia tăng.

Tôi nghĩ rằng nó đáp ứng những điều sau:

Quan trọng:

  1. Đẹp, rõ ràng, cú pháp lành mạnh và ngữ nghĩa nhất quán, trực quan. Về cơ bản là một ngôn ngữ hiện đại được suy nghĩ kỹ lưỡng, thú vị khi sử dụng.
  2. Nhiều mô hình. Không có mô hình nào phù hợp với mọi dự án, hoặc thậm chí mọi vấn đề nhỏ trong dự án.
  3. Một ngôn ngữ thú vị thực sự ảnh hưởng đến cách người ta nghĩ về lập trình.

Hơi quan trọng:

  1. Hiệu suất. Sẽ rất tuyệt nếu hiệu suất là tốt, nhưng khi hiệu suất là một ưu tiên thực sự, tôi sẽ sử dụng D để thay thế.
  2. Được ghi chép đầy đủ.

OCaml cho phép bạn tạo các lớp / phương thức trong thời gian chạy? Nó hoạt động như thế nào?
Jason Creighton

Tôi vừa đọc về OCaml và có lẽ nó không thể tạo nội dung trong thời gian chạy nên tôi đã xóa nó.
Robert Vuković

2

Tôi đã sử dụng Python một chút, nhưng nhiều Ruby hơn. Tuy nhiên, tôi cho rằng cả hai đều cung cấp những gì bạn yêu cầu.

Nếu tôi thấy tất cả bốn điểm của bạn thì ít nhất bạn có thể kiểm tra: http://www.iolanguage.com/

Và Mozart / Oz cũng có thể thú vị với bạn: http://mozart.github.io/

Trân trọng Friedrich


1

Đối với cú pháp kiểu python và macro giống như lisp (macro là mã thực) và DSL tốt hãy xem hội tụ .


1

Tôi không chắc rằng Python sẽ đáp ứng tất cả những điều bạn mong muốn (đặc biệt là điểm về sự khác biệt tối thiểu giữa mã và dữ liệu), nhưng có một lập luận ủng hộ python. Có một dự án giúp bạn dễ dàng lập trình tiện ích mở rộng cho python trong D, vì vậy bạn có thể có cả hai thế giới tốt nhất. http://pyd.dsource.org/celerid.html



1

Tôi khuyên bạn nên sử dụng Ruby.

Khi tôi mới bắt đầu tìm hiểu nó, tôi thấy nó thực sự dễ dàng để tiếp nhận.


1

Đừng trộn lẫn Ngôn ngữ lập trình Ruby với các Triển khai Ruby, vì nghĩ rằng các luồng POSIX không thể thực hiện được trong ruby.

Bạn có thể biên dịch đơn giản với hỗ trợ pthread và điều này đã có thể thực hiện được tại thời điểm luồng này được tạo , nếu bạn tha thứ cho cách chơi chữ.

Câu trả lời cho câu hỏi này là đơn giản. Nếu bạn thích ngọng, có lẽ bạn sẽ thích ruby ​​hơn. Hoặc, bất cứ điều gì bạn thích.


0

Tôi khuyên bạn nên thử cả hai ngôn ngữ và chọn ngôn ngữ hấp dẫn bạn. Cả Python và Ruby đều có thể làm những gì bạn muốn.

Cũng đọc chủ đề này .



0

Liên quan đến điểm chính của bạn (lập trình meta): Phiên bản 1.6 của Groovy có lập trình AST (Cây cú pháp trừu tượng) được tích hợp sẵn như một tính năng tiêu chuẩn và tích hợp. Ruby có RubyParser, nhưng nó là một tiện ích bổ sung.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.