问题标签 [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.

0 投票
11 回答
3762 浏览

c# - C#中的C指针

这是 C# 中的函数声明:

与 C 中的这个相同:

即在C#中,被调用函数是否在后台接收指针?

0 投票
9 回答
17301 浏览

.net - .Net 是否有任何 Common Lisp 实现?

.Net 是否有任何 Common Lisp 实现?

0 投票
2 回答
312 浏览

language-agnostic - 垃圾收集和运行时类型信息

fixnum 问题让我想到了另一个我想了很久的问题。

许多关于垃圾收集的在线资料并没有说明如何实现运行时类型信息。因此,我对各种垃圾收集器了解很多,但并不真正了解如何实现它们。

fixnum 解决方案实际上非常好,很清楚哪个值是指针,哪个不是。还有哪些其他常用的存储类型信息的解决方案?

另外,我想知道 fixnum -thing。这是否意味着您仅限于每个数组索引上的 fixnums?或者是否有某种解决方法可以获得完整的 64 位整数?

0 投票
2 回答
811 浏览

python - Python中的意外列表理解行为

我相信我被嵌套范围规则和列表理解的某种组合所困扰。 Jeremy Hylton 的博客文章暗示了原因,但我不太了解 CPython 的实现,无法弄清楚如何解决这个问题。

这是一个(过于复杂?)示例。如果人们有一个更简单的演示它,我想听听。问题:使用 next() 的列表推导填充了上一次迭代的结果。

编辑:问题:

这到底是怎么回事,我该如何解决?我必须使用标准 for 循环吗?显然,该函数运行了正确的次数,但列表推导式以最终值结束,而不是每个循环的结果。

一些假设:

  • 发电机?
  • 懒惰填写列表推导?

代码

输出

0 投票
5 回答
7181 浏览

c++ - c++中字符整数值的范围

我正在阅读The C++ Programming Language并在其中 Stroustrup 指出 char 的 int 值的范围可以从 0 到 255 或 -127 到 127,具体取决于实现。它是否正确?看起来应该是从-128到127。如果不是,为什么在第二种实现可能性中它们只有255个可能的值,而不是256。

0 投票
2 回答
981 浏览

x86 - 进程内存中的 Unicode 字符串

处理内存中 unicode 字符串的首选格式是什么?为什么?

我正在通过为其生成可执行文件映像来实现编程语言。显然,一个工作的编程语言实现需要一个处理字符串的协议。

我考虑过使用动态数组作为字符串的基础,因为它们实现起来非常简单,并且对于短字符串非常有效。当以这种方式使用字符串时,我只是不知道字符的最佳可能格式。

0 投票
1 回答
174 浏览

x86 - 与 smalltalk 对象的动态链接

我计划在我的 smalltalk 方言中实现动态链接。问题在于让消息传递与动态链接一起工作。

消息传递本身就是这么简单:将带有选择器的消息发送给对象,对象从它的协议中选择与选择器匹配的方法,然后处理与消息绑定的数据并返回结果。

在基于图像的实现中,可以以非常直接的方式实现消息传递 - 您的消息选择器可以只是从全局符号表转换而来的整数,您的协议可以只是其中包含整数和地址的哈希表。假设它全部用该全局符号表编译成一个大图像。

在动态链接中,您不能假设符号表指向正确的选择器。您可以使用字符串作为选择器来解决问题,但您注定语言会变慢。

有一种方法,它涉及复制协议和选择器表,以便进程正确地重新定位它们。但这听起来像是一项相当多的工作。

有没有更好的方法来解决这个问题?另外,动态链接值得吗?如何实现选择器和协议的重定位?

0 投票
1 回答
618 浏览

linux - 写保护的虚拟页面,catch write

是否存在一种方法可以捕获写入受写保护的页面?

我计划做一个类似自我的对象系统,您可以在其中复制对象以实例化它。(因为与其他的相比,这听起来简单而紧凑)显然,为此目的创建的对象应该以某种方式进行写保护。我已经看到有一种方法可以在 ELF 中的程序头中标记写保护的内容。(RE、RWE、RW 标志)

这是否提供写保护?我记得它应该引发一个段错误,这是真的吗?如何将写入捕获到写保护页面。这是实现我想要的东西的好方法吗?还有更好的方法吗?

0 投票
4 回答
27482 浏览

c++ - C++异常处理运行时是如何实现的?

我对 C++ 异常处理机制的工作原理很感兴趣。具体来说,异常对象存储在哪里以及它如何通过多个范围传播直到被捕获?它是否存储在某个全球区域?

由于这可能是特定于编译器的,有人可以在 g++ 编译器套件的上下文中解释这一点吗?

0 投票
1 回答
1386 浏览

compiler-construction - 在使用 LLVM 编写 JIT 时,您将如何重用 C 操作码实现?

在 llvm 教程和示例中,编译器通过这样的调用输出 LLVM IR

但是很多解释器都是这样写的:

您将如何提取这些代码片段中的每一个以使用 LLVM 制作 JIT,而无需在 LLVM IR 中重新实现每个操作码?