问题标签 [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.
objective-c - 关于结构的基本问题
所以我们可以通过写来引用 first_structure 的成员
如果我写:
然后我可以使用标签 *two_numbers* 创建第二个结构,如下所示:
我也明白 typedef 可以用来创建同义词。
但我无法理解下面的代码(来自页面http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocObjectsClasses.html):
因此,每个对象都有一个 isa 变量,告诉它它是什么类的实例。
怎么能说????请指导我了解此代码的含义。
谢谢你。
compilation - 字节码堆栈与三个地址
在设计字节码解释器时,这些天是否就堆栈或三地址格式(或其他什么?)更好?我正在考虑这些考虑:
目标语言是一种与 Javascript 非常相似的动态语言。
性能很重要,但目前开发速度和可移植性更重要。
因此,实现暂时将是严格的解释器;JIT 编译器可能会在资源允许的情况下稍后出现。
解释器将用 C 语言编写。
lisp - 在 Lisp 和其他函数式语言中,为什么长度不是 O(1)
Lisp 中的列表原语具有如下定义的运算符长度:
为什么某些 Lisp 的实现者不能将长度作为在恒定时间内计算的原语?
谢谢
arrays - 用于共享数组子范围的智能垃圾收集器?
在这个关于为什么 substring 在 C# 中采用 O(n) 的流行问题中,提供的主要答案之一认为,如果分配了一个大数组并且通过让新字符串计算的子字符串只引用数组的一小部分,那么垃圾收集器将即使不再引用原始字符串,也无法回收包含较大字符串的字符数组。
这似乎是一个完全有效的答案,但在理论上似乎可以为数组构建一个垃圾收集器,允许对数组的大部分进行垃圾收集,同时留下一些仍在使用的小子数组。换句话说,如果有一个 50,000 元素的数组,其中只有一个小的 100 元素切片仍在使用,垃圾收集器可以将数组分成三部分 - 100 元素切片之前的元素,100 元素切片之前的元素切片本身,以及 100 元素切片之后的元素 - 然后垃圾收集这些片段中的第一个和最后一个。
我的问题是是否有任何语言实现实际上使用这种垃圾收集器,或者它是否仅存在于理论上。有谁知道有这样一个垃圾收集器的语言实现的例子吗?
python - 不同实现(jython/ironpython/pypy/etc)大致兼容的cpython版本是什么
即jython(或其他实现)版本xy大致相当于cpython版本ab
请列出替代实现的版本,并随意列出多个版本
,以便此列表在将来仍然有用。如果可能,请列出
每个版本的任何大的不兼容性(使用 cpython),不包括 c 接口和依赖或引用计数等内容。
c - 将函数式语言编译为 C
假设您正在将一种函数式语言编译为可移植的 C,并且还假设由于各种原因您想要精确而不是保守的垃圾收集。垃圾收集器没有可移植的方式(在一般情况下可能根本没有办法)来确定 C 堆栈上什么是指针,什么不是指针。在我看来,这个问题有两种解决方案:
阴影堆栈。让每个 C 函数维护有关什么是指针和不是指针的簿记信息。这是例如 LLVM 推荐的方法。
利用您正在编译函数式语言这一事实,这意味着主线代码没有副作用。当分配器检测到内存不足时,它不会调用垃圾收集器本身,而是通过 longjmp 中止当前操作返回到调用垃圾收集器的主循环(在可能包含指针的变量集已知的上下文中)提前)然后重新开始操作。
在我看来,如果您正在处理适用于第二种方法的纯函数式语言,它必须比第一种方法更有效,并且更容易与手写 C 混合。
有没有我忽略的问题?对这项技术的现有讨论或实现有任何参考吗?
compiler-construction - 编译语言中的垃圾收集实现
在实现精确的垃圾回收时,总是存在一个问题,即确定堆栈上的哪些字是指针,哪些是其他类型的数据,例如整数或浮点数。解释型语言通常通过将所有内容都变成指针来解决这个问题。某些语言(例如 Lisp)的编译器通常通过使用标记位来区分指针和整数来解决它。
但是对于 Java 和 C# 等支持完整未装箱机器字整数和浮点数的语言的 JIT 编译器呢?它们如何分辨堆栈和 CPU 寄存器的哪些内容是指针?
compiler-construction - 在设计编译器时处理递归是否需要特殊处理?
函数调用通过堆栈数据结构处理。这足以支持递归吗?
c# - 'yield' 关键字是语法糖吗?它的实现是什么
可能重复:
yield 语句实现
我看过msdn 文档,上面写着:
yield 关键字向编译器发出信号,表明它出现的方法是一个迭代器块。编译器生成一个类来实现迭代器块中表达的行为。在迭代器块中,yield 关键字与 return 关键字一起使用,为枚举器对象提供值。
所以这意味着yield
关键字是一种语法糖,编译器完成了生成迭代器的繁重工作。(我对么 ?)
那么这个语法糖生成的实现代码是什么。
variables - 不使用“set!”如何实现“letrec”?
不使用如何letrec
实现set!
?
在我看来,这set!
是一种命令式编程结构,使用它会失去函数式编程的好处。