2010-01-20 19 views
61

Lua chiếm một vị trí tốt trong không gian của ngôn ngữ có thể được nhúng. Có phải những ý tưởng chính đằng sau những ý tưởng thiết kế mới của Lua từ những người triển khai hay Lua chủ yếu là một sự kết hợp được thực hiện tốt của những ý tưởng được thiết lập tốt?Lua có dựa chủ yếu vào các ý tưởng ngôn ngữ lập trình được thiết lập tốt không?

So sánh các đặc tính và tính năng của Lua với các PL khác đặc biệt phù hợp.

Trả lời

129

Đây là một câu hỏi rất thú vị. Công việc ban ngày của tôi là học các ngôn ngữ lập trình, và Lua sẽ trả tiền học tập cẩn thận. Tôi sẽ nói rằng rất ít ngôn ngữ khác (có lẽ là Icon và CLU). Xin lưu ý rằng đó là ngôn ngữ như một toàn bộ, không phải là các tính năng riêng lẻ, điều này làm cho Lua xứng đáng được học tập.

Đây có phải là kết quả của những ý tưởng mới thú vị mà người triển khai đã có hay đó là kết quả của việc thực hiện tốt các ý tưởng được thiết lập tốt?

Cả hai. Đối với các chi tiết, nguồn tốt nhất của bạn cho một câu trả lời cho câu hỏi này là giấy The Evolution of Lua, xuất hiện tại Hội nghị chuyên đề ACM lần thứ ba về Lịch sử Ngôn ngữ lập trình. Nhưng tôi sẽ thêm một vài bình luận.

  • Việc sử dụng bảng Lua như chỉ có thể thay đổi loại, phi nguyên tử của dữ liệu được phát minh bởi đội Lua. Chúng được lấy cảm hứng từ sự phát triển của CLU, và tôi tin rằng họ đã nhận thức được công việc tương tự trong Awk và Icon, nhưng sự tinh tế ở mức độ này là một đóng góp quan trọng của đội Lua.

    Bảng cũng có triển khai rất hiệu quả, được phát minh bởi nhóm Lua.

  • Các tính năng chức năng của Lua có ngữ nghĩa tương tự như Đề án, nhưng Lua có thực hiện duy nhất của chức năng hạng nhất, mà tôi nghĩ rằng họ phải nộp cho công bố trên Tạp chí chức năng lập trình.

  • API để nhúng đã được tinh chỉnh rất nhiều trong những năm qua. Đặc điểm phân biệt chính của nó là các kiểu trừu tượng do người dùng định nghĩa có thể tham gia đầy đủ vào quá trình nhúng. Đây là thuộc tính làm cho API Lua vượt trội hơn API Tcl, chẳng hạn. API Lua đã trải qua rất nhiều tinh tế trong những năm qua, kể cả từ lần xuất bản đầu tiên của nó ở phiên bản 2.5. Các nhà thiết kế Lua xứng đáng nhận được rất nhiều tín dụng ở đây.

  • Công nghệ thu gom rác là tiêu chuẩn.

  • Lua coroutines đại diện cho một ý tưởng mới về một số ý tưởng rất cũ. Việc lấy mới được coi là đáng được công bố trong ACM Giao dịch về Ngôn ngữ lập trình và Hệ thống, vì vậy một lần nữa tôi nghĩ rằng nhóm Lua nhận được tín dụng cho độc đáo.

  • Biến đổi Lua có liên quan đến giao thức Common Lisp metaobject.

Tôi nghĩ rằng kết quả thành công Lua từ một sự kết hợp độc đáo của những điểm mạnh của đội Lua:

  • Nếu bạn đọc HOPL paper, bạn sẽ thấy rằng đội Lua là cũng nhận thức được nhiều phát triển trong các ngôn ngữ lập trình và có thể chọn trong số các ý tưởng hay nhất. Hầu hết các nhà thiết kế ngôn ngữ kịch bản phổ biến đều là những người nghiệp dư và chưa được thông báo gần như đầy đủ.

  • Lua tuyệt vời được thiết kế sao cho các mảnh vừa khít với nhau rất tốt, với tỷ lệ công suất trên trọng lượng tuyệt vời. Đây là kết quả của rất nhiều sàng lọc theo thời gian, và PUC-Rio đã sẵn sàng cho đội Lua để làm việc về thiết kế và thực hiện ngôn ngữ thay vì nghiền ra một số lượng lớn các giấy tờ. Công việc này không thể được thực hiện tại một trường đại học ở Bắc Mỹ.

  • Lua tuyệt vời được thiết kế. Việc thực hiện chỉ là đáng kinh ngạc tốt. Đó là một phần công việc tuyệt vời của các kỹ sư tuyệt vời và một phần cơ hội để tiếp tục sửa đổi thiết kế trong khoảng thời gian 15 năm.

