Tại sao Python mà không phải Lua? [đóng cửa]


45

Tại sao Python được google hỗ trợ và trở nên phổ biến nhanh chóng còn Lua thì không?

Bạn có biết tại sao Lua vẫn ở trong nền?


3
Lua thích giả vờ mảng và từ điển là cùng một thứ, và có một getter chiều dài không chỉ có thể trả về kết quả sai, mà còn kết quả không xác định. Tôi không biết lý do của Google là gì, nhưng đây là lý do đủ để tôi không thích nó.
Steve314

4
Đối với tôi, Python dễ mã hóa hơn, thú vị hơn và có nhiều tính năng hơn. Một số ví dụ từ đỉnh đầu của tôi: máy phát điện là một công dân hạng nhất trong Python ( yield) và Lua yêu cầu thiết lập cồng kềnh hơn. Lập chỉ mục danh sách của Python [::]là một điểm cộng rất lớn. Python có các lớp và kế thừa hợp pháp. Lua nhanh hơn, vâng, nhưng tôi thực sự thích viết mã Go để sử dụng trong Python khi tốc độ là quan trọng.
Frank Bryce

Tôi yêu LuaJIT nhưng một phần lớn trong tình yêu của tôi dành cho nó là sự dễ dàng nhúng, tốc độ và dấu chân tuổi teen. Nếu tôi phải lập trình một thứ gì đó suốt cả ngày, tôi có thể nghiêng về Python nhiều hơn.

@FrankBryce bạn đã nhận nó ngược. Máy phát điện của Python là một tập hợp con của Lua. Xem inf.puc-rio.br/~roberto/docs/MCC15-04.pdf
capr

Câu trả lời:


37

Tôi thực sự yêu Lua, nhưng nó có một số hạn chế thực sự, và như những người khác đã đề cập, họ chủ yếu xuất phát từ nguồn gốc của Lua như một ngôn ngữ tệp cấu hình và sau đó là ngôn ngữ kịch bản nhúng.

Vì mục tiêu giữ cho Lua nhỏ, chỉ tồn tại một thư viện tiêu chuẩn rất nhỏ , chỉ có chức năng xương trần.

Điều này đã dẫn đến một nền văn hóa đáng tiếc trong giới Lua, nơi các nhà phát triển Lua muốn triển khai lại chức năng được cung cấp bởi chính các thư viện tiêu chuẩn của ngôn ngữ khác thay vì làm việc chung trên một bộ thư viện lõi được chấp nhận rộng rãi.

Những thứ như đa luồng, biểu thức chính quy, phương thức truy cập tệp độc lập nền tảng và thậm chí hoạt động bit (cho đến 5.2) là tất cả "không bao gồm" vì chúng sẽ làm cho Lua lớn hơn và chậm hơn nhiều. Chắc chắn bạn có thể khiến các thư viện làm như vậy những điều này - nhưng sau đó những người có các nhà bảo trì độc lập và mức chất lượng.

Đừng hiểu lầm tôi. Tôi yêu Lua vì những lý do tương tự tôi vừa liệt kê.


54

Đơn giản: Lua có nhiều mục tiêu "thích hợp" hơn Python .

Python được cho là hữu ích như một ngôn ngữ lập trình chung. Vì vậy, nó hữu ích trong nhiều trường hợp. Nó bao gồm nhiều loại ứng dụng nổi tiếng nhưng không tham gia cạnh tranh trực tiếp với các ngôn ngữ khác có thể nhắm mục tiêu vào các ràng buộc cụ thể, nhưng tính đơn giản của cú pháp.

Lua hoàn toàn được nhắm mục tiêu là một ngôn ngữ kịch bản nhúng. Mục đích ban đầu của nó, ngay cả khi hiện tại nó được sử dụng trong các bối cảnh khác, như hệ thống xây dựng; sẽ được nhúng trong phần mềm và cho phép thực hiện dễ dàng các chức năng và cấu trúc tập lệnh cụ thể của miền. Nó tối giản đến mức nó thậm chí có thể được sử dụng trên phần cứng thực sự bị hạn chế (tôi đã sử dụng Lua trên NintendoDS), nó nhẹ, dễ sử dụng, NHANH CHÓNG và là một ngôn ngữ tối giản nhưng được cho là mở rộng rất nhiều phương ngữ (nhập khẩu mô hình như hướng đối tượng) có sẵn. Nó dễ mang theo (ANSI C) đến mức bạn có thể sử dụng nó trên bất kỳ phần cứng nhúng nào với dung lượng bộ nhớ vừa đủ cho phần mềm nhúng hiện đại (nếu tôi nhớ rõ thì lua vm mặc định là khoảng 400ko và gần như sẽ không bao giờ phát triển nếu bạn không tạo các đối tượng ...).

Vì vậy, Lua ban đầu được sử dụng trong ngữ cảnh mà bạn cần nhúng ngôn ngữ kịch bản cho ứng dụng của mình .

Python được sử dụng cho ... hầu hết mọi thứ không yêu cầu ngôn ngữ thích hợp hơn (bạn có thể tạo các trò chơi khá hiệu quả bằng Python, nhưng một số trò chơi nặng về hiệu năng thực sự cần phải tránh hệ thống như vậy).

Đơn giản là Python được sử dụng trong nhiều ngữ cảnh hơn Lua. Theo như tôi biết, ngoài Android (cung cấp hỗ trợ Java và ngôn ngữ bản địa), Google không phải là một công ty phần mềm nhúng nên họ không thực sự cần Lua ở mọi nơi, trong khi Python hữu ích cho mọi việc họ làm (web, xây dựng hệ thống , truyền thông, web và web).

