问题标签 [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.
c# - C#中的C指针
这是 C# 中的函数声明:
与 C 中的这个相同:
即在C#中,被调用函数是否在后台接收指针?
.net - .Net 是否有任何 Common Lisp 实现?
.Net 是否有任何 Common Lisp 实现?
language-agnostic - 垃圾收集和运行时类型信息
fixnum 问题让我想到了另一个我想了很久的问题。
许多关于垃圾收集的在线资料并没有说明如何实现运行时类型信息。因此,我对各种垃圾收集器了解很多,但并不真正了解如何实现它们。
fixnum 解决方案实际上非常好,很清楚哪个值是指针,哪个不是。还有哪些其他常用的存储类型信息的解决方案?
另外,我想知道 fixnum -thing。这是否意味着您仅限于每个数组索引上的 fixnums?或者是否有某种解决方法可以获得完整的 64 位整数?
python - Python中的意外列表理解行为
我相信我被嵌套范围规则和列表理解的某种组合所困扰。 Jeremy Hylton 的博客文章暗示了原因,但我不太了解 CPython 的实现,无法弄清楚如何解决这个问题。
这是一个(过于复杂?)示例。如果人们有一个更简单的演示它,我想听听。问题:使用 next() 的列表推导填充了上一次迭代的结果。
编辑:问题:
这到底是怎么回事,我该如何解决?我必须使用标准 for 循环吗?显然,该函数运行了正确的次数,但列表推导式以最终值结束,而不是每个循环的结果。
一些假设:
- 发电机?
- 懒惰填写列表推导?
代码
输出
c++ - c++中字符整数值的范围
我正在阅读The C++ Programming Language并在其中 Stroustrup 指出 char 的 int 值的范围可以从 0 到 255 或 -127 到 127,具体取决于实现。它是否正确?看起来应该是从-128到127。如果不是,为什么在第二种实现可能性中它们只有255个可能的值,而不是256。
x86 - 进程内存中的 Unicode 字符串
处理内存中 unicode 字符串的首选格式是什么?为什么?
我正在通过为其生成可执行文件映像来实现编程语言。显然,一个工作的编程语言实现需要一个处理字符串的协议。
我考虑过使用动态数组作为字符串的基础,因为它们实现起来非常简单,并且对于短字符串非常有效。当以这种方式使用字符串时,我只是不知道字符的最佳可能格式。
x86 - 与 smalltalk 对象的动态链接
我计划在我的 smalltalk 方言中实现动态链接。问题在于让消息传递与动态链接一起工作。
消息传递本身就是这么简单:将带有选择器的消息发送给对象,对象从它的协议中选择与选择器匹配的方法,然后处理与消息绑定的数据并返回结果。
在基于图像的实现中,可以以非常直接的方式实现消息传递 - 您的消息选择器可以只是从全局符号表转换而来的整数,您的协议可以只是其中包含整数和地址的哈希表。假设它全部用该全局符号表编译成一个大图像。
在动态链接中,您不能假设符号表指向正确的选择器。您可以使用字符串作为选择器来解决问题,但您注定语言会变慢。
有一种方法,它涉及复制协议和选择器表,以便进程正确地重新定位它们。但这听起来像是一项相当多的工作。
有没有更好的方法来解决这个问题?另外,动态链接值得吗?如何实现选择器和协议的重定位?
linux - 写保护的虚拟页面,catch write
是否存在一种方法可以捕获写入受写保护的页面?
我计划做一个类似自我的对象系统,您可以在其中复制对象以实例化它。(因为与其他的相比,这听起来简单而紧凑)显然,为此目的创建的对象应该以某种方式进行写保护。我已经看到有一种方法可以在 ELF 中的程序头中标记写保护的内容。(RE、RWE、RW 标志)
这是否提供写保护?我记得它应该引发一个段错误,这是真的吗?如何将写入捕获到写保护页面。这是实现我想要的东西的好方法吗?还有更好的方法吗?
c++ - C++异常处理运行时是如何实现的?
我对 C++ 异常处理机制的工作原理很感兴趣。具体来说,异常对象存储在哪里以及它如何通过多个范围传播直到被捕获?它是否存储在某个全球区域?
由于这可能是特定于编译器的,有人可以在 g++ 编译器套件的上下文中解释这一点吗?
compiler-construction - 在使用 LLVM 编写 JIT 时,您将如何重用 C 操作码实现?
在 llvm 教程和示例中,编译器通过这样的调用输出 LLVM IR
但是很多解释器都是这样写的:
您将如何提取这些代码片段中的每一个以使用 LLVM 制作 JIT,而无需在 LLVM IR 中重新实现每个操作码?