slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
新的编程语言 Fennel:LUA中的LISP
17611538698
webmaster@21cto.com

新的编程语言 Fennel:LUA中的LISP

编程语言 0 988 2024-09-09 06:46:24

导读:向大家介绍一种新的有味道的编程语言,Fennel。

图片

我们本月的语言是 Fennel — 直接翻译过来叫法是茴香。

但这里介绍不是甘草味的小蔬菜,而是一种有趣的小语言,它建立在 Lua 之上,在社群中还有一帮人专门使用 Lua。正如我们将在本文末尾看到的那样,你可以在 TIC-80 中使用 Fennel 来制作游戏和生成艺术作品。

Fennel 是一种 Lisp,所有 Lisp 都具有与语言非常相似的形状:它们围绕 s 表达式(用括号括起来的符号列表)构建,并使用所谓的前缀或“波兰表示法”语法。

因此,在包括 Fennel 在内的所有 Lisp 中,你不能写成 2 + 2,而是要说 (+ 2 2)。

好吧,为什么这么写?这是 50 年代设计第一个 Lisp 时的原始答案。由于其结构简单,制作一种易于实现的语法似乎是合理的。但我们已经离那时近 70 年了,那么为什么现在要使用 s 表达式和括号呢?部分原因是因为它使代码编写变得简单。不需要记住太多东西,而且你可以很容易地在 Lisp 语言之间切换。

另一个相当重要的原因是,常规结构允许您编写宏,即使用语言编写代码,接收 S 表达式并将其转换为其他 S 表达式。它们就像函数,只不过它们实际上会更改您编写的代码。

我们不会在本文中真正讨论宏,但当我们在未来的 TIC-80 项目中使用 Fennel 时,我们可能会展示一些有趣的宏示例。现在,我要说的是,宏可以让你创建一种语言的新功能,这些功能是你希望它拥有的。这是一种无需创建全新语言即可破解编程语言本身的方法。

图片

话虽如此,我认为介绍该语言的最好方式是向您提供本月 TIC-80 文章中该程序的 Fennel 版本。

Fennel的一些特性,我们总如下:

  • 完全兼容 Lua:轻松从 Fennel 调用任何 Lua 函数或库,反之亦然。

  • 零开销:编译后的代码应该与手写Lua一样高效。

  • 编译时宏:发送编译后的代码,而不需要对 Fennel 进行运行时依赖。

  • 可嵌入:Fennel 是一个单文件库,也是一个可执行文件。可将其嵌入到其他程序中,以支持运行时可扩展性和交互式开发。


;; Sample: read the state of the keyboard and move the player accordingly(local dirs {:up [0 -1] :down [0 1] :left [-1 0] :right [1 0]})
(each [key [dx dy] (pairs dirs)] (when (love.keyboard.isDown key) (let [[px py] player x (+ px (* dx player.speed dt)) y (+ py (* dy player.speed dt))] (world:move player x y))))

嗯,任何可以运行 Lua 代码的地方都可以运行 Fennel 代码。

哎呀,工作量太大了!


好的,莫要慌张,其实你可以随时使用 Fennel,而无需安装任何东西:


图片

运行地址:https://fennel-lang.org/see

你可以看到,我们故意使用Python语法写了一段,它返回了错误信息。而第二段的Fennel语法,可以是正常的运行。

开发社区


Fennel 的存储库位于 Sourcehut 上,讨论在 邮件列表和Libera.Chat 和 Matrix 上的 #fennel 频道上进行。 对于喜欢它的人来说,GitHub 上的一个存储库是个只读镜像。


Fennel 茴香编程语言:https://fennel-lang.org/

茴香编程语言的GitHub:https://github.com/bakpakin/Fennel

作者:聆听音乐的鱼

评论