随着 mod_cml 的首次实现以及后来的 mod_magnet,聪明的用户问我们为什么不也将 Lua 用作 lighttpd 的配置语言。
到目前为止,我一直持反对意见,认为配置文件的大幅改动会让升级者非常不高兴,因为他们必须重写配置文件。然而,看看我们目前为 1.5.0 所做的工作,我们无论如何都需要进行调整。
当你把一件事拆开时,这种情况总是会发生:你会看到更多需要清理的东西。我的初步实验已经完成了一部分。
server = { name = "my.example.org", modules = { "mod_indexfile" }, ["errorfile-prefix"] = "foobar", } sockets = { [":80"] = { server = { name = "foo.example.org" }, HTTP = { url = function(url) if url == "foo" then server.name = "baz.example.org" end end }, } } sockets[":80"].HTTP.url("foo") print(server.name)
这是一个初步的想法。它展示了 LUA 语法与我们当前的配置语法并没有那么大的不同。
- 全局变量,现在仍保持为全局。
- socket 条件现在是一个简单的 socket 数组
- 条件是函数,现在你可以随心所欲地使用它们
我希望我能将完整的配置语法整合到这个结构中。目前来看,这比拆开旧的配置解析器代码并将其转换为 glib-notation 更具吸引力。有了所有的条件和类型,我们基本上已经实现了自己的脚本语言。
让我们看看这会走向何方。