我目前正在尝试学习Nim(进展缓慢-无法投入大量时间)。另一方面,为了获取一些有效的代码,我想为我正在使用ruby开发的Nim应用程序的各个部分制作原型。
由于mruby允许将ruby子集嵌入到C应用程序中,并且由于nim允许将任意C代码编译成函数,因此感觉这应该相对简单。有人这样做吗?
我特别在寻找使用Nim的时髦宏功能分解为内嵌ruby代码的方法。我要尝试一下自己,但我认为有人一定会尝试过,并且/或者想出一种比我目前的学习状态还更好的解决方案:)
https://github.com/micklat/NimBorg
这是一个目标相似的项目。目前它以python和lua为目标,但是使用相同的技术与Ruby进行接口应该不会太难。
Nim中的一些功能可帮助您流畅地与外语进行交互:
1)使用Nim的点运算符从Nim调用Ruby
这些有点像method_missing
Ruby。您可以RubyValue
在Nim中定义一个类型,该类型将具有点运算符,该点运算符可以将任何表达式转换为foo.bar
或foo.bar(baz)
转换为适当的Ruby方法调用。可以将参数传递给通用函数,例如toRubyValue
可以为各种Nim和C类型重载以将其自动转换为正确的Ruby类型。
2)从Ruby呼叫Nim
在大多数脚本语言中,有一种注册外部类型的方法,通常以特定的数据结构描述该外部类型,每个导出的类型必须填充一次。您可以使用一些通用编程和Nim的.global.
var来自动创建和缓存通过点运算符传递给Ruby的每种类型所需的数据结构。将会有一个通用的PROC像getRubyTypeDesc(T: typedesc)
可能依赖于typeinfo
,typetraits
或由用户提供的一些超载特效,定义什么需要导出的类型。
现在,如果您真的想依赖mruby(例如,因为您有使用它的经验),则可以考虑使用.emit。编译指示直接输出多段mruby代码。然后,您可以要求Nim编译器仅生成源代码,您将在第二步中对其进行编译,也可以仅更改编译器可执行文件,Nim在编译项目时将调用该可执行文件(在以上链接的同一部分中对此进行了说明)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句