为什么在Emacs只有29位fixnums?(Why are fixnums in Emacs on

2019-06-24 14:14发布

而他们为什么不改呢?

编辑:请问原因是因为我是新来的Emacs,我想使用Emacs作为一个“程序员计算器”。 所以,我可以处理32位和64位整数,并让他们表现为他们会在本地机器上。

Answer 1:

的Emacs Lisp是一个动态类型语言。 这意味着你需要在运行时类型的标签。 如果你想用数字的工作,你会因此通常必须将它们打包成某种标签的容器,你可以指向(即“盒子”它们),因为没有在运行时机器整数区分指针方式没有某种形式的标记方案。

出于效率的考虑,大多数Lisp的实现也因此无法使用原始指针,但我认为这是所谓的描述符。 这些描述符通常是一台机器字可表示一个指针,未装箱号(所谓的长整数 ),或各种其他硬编码的数据结构中的一个(它通常值得特别编码NIL和缺点细胞,同样,例如)。

现在,很明显,如果添加的类型标签,你没有完整的32位离开的数量,因此你留下了26位在MIT计划或29位作为在Emacs或任何其他位数是你没有用于标记使用了。

各种动态语言的某些实现预留多个标签fixnums,使他们可以给你30位甚至31位fixnums。 SBCL是一个实现的Common Lisp的是做到这一点 。 我不认为这会导致并发症是值得的,Emacs的,虽然。 你经常需要快速的30位运算长整数作为一个文本编辑器甚至不编译它的Lisp代码转换成机器代码而不是29位的算术长整数(或不呢?我不记得了,实际上)? 你写在Emacs-Lisp的一个distributed.net客户端? 更好地切换到Common Lisp的话! ;)



Answer 2:

剩下的3位由Lisp解释用作标志。 (您可以通过编译的Emacs的64位机得到更大的整数)。



Answer 3:

也有人评论为什么fixnums只有29位宽。 但是,如果你想有一个程序员的计算器,检查出钙 。 它提供了任意精度的整数,矩阵运算,单位转换,图形通过gnuplot的,统计功能,金融功能,科学的功能,RPN和代数符号,公式简化......和它已经Emacs的一部分,所以上手,请访问对于“计算”,并在教程开始信息节点。



Answer 4:

其它三个比特被用作对象的类型的标签。 过去,这是如此普遍,一些CPU架构包括至少在其指令集标记的整数一些支持: 的Sparc , 阿尔法 , 巴勒斯 ,和K-机为例子。 现在我们让Lisp的运行时处理标签,无需额外的硬件支持。 我建议你阅读的第一个链接,有关SPARC,如果你想获得历史的简要概述。



Answer 5:

在许多Lisp的实现,有的一个字位被用于标签。 这使物像垃圾收集知道什么是一个指针,什么不是,而不必去猜测。

你为什么关心的elisp的Fixnum对象有多大? 您可以打开巨大的文件,因为它是。



Answer 6:

我使用的Common Lisp解释CLISP作为一个程序员的计算器。 Common Lisp的有sanest数字处理,我在任何编程语言见过; 最值得注意的是,它具有任意大小,即大数,以及有理数的整数。 它也有任意数量的基地和位功能大数输入。 如果你想在Emacs来计算,你可以在MX shell中运行CLISP。 作为奖励,语法几乎是完全一样的,你会在的Emacs Lisp使用什么。



Answer 7:

这仅适用于32位架构,真实,并能根据构建选项进行更改。 其他位被用于标记的基本数据结构。

您可以使用一个64位的构建具有更大的整数,并且有任意大整数运算包。

或者,你只是在寻求一个反问要健全生气和重要...



文章来源: Why are fixnums in Emacs only 29 bits?
标签: emacs lisp elisp