2010-10-08 14 views
8

我喜歡Lua,將它用於越來越多的項目作爲主要(不嵌入)語言。我目前的項目接近10,000條線路,可能會以約15,000條線路結束。在Lua開發這個規模時,你覺得有什麼用處?你碰到什麼東西,你找到了什麼解決方案?我正在考慮開發工具,語言功能&技術,第三方模塊?什麼能讓它更容易與Lua真正合作?

我的前3名:

  1. strict.lua - 我用的這個修改後的版本。沒有被警告訪問未使用/無意的變量,我會發瘋。

  2. 協程 - 不是爲了它們的多線程能力,而是爲了它們的可持續性。對於簡化狀態機的實現非常有用。序列化函數 - 對於轉儲表內容以及將表持久化到磁盤(我使用了很多次,否則我可能已經達到了一個數據庫)是不可或缺的。

我的收藏:爲OS X我使用打印()■現在,但它可以讓我單步運行源文件調試器將是巨大的

  1. 可視化調試器。

  2. 繼續聲明。使用重複...直到真正的解決方法是醜陋的,太多的嵌套ifs變得複雜和醜陋。

  3. 當現有表格成員被修改時調用的元方法。

大規模Lua開發的其他技巧?

回答

6

繼續聲明。使用 重複...直到真正的解決方法是 醜陋,並且太多嵌套ifs變成 複雜和醜陋。

你的循環體是一個函數調用;那麼return變成continue

修改 現有表成員時調用的元方法。

您可以通過使用代理表B來實現此目的,代理表B用於存儲表A的所有實際數據 - 代替攔截從表B讀取和修改/查找的新索引/索引元方法。由於A從來沒有寫入任何東西,所以所有的寫入命中newindex。對於OS X

+0

不幸的是,這並不能爲嵌套表工作得很好。我做了一個遞歸'函數',測試新值是否是一個'table',並且將'metatable'設置爲這個'function',這樣我就可以掛鉤了。問題是,當它是另一個'原始類型'時該怎麼辦?我有兩個嵌套表和一個'''在一個內部表中由''reason''索引的字符串,如何檢測那個'字符串'中的變化,如果變化之前的初始值不是'nil'? – henry700 2016-10-02 02:45:24

+0

OH!我只需要以編程方式實現這個代理! – henry700 2016-10-02 02:47:34

3

根據您的TOP3和願望清單,這裏有我的工作,可以推薦產品(至少基於我接收到的反饋):

  1. MobDebug:基於RemDebug遠程調試器,但與各種修復和新功能。
  2. ZeroBrane Studio:一個Lua IDE提供了一個調試器與所有預期功能(StepIn /過/,斷線,手錶,棧,斷點,遙控器外殼,序列化支持,協程支持和更多),並運行在OSX和Windows。它提供了與IDE中的MobDebug的無縫集成。我發佈了幾個截屏視頻,展示了它的實際應用:http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style,http://notebook.kulchenko.com/zerobrane/love2d-debugging
  3. Serpent:結構緊湊,功能強大的串行器。 ZeroBrane Studio使用Serpent在控制檯和堆棧窗口中顯示覆雜的數據結構。
  4. ZeroBrane工作室包括static analyzer(基於metalua和Lua-檢查),它允許您發現同樣的問題(以及更多)strict.lua檢測,但在開發過程中(在運行代碼之前)。
  5. 看變化方面,MobDebug提供了一種方法來做到這一點對任何類型的變量(不只是表)。我在另一個SO post中描述過它。此功能尚未通過ZeroBrane Studio提供。
相關問題