2010-10-08 35 views
8

Tôi yêu Lua, sử dụng nó cho các dự án ngày càng nhiều như là ngôn ngữ chính (không được nhúng). Dự án hiện tại của tôi đang tiếp cận 10.000 dòng và có thể sẽ kết thúc vào khoảng 15.000 dòng. Những gì bạn thấy hữu ích khi phát triển ở Lua ở quy mô đó? Những gì bạn đã chống lại đầu của bạn chống lại, và những giải pháp mà bạn đã tìm thấy? Tôi đang nghĩ về các công cụ phát triển, các tính năng ngôn ngữ & kỹ thuật, mô-đun của bên thứ ba?Điều gì sẽ làm cho nó dễ dàng hơn để thực sự làm việc với Lua?

hàng đầu của tôi 3:

  1. strict.lua - Tôi sử dụng một phiên bản sửa đổi về điều này. Nếu không được cảnh báo về việc truy cập các biến không sử dụng/không mong muốn, tôi sẽ phát điên.

  2. coroutines - không phải cho khả năng đa luồng của chúng mà là khả năng liên tục của chúng. Rất hữu ích cho việc đơn giản hóa việc thực hiện các máy trạng thái.

  3. chức năng tuần tự hóa - không thể thiếu để bán phá giá nội dung bảng và lưu trữ bảng vào đĩa (tôi sử dụng nhiều lần nếu không tôi có thể đã đạt được cơ sở dữ liệu).

Sản phẩm yêu thích:

  1. trực quan debugger cho OS X. Tôi đang sử dụng print() s bây giờ, nhưng một trình gỡ lỗi mà có thể cho tôi một bước thông qua file nguồn sẽ là tuyệt vời.

  2. Tuyên bố tiếp tục. Sử dụng lặp lại ... cho đến khi giải pháp đúng sự thật là xấu, và quá nhiều if lồng nhau trở nên phức tạp và xấu xí.

  3. Một metamethod được gọi khi thành viên bảng hiện có được sửa đổi.

Bất kỳ mẹo nào khác để phát triển Lua quy mô lớn hơn?

Trả lời

6

Tuyên bố tiếp tục. Sử dụng lặp lại ... cho đến khi giải pháp đúng là xấu xí và quá nhiều if lồng nhau trở thành phức tạp và xấu xí.

Làm cho vòng lặp của bạn trở thành cuộc gọi hàm; sau đó return trở thành continue.

Một metamethod được gọi khi một thành viên trong bảng hiện tại được sửa đổi .

Bạn có thể tự mình thực hiện bằng cách sử dụng bảng proxy B lưu trữ tất cả dữ liệu thực tế cho bảng A - newindex/index metamethods trên A chặn ghi/đọc và sửa đổi/tra cứu từ bảng B thay thế. Kể từ khi A không bao giờ nhận được bất cứ điều gì bằng văn bản cho nó, tất cả viết nhấn newindex.

+0

Thật không may, điều này không hoạt động tốt cho các bảng lồng nhau. Tôi đã thực hiện một hàm đệ quy 'hàm' để kiểm tra nếu giá trị mới là' bảng', và cũng đặt 'giá trị' của nó thành cùng' hàm', vì vậy tôi có thể móc nó. Vấn đề là, phải làm gì khi đó là một 'kiểu nguyên thủy' khác? Tôi có hai bảng lồng nhau và một 'chuỗi' trong một trong các bảng bên trong được lập chỉ mục bởi' "lý do" ', làm thế nào để phát hiện các thay đổi trong' chuỗi' đó cung cấp giá trị ban đầu trước khi thay đổi không phải là 'nil'? – henry700

+0

OH! Tôi chỉ phải thực hiện proxy này theo chương trình! – henry700

3

Dựa trên danh sách TOP3 và mong muốn của bạn, đây là những sản phẩm tôi làm việc trên và có thể giới thiệu (ít nhất dựa trên phản hồi tôi nhận được):

  1. MobDebug: trình gỡ lỗi từ xa dựa trên RemDebug, nhưng có nhiều bản sửa lỗi và chức năng mới.
  2. ZeroBrane Studio: một IDE Lua cung cấp trình gỡ lỗi với tất cả các chức năng dự kiến ​​(StepIn/Over/Out, Break, Watch, Stack, Breakpoints, remote shell, hỗ trợ tuần tự, hỗ trợ coroutine và nhiều hơn nữa) và chạy trên OSX và Windows. Nó cung cấp tích hợp liền mạch với MobDebug trong IDE. Tôi đã đăng một số chương trình truyền hình hiển thị nó đang hoạt động: http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style, http://notebook.kulchenko.com/zerobrane/love2d-debugging.
  3. Serpent: bộ nối tiếp gọn nhẹ và mạnh mẽ. ZeroBrane Studio đang sử dụng Serpent để hiển thị các cấu trúc dữ liệu phức tạp trong cửa sổ Console và Stack.
  4. ZeroBrane Studio bao gồm static analyzer (dựa trên metalua và lua-inspection), cho phép bạn phát hiện cùng một vấn đề (và nhiều hơn nữa) mà strict.lua phát hiện, nhưng trong quá trình phát triển (trước khi bạn chạy mã).
  5. Về mặt xem thay đổi, MobDebug cung cấp cách để thực hiện điều đó cho bất kỳ loại biến nào (không chỉ bảng). Tôi đã mô tả nó trong một số khác SO post. Chức năng này chưa có sẵn thông qua ZeroBrane Studio.
Các vấn đề liên quan