当前位置:  开发笔记 > 运维 > 正文

为什么Emacs中的fixnums只有29位?

如何解决《为什么Emacs中的fixnums只有29位?》经验,为你挑选了3个好方法。

他们为什么不改变呢?

编辑:问的原因是因为我是emacs的新手,我想将Emacs用作"程序员计算器".因此,我可以操作32位和64位整数,并让它们像在本机上一样运行.



1> Matthias Ben..:

Emacs-Lisp是一种动态类型语言.这意味着您需要在运行时使用类型标记.如果你想使用数字,你通常必须将它们打包成某种你可以指向的标记容器(即"盒子"它们),因为在运行时无法区分指针与机器整数没有某种标记方案.

出于效率原因,大多数Lisp实现因此不使用原始指针,但我认为称为描述符.这些描述符通常是单个机器字,可以表示指针,未装箱的数字(所谓的fixnum),或各种其他硬编码数据结构之一(例如,它通常也值得特别编码NIL和cons细胞,例如).

现在,显然,如果添加类型标记,则没有剩余的全部32位用于该数字,因此您在MIT方案中保留26位,或者在Emacs中保留29位或任何其他位数你没有用完标记.

各种动态语言的某些实现为fixnums保留了多个标记,以便它们可以为您提供30位甚至31位的fixnums.SBCL是Common Lisp的一个实现,它执行此操作.我不认为这导致的并发症对Emacs来说是值得的.在一个文本编辑器中,你甚至需要快速的30位fixnum算法而不是29位的fixnum算法,它甚至没有将它的Lisp代码编译成机器代码(或者它呢?我实际上不记得了)?你在Emacs-Lisp中编写distributed.net客户端吗?那么最好切换到Common Lisp!;)



2> cjm..:

其余的3位由Lisp解释器用作标志.(您可以通过为64位计算机编译Emacs来获得更大的整数.)



3> Jouni K. Sep..:

其他人评论了为什么fixnums只有29位宽.但是如果你想要一个程序员的计算器,请查看calc.它提供任意精度整数,矩阵运算,单位转换,图形通过gnuplot,统计函数,财务函数,科学函数,RPN和代数表示法,公式简化......它已经是Emacs的一部分,所以要开始,请访问"calc"的信息节点,从教程开始.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有