又LAG隨性筆記
  • 關於我
  • 作品集
  • 生活隨筆
  • 與我聯絡
  • 隨手扎

隨手扎

October 18, 2020

【30天Lua重拾筆記35】完賽感想與延伸閱讀

完賽感言

這系列文章在我3月當兵時就開始在規劃了,可是寫出來也還是和原本預計的差了蠻多的,看看我一開始預計撰寫的內容…

起初,我更是想說Lua這麼小,那應該可以非常完整的說明完所有部份吧!但越後面開始規劃每日的文章才發現…絕對會超過30篇。

而且更多時候是寫到一半,發現這邊不得不提到一下之後才會說明的部份。又或者是邊查資料邊寫,結果與預計寫的方向差了不少。又有些時候,因為對Lua已經有一些基礎了解,手打字追不上想寫的思路,或是大思路雖然有了,卻一直在某些地方腦袋打結…

這系列文章,有很多篇也比我預計寫的內容詳細了許多,比起最初可能只是各方面都提到一點點的筆記,儼然已經變成超過我預期內容的一些探討。自己撰寫收穫也頗多的,也還好目前並不算忙碌,才可以這樣做。若要給未來自己一些建議:

  • 不管想到的是否完整、好壞,都可以先寫下來。
    這次有許多已經先寫下來的小紀錄,最後都變成很常的文章或範例程式。有更多更是在其他文章撰寫下,也不停的修改。
  • 不用多,先寫下小小的東西就好。當做種下一顆未來的種子,當未來有需要使用時,再來灌溉、發芽。
  • 還是自己寫過、想過的東西,在未來更容以理解。

最後,感謝閱讀完本系列的文章的各位,本文章原本想要深入淺出,但中有諸多未能提及之處,只能在最後分享一些資源。

延伸閱讀

October 17, 2020

【30天Lua重拾筆記34】番外篇: Fengari - 一個JS實現的Lua,運行Lua在瀏覽器內吧!

幾年前關注過Moonshine和lua.vm.js,不過這兩個項目貌似沒什麼在更新了。Fengari這個這次到又是讓我為之一亮

Lua的實現真蠻多樣的,光是想讓Lua運行在瀏覽器就有不少,像是Moonshine、lua.vm.js、Starlight。有些使用JS;也有些利用了WASM、emscripten。Fengari是屬於前者的實現,是JS實現的版本。其除了可以在瀏覽器執行外,也提供了基於Node.js的執行器。這是一個蠻新興的項目,整體設計粗淺看來也相當不錯而且完整,今天會略微介紹一下,但建議可以先閱讀閱讀為什麼我們使用JS重寫了Lua?(英文)

Fengari是希臘文「月亮」的意思

於瀏覽器執行Lua

October 16, 2020

【30天Lua重拾筆記33】Java + Lua計算機

這是我前幾年作為學習/練習的例子。

看過與C交互後,接著來看看一個更實際應用的例子。不過不用C,來用Java。

為甚麼呢?Java自帶一個跨平台的視窗開發套組,本身也有豐富的函式庫可用,第三方函式庫也眾多,作為宿主語言是蠻好的標的。不過不直接使用原本的Lua,需要使用LuaJ。

其實最初只是因為Android App使用Java開發。而當時Android Studio編譯APK實在太慢,才會有為啥不能先用其他方式寫邏輯、開發,為啥不先嵌入一個腳本語言?才去做的一個練習,之後我使用的套件也確實有用於Android App開發上。
是的,如果你是正在開發Android,不管是以前主要用Java還是後來的Kotlin,今天應該都還是可以使用LuaJ。

LuaJ已經停滯好一段時間了,本次範例的為GitHub上另一個分支。基本上遵循Lua 5.2的規則,也就是本系列有部份是Lua 5.3、5.4的語法並不能使用於之。

目標

本次範例主要目標:一個含有GUI的簡易計算機。其包含:

  • Java提供GUI界面,和部份功能。
  • Lua處理邏輯。
  • 一個擴展方法,能夠改變成品行為。

使用Lua撰寫邏輯

使用Lua的好處之一,在不確定要以和總平台開發前,是可以先使Lua撰寫邏輯,最後在嵌入到某個平台或框架。

October 15, 2020

【30天Lua重拾筆記32】進階議題: LuaRocks & LuaDist

LuaRocks

LuaRocks是類似npm、pip這樣的套件管理工具,你可以在上頭找到近4000個別人已經寫好的模組。

下載/安裝LuaRocks

在示例前,你需要先下載安裝好LuaRocks,若要下載其他版本,可以在這個頁面尋找看看。

在Linux上,你只需要將其解壓縮於可執行路徑底下即可。Windows可以參考官方說明。

使用LuaRocks

初始化環境

你可以不用做這一步。略過這一不的話,之後安裝得套件會存在於全局裡。有這樣的作法,主要是用於開發其他套件時使用。

mkdir example
cd example
luarocks init

搜尋套件

October 14, 2020

【30天Lua重拾筆記31】進階議題: 記憶體回收&弱表

TL;DR:
不要去修改預設值,除非你知道在做什麼

Lua會自己做記憶體回收,絕大多數時候不必為記憶體分配、管理而操心,而且通常它做的很好。但如果真的因為記憶體回收而影響到程式效率的執行,且你確定你有足夠的記憶體,你可以暫停讓Lua執行記憶體回收的操作:

停止收集記憶體垃圾

collectgarbage("stop")
collectgarbage("isrunning") --> false

或者,如果你是嵌入在C,可能會更傾向使用:

lua_gc(L, LUA_GCSTOP)

收集記憶體垃圾

如果要恢復,也只要:

collectgarbage("restart")
collectgarbage("isrunning") --> true

或是

October 13, 2020

【30天Lua重拾筆記30】進階議題: 與C交互(+Python)

Hello, Lua & C

現在,我們來嘗試從C去執行一個Lua程式,Lua程式就用最簡單的Hello,並命名為hello.lua

print "Hello"

然後來寫C程式 – hello_C.c。

引入標頭檔

需要下載含有標頭檔和函式庫的版本

#include "lua.h"
#include "lauxlib.h"

建立Lua虛擬機

// new a lua VM
lua_State *L = luaL_newstate();

打開預設的所有函式庫

通常而言,不會全部開啟所有功能。
這只是範例,讓hello.lua檔案擁有所有能力。

// open all libraries 
luaL_openlibs(L);     

執行Lua檔案

  • ««
  • «
  • 1
  • 2
  • 3
  •  … 
  • 13
  • 14
  • 15
  •  … 
  • 34
  • »
  • »»
© 又LAG隨性筆記 2025