Python cũng được sử dụng trong rất nhiều trò chơi để nhúng kịch bản, nhưng nó nặng và chậm hơn Lua. Cú pháp của Python làm cho nó phù hợp hơn với các trò chơi lớn phụ thuộc nhiều vào thông tin theo kịch bản trong cấu trúc trò chơi của chúng (không chắc là tôi rõ ràng nhưng chỉ nghĩ rằng nếu bạn cần một "ngôn ngữ hoàn chỉnh thực sự" để viết kịch bản, có thể nhúng Python một ý tưởng tốt, nếu hiệu suất là tốt cho bạn). Python không được tạo ra để được nhúng, vì vậy điều đó tốt. Một tương đương với Python được nhắm mục tiêu được nhúng trong C ++ là Falcon.

Để so sánh cực đoan, một số ngôn ngữ nhắm mục tiêu nhúng và cố gắng có cú pháp đầy đủ hơn Lua tối giản và cạnh tranh về hiệu suất: ChaiScript, AngelScript, Io ...

Nhân tiện, tôi đã thấy các hệ thống xây dựng mới như PreMake hoặc Bam sử dụng Lua làm ngôn ngữ tệp xây dựng. Ý tưởng là nó nhẹ và nổi tiếng từ các nhà phát triển trò chơi (xây dựng hệ thống trong phát triển trò chơi là một vấn đề lớn). Vì vậy, có lẽ đó là một lĩnh vực khác mà Lua có thể được đánh giá cao hơn. Nó chắc chắn thân thiện với người dùng hơn cú pháp CMake ....


4
Tôi nghĩ mục tiêu của Lua như một ngôn ngữ nhúng có lẽ là một đóng góp chính. Nhưng ngay cả khi tôi vẫn tin rằng "sự phổ biến" của một ngôn ngữ ít hơn với thiết kế thực tế hoặc khả năng của chính ngôn ngữ đó và hơn nữa là vấn đề "đúng lúc, đúng chỗ" (ví dụ như PHP).
Dean Harding

Vâng, tôi nghĩ rằng một ngôn ngữ được nhắm vào mục đích cụ thể sẽ tự nhiên thu hút người dùng cụ thể, khiến đối tượng của nó bị hạn chế hơn bất kỳ ngôn ngữ có mục đích chung nào. Có ít sự thử thách hơn các ngôn ngữ có mục đích chung ảnh hưởng trực tiếp đến số lượng người sẽ nói về nó. Ngoài ra, mục tiêu cụ thể có nghĩa là các tính năng cụ thể. Do đó, nó không tốt cho mọi tình huống. Ở đây ví dụ lua một mình không phải là một ngôn ngữ lập trình gui rất tốt. Nó đòi hỏi một số bổ sung để thực sự hữu ích.
Klaim

Điều đó nói rằng, tôi hoàn toàn đồng ý: nếu php không được sử dụng cho một lĩnh vực được sử dụng rộng rãi như phát triển trang web, thì nó sẽ không xuất hiện ở mọi nơi.
Klaim

Lua chủ yếu được sử dụng làm ngôn ngữ nhúng nhưng nó là ngôn ngữ lập trình có mục đích chung, ví dụ bạn có thể tạo tập lệnh CGI với mod_lua. Tôi có thể thay đổi câu hỏi của mình thành lý do tại sao lua ở lại như một ngôn ngữ nhúng?
BenjaminB

Bởi vì đó là nguồn gốc của nó. Bạn có thể sử dụng nó như một ngôn ngữ mục đích chung có, vì bạn cũng có thể sử dụng php cho mục đích chung. Bạn cũng có thể sử dụng Perl để làm tương tự. Nhưng nguồn gốc của họ làm cho định hướng của họ. Một lần nữa, mục đích ban đầu của chúng làm cho chúng ít hữu ích hơn các ngôn ngữ khác cho các ngôn ngữ có mục đích chung. Lua thiếu một số ngôn ngữ tính năng để dễ sử dụng với hệ thống GUI, ví dụ như hướng đối tượng (mà bạn có thể thêm dễ dàng, nhưng nó không phải là bản địa). Hãy chắc chắn rằng bạn thấy sự khác biệt giữa một ngôn ngữ ban đầu được tạo ra cho mục đích cụ thể và ngôn ngữ chung. Họ đều có những ràng buộc nào.
Klaim

4

Bạn có thể làm mọi thứ với Lua, nó được tạo như một ngôn ngữ kịch bản để mở rộng chương trình? Đúng, nhưng không giới hạn ở nó, có rất nhiều thư viện cho Lua và với các công cụ phù hợp (LFIJIT's FFI hoặc tolua), bạn thậm chí có thể sử dụng Thư viện C / C ++ trên đó. Lý do khiến Python được sử dụng nhiều hơn theo quan điểm của tôi chỉ là tuổi tác, Python được sử dụng làm ngôn ngữ đầu tiên ở nhiều trường đại học và trường học, có nhiều người biết Python hơn Lua và dễ dàng tìm thấy một thư viện tốt cho Python so với Lua, vì ngôn ngữ đã trưởng thành hơn. Ngoài ra, tôi không biết nhiều về Python, nhưng theo như tôi biết, thật dễ dàng để ẩn mã của bạn khỏi người dùng cuối, điều gì ở Lua, không dễ dàng như vậy, phải không?

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.