问题标签 [nim-lang]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
interpreter - Nimrod的Brainfuck翻译
我正在玩弄nim(在撰写本文时仍称为 nimrod),用该语言编写 Brainfuck 解释器。没有实现循环,我有:
它编译成功,但是当我向它输入一个输入时:
哪个应该打印字符'A'它返回'N'。有任何想法吗?
bitwise-operators - 在 Nimrod 中,按位运算的语法是什么?
我刚刚发现 Nimrod 并且有一个基本问题(在文档中找不到答案)。
你如何使用按位运算?我有以下代码,其中 x 定义为 int :
这不编译:
如果我尝试:
我明白了
有什么诀窍?
inheritance - 继承类型编译 Nimrod 程序中未声明的字段
我尝试编译以下代码:
但我收到以下错误:
错误:未声明的字段:'id'
怎么id
不申报?代码示例直接来自教程。语言中是否有一些未反映在教程中的更改?
另外,如果我尝试运行以下代码:
我收到以下错误:
SIGSEGV:非法存储访问。(尝试从 nil 读取?)
为什么?
include - 如何从 Nim 的导入失败中恢复?
在Nim中,我可以编写以下代码来导入外部模块:
只要我有该模块,它就可以正常工作,但是对于可能下载代码但没有安装模块的人来说,编译将失败,并显示一条用户友好的消息:
有什么方法可以环绕它,import
以便我可以像异常一样捕获它并执行类似于when
语句的替代代码分支?我希望找到一些importable
类似宏或我可以使用的东西:
事实上,我想让一些模块成为可选模块,而不是一个简单的错误消息,这样编译仍然可以继续进行,也许功能会减少。这可能吗?
解决方案编辑:根据这里的答案是我的版本如何解决这个问题,首先你需要一个moduleChecker
具有以下来源的二进制文件:
然后,让这个命令可用,可以使用以下宏:
不幸的是,必须生成一个单独的进程,不仅用于外部编译,而且还需要另一个进程来生成临时文件以进行检查,因为staticWrite
当前版本中没有在编译时生成文件。
parsing - 如何在 Nimrod 的编译时解析字符串?
通过Nimrod 教程的第二部分,我已经到达了解释宏的部分。文档说它们在编译时运行,所以我想我可以对字符串进行一些解析来为自己创建一种特定于域的语言。但是,没有示例说明如何执行此操作,调试宏示例未显示如何处理字符串参数。
我想转换如下代码:
…变成我会手写的东西:
显然这个例子不是很有用,但我想看看一些简单的东西(多行/逗号分割,然后是转换),它可以帮助我实现更复杂的东西。
我的问题是宏如何获取输入字符串,解析它(在编译时!),以及在编译时可以运行什么样的代码(它只是语言的一个子集?我可以使用其他的宏/代码吗?导入的模块)?
编辑:根据答案,这里有一个可能的代码解决方案:
macros - 将复杂参数传递给 Nimrod 宏
我想将配置参数传递给宏。我已经有一个基于这些参数(序列元组)生成一串 Nimrod 代码的过程。我知道我可以传递一个字符串并用strVal转换它(如答案https://stackoverflow.com/a/19956317/334703所示)。我可以对更复杂的数据做同样的事情吗?
或者,我可以在编译时过程中使用此 Nimrod 代码字符串并调用诸如parseStmt 之类的过程吗?
编辑: Nimrod 代码的生成对于测试我的想法很有用,我同意我可能应该直接生成 AST。
这是我正在考虑的结构示例。
pointers - Nim 中的价值与参考模型是什么?
注意:我不是在问指针和引用之间的区别,对于这个问题,它完全无关紧要。
我找不到明确说明的一件事——Nim 使用什么模型?
像 C++ - 你有值并与new
你一起创建指向数据的指针(在这种情况下,变量可以保存指向指向...指向数据的指针的指针)?
或者像 C# 一样——您将 POD 类型作为值,但用户定义的对象具有引用(隐式)?
我发现只有解引用是自动的,就像在 Go 中一样。
改写。你定义你的新类型,比方说Student
(名字,大学,地址)。你写:
- 保存实际
student
数据(Student
类型/类) - 保持
student
指向数据的指针 - 保持
student
指向数据指针的指针
或者从那些方面来说有些是不可能的?
ubuntu - 为 Nimrod 安装 Babel 时遇到问题
我在安装时遇到问题babel
。
首先我从github下载了所有东西,
然后我尝试使用安装,
但后来我得到了这个,
我正在运行 Ubuntu 12.04 LTS,并且 Nimrod 0.9.2 安装在/opt/nimrod/
. 我的第一直觉是做sudo chmod a+rwx /opt/nimrod
,但这并没有解决任何问题。你们有什么想法吗?