tôi sẽ đóng bằng cách hỏi độc giả không đánh giá thấp những khó khăn của chọnlọc ý tưởng tốt được thành lập để tạo thành một tổng thể chặt chẽ. Đây là công việc cực kỳ khó khăn và hiếm khi được công nhận như nó cần.

+9

+1: câu trả lời rất hay –

+5

Hiện tại, hãy xem "Triển khai Lua 5.0" tại http://www.lua.org/doc/jucs05.pdf Chúng tôi đang nghiên cứu bài viết đó, Norman, nhưng Lua 5.2 đang thu hút sự chú ý của chúng tôi ngay bây giờ ... – lhf

+1

Bài báo TOPLAS, Xem lại Coroutines, đã được thảo luận trên LtU, vì lý do nào đó mà tôi không chú ý đến: http://lambda-the-ultimate.org/node/ 2868 –

4

Lua là nhỏ, tổng số mã chỉ là hàng chục nghìn dòng trong ANSI C. (Python có mười dòng dòng mores mã).

Lua rất ổn định hoặc nói rằng ngôn ngữ đã được khắc phục ngay bây giờ.

Lua có kỹ thuật tốt. Mã của nó rất dễ đọc và hack. (cũng vì nhỏ)

Giấy phép của nó cho phép bạn làm bất cứ điều gì bạn muốn.

Viết phần mở rộng C trong Lua dễ dàng hơn các ngôn ngữ khác, nói Python.

+4

Vì vậy, tất cả điều này được tính là kỹ thuật tốt, thay vì bất cứ điều gì liên quan đến thiết kế ngôn ngữ? –

+2

Không, có nhiều kỹ thuật tốt, nhưng có những quyết định thiết kế sáng tạo, như Norman đã chỉ ra. Đọc giấy HOPL. – lhf

0

Tôi nghĩ điều này là do Lua tương đối đơn giản và thực dụng. Nó không cố gắng là ngôn ngữ để xây dựng hệ điều hành tiếp theo, Crysis 3 hoặc bản sao SAP, nhưng nó hoạt động như thế nào, tức là hoạt động như một ngôn ngữ kịch bản.

7

Lua hỗ trợ lập trình chức năng và dựa trên kiểu dáng Prototype-based linh hoạt và mạnh mẽ.

IMO đó là một ngôn ngữ thú vị.

Nếu bạn muốn đọc một số suy nghĩ về nguyên mẫu thừa kế, tôi đề nghị bạn
đọc bài The Universal Design Pattern blog của Steve Yegge.

+0

Cảm ơn: liên kết thật thú vị. Làm việc trên Lua bắt đầu vào năm 1993, 3 năm sau khi phát hành bản thân, và 7 năm sau "Lớp học so với nguyên mẫu của Borning trong ngôn ngữ hướng đối tượng" của Borning. Lua có giới thiệu chương trình dựa trên nguyên mẫu mới không? –

+0

@Charles, tôi chỉ thử nghiệm với nguyên mẫu ở Lua và tôi không thực sự biết câu trả lời cho câu hỏi của bạn. Có lẽ ai đó khác có thể che giấu một số ánh sáng trên đó. –

+0

Chắc chắn. Nó chắc chắn có lợi cho tôi mà tôi không thể nghĩ ra một ngôn ngữ dựa trên nguyên mẫu đầu tiên đã đạt được sử dụng rộng rãi. –

2

Có một câu chuyện về Lambda the Ultimate, Small is Beautiful: the design of Lua, thảo luận về bài nói chuyện gần đây của Robert Ierusalimschy tại Stanford cùng tên. Các cuộc thảo luận hiện tập trung vào những thành tích của việc có bảng như cấu trúc dữ liệu container duy nhất; cho đến nay, ít được nói ở phần khác của cuộc nói chuyện, giao dịch với giao diện C của Lua.

Các vấn đề liên quan