问题标签 [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 投票
3 回答
234 浏览

concurrency - 在并发系统中进行垃圾收集的可能方法是什么?

我需要为支持并发的解释器编写垃圾收集器,但我只能找到有关垃圾收集的信息,而与并发无关。

多线程系统中是否有特定的对象垃圾收集方法?我在哪里可以找到有关其架构和实施的信息?

0 投票
1 回答
128 浏览

objective-c - @private 是如何实现的?

在 Objective-C 中,我很好奇实例变量的访问控制是如何实现的,例如@private,@protected等。

我曾考虑过以某种方式生成单独的结构,如下所示:

=>类似的东西

但我真的不知道。有人知道这是怎么做到的吗?

0 投票
6 回答
5013 浏览

compiler-construction - Haskell 编译器是如何工作的?

我在哪里可以获得一些描述 Haskell 编译器实际工作原理的论文/文档/任何内容?我阅读了很多 GHC 的文档,但在头痛后停止了。因此,不需要博士学位即可理解它并且不是以“您应该已经熟悉它”的风格编写的东西会更可取。如果它真的很长并且需要一些时间来理解它,这不是问题。

PS:最有趣的是关于 GHC 的事情,但任何事情都可以。

0 投票
1 回答
9795 浏览

java - java接口是如何在内部实现的?(虚拟表?)

C++ 有多重继承。在程序集级别实现多重继承可能非常复杂,但网上有很好的描述,说明这是如何正常完成的(vtables、指针修复、thunk 等)。

Java没有多重实现继承,但它确实有多重接口继承,所以我不认为每个类只有一个vtable的直接实现可以实现它。java内部是如何实现接口的?

我意识到与 C++ 不同,Java 是 Jit 编译的,因此不同的代码段可能会以不同的方式进行优化,并且不同的 JVM 可能会做不同的事情。那么,是否有许多 JVM 遵循的一些通用策略,或者是否有人知道特定 JVM 中的实现?

此外 JVM 经常去虚拟化和内联方法调用,在这种情况下根本不涉及 vtable 或等效项,因此询问实现虚拟/接口方法调用的实际汇编序列可能没有意义,但我假设大多数 JVM 仍然保留一些如果它们无法对所有内容进行虚拟化,则可以使用类的一般表示。这个假设是错误的吗?这种表示形式看起来像 C++ vtable 吗?如果是这样,接口是否有单独的 vtables,它们如何与类 vtables 链接?如果是这样,对象实例是否可以像 C++ 中的对象实例一样具有多个 vtable 指针(指向类/接口 vtable)?对同一对象的类类型和接口类型的引用是否总是具有相同的二进制值,或者它们是否会像在需要指针修复的 C++ 中那样不同?

(供参考:这个问题询问了有关 CLR 的类似问题,并且在这篇 msdn 文章中似乎有一个很好的解释,尽管现在可能已经过时了。我找不到任何类似的 Java 内容。)

编辑:

  • 我的意思是“GCC 编译器如何实现整数加法/函数调用/等”的意义上的“实现”,而不是“Java 类 ArrayList 实现 List 接口”的意义上。
  • 我知道这在 JVM 字节码级别是如何工作的,我想知道的是 JVM 在完成加载类文件和编译字节码后会生成什么样的代码和数据结构。
0 投票
3 回答
10757 浏览

matlab - Matlab:如何实现动态向量

我指的是这样的例子,我有一个函数来分析向量“输入”的元素。如果这些元素具有特殊属性,我将它们的值存储在一个向量“输出”中。问题是在乞讨时我不知道它需要存储在“输出”中的元素数量,所以我不知道它的大小。我有一个循环,在里面我绕过向量,通过索引“输入”。当我考虑这个向量的特殊元素时,它会捕获“输入”的值,并通过这样的句子将其存储在向量“输出”中:

问题是如果我之前没有“声明”“输出”,我会得到一个错误。我不喜欢在到达循环之前“声明”“输出”作为输出 = 输入,因为它存储了我不感兴趣的输入值,我应该想办法删除我存储的所有值与我有关。有人告诉我这个问题吗?谢谢你。

0 投票
1 回答
1151 浏览

python - 为什么在将 Python 中的生成器传递给函数时可以省略其周围的括号?

我只是在 Python 中尝试使用不同的语法将生成器作为参数传递给函数,我意识到虽然我一直在这样做,

这也有效:

这是在 Linux 上的 Python 2.6.6 上测试的。引擎盖下发生了什么?它只是语法糖吗?毕竟,通常解开的生成器对于解释器来说是无法解读的:

0 投票
6 回答
3385 浏览

python - Python:列表理解背后的机制

在 for 循环上下文中使用列表理解或in关键字时,即:

或者

  • 背后的机制如何in运作?
  • 它调用了哪些函数\方法X
  • 如果X可以遵守不止一种方法,优先级是什么?
  • 如何编写一个高效的X,以便列表理解会很快?
0 投票
1 回答
94 浏览

programming-languages - 解释的标准库

编程语言通常带有至少部分由该语言本身实现的标准库。

在解释语言的情况下,明显的实现是在解释器启动时读取库源文件,但这会遇到一个混乱但持久的问题,即确保解释器知道在哪里找到这些文件,即使它们都被移动了. 如果它们可以嵌入解释器本身会更干净,所以只有一个可执行文件。

通过将库源文件转换为 C 文字字符串,我可以看到一种简单的方法,但我很好奇是否有任何我忽略的陷阱或对该方法的改进。

所以我的问题是,现有的解释语言将语言本身中的库源文件附加到解释器?

0 投票
1 回答
136 浏览

java - Java 对象是如何构造的?

如果我创建一个像这样的类:

现在,如果我必须使用该类,我们只需创建该类的一个实例

我想知道实际对象是如何在系统中创建的。(在核心级别,对象的结构是什么。)

0 投票
1 回答
1039 浏览

haskell - 在哪里指定了在 Haskell 实现中是否应该允许使用 Unicode 标识符?

我想用标识符中的 Unicode 字符(非拉丁语)在 Haskell 中编写一些教育代码。(这样对于说英语以外的自然语言的人来说,标识符看起来既漂亮又自然,在其写作中没有使用拉丁字符。)因此,我开始寻找一个合适的 Haskell 实现来实现这一点。

但是语言规范中在哪里指定了此功能?在寻找符合要求的实现时,我将如何引用此功能?(已知哪些 Haskell 实现实际上支持 Unicode 标识符?)

事实证明,一个 Haskell 实现确实接受了我的带有 Unicode 标识符的代码,而另一个没有接受它。如果有一种方法可以形式化我的代码的这种要求,我希望它可能以语言功能切换的形式,这样如果我或其他人尝试运行我的代码,就会立即清楚他的实现是否丢失所需的功能,因此他应该寻找另一个。(这个特性也可能有一个 wiki 页面——“Unicode 标识符”,它会列出哪些现有实现支持它,这样如果需要它,人们就会知道去哪里。)

(顺便说一句,我在这个问题上加了一个“语法”标签,但我实际上认为这是词法水平的问题,比语言的语法低。这里有一个标签来表示词法的特征一种语言的水平,而不是一种语言的语法规范的特征?)