问题标签 [language-implementation]
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'。有任何想法吗?
lua - Lua:理解表数组部分和哈希部分
在Lua 5.0的实现的第 4 节,表格中,有一个例子:
local t = {100, 200, 300, x = 9.3}
所以我们有t[4] == nil
. 如果我写t[0] = 0
,这将去散列部分。
如果我写t[5] = 500
它会去哪里?数组部分还是散列部分?
如果有区别,我很想听到 Lua 5.1、Lua 5.2 和 LuaJIT 2 实现的答案。
eval - 在字节码编译语言中实现 REPL/eval
我正在创建一种编译为字节码并在自定义 VM 上运行的小型语言,其架构在很大程度上受到了我所阅读的有关 Python 和 Lua 的影响。有两个堆栈 - 一个存储函数参数、局部变量和临时值的数据堆栈,以及一个包含每个活动函数调用一个条目的帧堆栈。帧堆栈上的每个条目都包含诸如当前函数、指令指针(当前函数的字节码数组的索引)和基指针(数据堆栈的索引 - 标记函数的 args/locals 开始的位置)等信息。
我陷入困境的地方是实现 REPL,或者更具体地说,是eval()
. 到目前为止的想法是在同一个堆栈框架内不断评估用户输入 - 但我看不到一种干净的方法来允许在内部创建新的局部变量eval()
。因为临时数据总是在堆栈上的本地人之上(堆栈向上增长),所以我能想到的唯一方法是以某种方式注意到新的本地人已经被创建eval()
,然后使用一些黑客来重新排列堆栈 - 但这在一般情况下会产生问题。例如,如果有一个有条件使用的递归函数,eval()
我需要遍历帧堆栈并可能调整每个帧的数据堆栈。
我的虚拟机是否能够支持合理的实现eval()
?如果是,上述方法是否合理?如果不是,需要哪些架构更改?
c - 了解 memcpy() 的实现
我正在寻找 memcpy.c 的实现,我发现了一个不同的 memcpy 代码。我不明白他们为什么这样做 (((ADDRESS) s) | ((ADDRESS) d) | c) & (sizeof(UINT) - 1)
c - 如何在标准 C89 的位级别使用双打?
我正在尝试用我用 C 编写的一种小语言实现来实现NaN 标记。为此,我需要取一个 double 并直接戳它的位。
我现在使用联合铸造让它工作:
但是转换为联合类型不是标准的 ANSI C89。有没有可靠的方法来做到这一点:
-std=c89 -pedantic
干净吗?- 不违反严格的别名规则吗?
可以在这样的表达式上下文中使用:
/li>
python - 为什么 CPython 字典不受负一和负二的哈希值的影响
哈希表应该是高性能的映射,并且因为 Python dicts 是用哈希表实现的,所以它们也是高性能的。但是在查看负整数的哈希值时,我遇到了一个奇怪的结果。
但这显然对dicts没有影响:
为什么会发生这种情况,为什么我使用它们时不会影响 dicts?
haskell - haskell 实现问题
Haskell 是一门非常棒的语言。我喜欢它。但是作为一个 C++ 程序员,对计算机架构有一些基本的了解,我真的很想知道 Haskell 的实现细节。
我的意思是,例如,map
功能。我知道语法,结果。但是,我想知道这个功能是如何在 RAM 中真正起作用的。因为 C 家族语言对语法和计算机行为之间的映射关系非常清楚。
那么有人对函数式编程语法背后的计算机行为有想法吗?或者任何关于这方面的书,比如“C++ 对象模型内部”?
regex - 模式匹配语言知识、模式匹配方法
我正在尝试实现匹配“语法”和语言的模式。我知道正则表达式,但这些对于我的范围来说还不够。我已经个性化了一些“数学”运算符。在下面的示例中,我将假设模式数学的主题是字符串,但这不是必需的。
阅读了下面的描述:问题是,有没有人知道一个数学理论明确地表明了这一点,或者任何语言都采用了相同的方法来实现它?我想看看它以便有想法!
方法描述:
起初我们有字符。字符可以聚合形成字符串。
模式是:a) 单个字符 b) 具有操作符 matchAny 的有序模式组 c) 具有操作符 matchAll 的有序模式组 d) 稍后会看到的其他各种运算符。
说明:我们有一个主题字符串和一个起始位置。
如果我们检查单个字符的匹配,那么如果匹配,则将当前位置向前移动一个位置。
如果我们使用操作符 matchAny 检查有序模式组的匹配,那么它将按顺序检查组中的每个元素,并且我们将有一个起始位置的扩散,这些起始位置将乘以可能的匹配数量。比赛的长度。
EG 假设模式组是 { "a" "aba" "ab" "x" "dd" } 并且正在检查的字符串是:"Dabaxddc",当前位置为 2(从 1 开始计数)。然后将 matchAny 与前一组应用,我们得到 "a" mathces "aba" 匹配和 "ab" 匹配,而 "x" 和 "dd" 不匹配。在进行这些匹配之后,有 3 个起始位置 3 4 5(对应于 "a" "ab" "aba" )。
我们可以通过接受多个起始位置来继续我们的模式匹配。所以现在我们可以继续检查下一个案例并检查 matchAll。matchAll 表示所有模式必须按顺序匹配并按顺序应用。matchAll 的子情况是 match0+ match1+ 等。
我必须补充一点,试图提出这个问题的同样事实已经帮助了我并清除了一些事情。但我想知道类似的方法来研究它们。请仅使用您使用的语言,而不是参考书目!!!
c - EOF 是否保证为-1?
用 C 编写代码时,使用-1
和EOF
可互换的风格是否良好?标准保证EOF
是-1
吗?还是定义了价值实现?
例如,如果一个函数EOF
在某些情况下返回,那么测试该函数是否返回是一种好方法-1
吗?
如果某个函数-1
在某些情况下返回,那么测试该函数是否返回是否是一种好方法EOF
?
python - self 参数是如何神奇地传递给实例方法的?
我正在做代码学院流,我对 Ruby 有一点经验。我不明白为什么check_angles(self)
函数需要self
参数。
我感到困惑的原因是我不明白在调用时将 self 参数传递给函数的原因。似乎函数调用(代码块的最后一行)隐式传递了 self,但该函数需要将 self 显式定义为参数。
为什么是这样?