gpt4 book ai didi

nim-lang - 在 nim 应用程序中包含一些 mruby 是否可能/容易?

转载 作者:行者123 更新时间:2023-12-02 08:03:53 28 4
gpt4 key购买 nike

我目前正在尝试学习 Nim(进展缓慢 - 无法投入太多时间)。另一方面,为了获得一些工作代码,我想对我正在 ruby​​ 中开发的 Nim 应用程序的各个部分进行原型(prototype)设计。

由于 mruby 允许在 C 应用程序中嵌入 ruby​​ 子集,并且 nim 允许将任意 C 代码编译为函数,因此感觉这应该相对简单。有人做过吗?

我特别寻找使用 Nim 的时髦宏功能来分解为内联 ruby​​ 代码的方法。我打算自己尝试一下,但我认为一定有人尝试过并且/或提出比我目前的学习状态更优雅的解决方案:)

最佳答案

https://github.com/micklat/NimBorg

这是一个目标有些相似的项目。目前它的目标是 python 和 lua,但使用相同的技术与 Ruby 交互应该不会太难。

Nim 中有几个功能有助于以流畅的方式与外语交互:

1) 使用 Nim 的 dot operators 从 Nim 调用 Ruby

这些有点像 Ruby 中的 method_missing。您可以在 Nim 中定义类似 RubyValue 的类型,该类型将具有点运算符,可以转换任何表达式,例如 foo.barfoo.bar(baz) 到适当的 Ruby 方法调用。参数可以传递给像 toRubyValue 这样的通用函数,该函数可以为各种 Nim 和 C 类型重载,以自动将它们转换为正确的 Ruby 类型。

2) 从 Ruby 调用 Nim

在大多数脚本语言中,有一种方法可以注册外部类型,通常以特定的数据结构进行描述,每个导出类型必须填充一次。您可以使用一些泛型编程和 Nim 的 .global. 变量来自动创建和缓存通过点运算符传递给 Ruby 的每种类型所需的数据结构。将会有一个类似于 getRubyTypeDesc(T: typedesc) 的通用过程,它可能依赖于 typeinfo、typetraits 或用户提供的一些重载过程,定义必须为该类型导出什么内容。

现在,如果您确实想依赖 mruby(例如,因为您有使用它的经验),您可以考虑使用 .emit. pragma直接输出mruby代码片段。然后您可以要求 Nim 编译器 generate only source code ,您将在第二步中编译它,或者您可以只更改编译器可执行文件,Nim 在编译项目时将调用该编译器可执行文件(这在上面链接的同一部分中进行了解释)。

关于nim-lang - 在 nim 应用程序中包含一些 mruby 是否可能/容易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34320961/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com