Discussion:
[Lisp-cn] 各种Lisp是如何实现“符号”的?
宋为
2016-07-22 03:30:42 UTC
Permalink
如题,觉得symbol这个数据类型比较神奇,不知道应该如何正确地实现它。

做过一个小Lisp,是通过一个映射表,把每个符号的字符串对应到一个整数上,编译字节码的时候遇到符号就来查这个表。

但是这样做带来一个问题:

我注意到很多Common
Lisp都支持把源文件编译成fasl。若是在多个文件中都共用一些符号,比如A、B、C这种,以我的方法,直接导出编译好的字节码后就不能确保能够保证每个文件中符号的代号一致,文件甲中编译的符号A的代号可能是42,到了文件乙中,可能就是24了。

各种Lisp实现是如何处理这个问题的?
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn

---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到lisp-cn+***@googlegroups.com。
要查看更多选项,请
Liu Cheng
2016-07-22 07:28:07 UTC
Permalink
就是普通的链接时分配就行了吧,和.o文件里面的符号一样的
Post by 宋为
如题,觉得symbol这个数据类型比较神奇,不知道应该如何正确地实现它。
做过一个小Lisp,是通过一个映射表,把每个符号的字符串对应到一个整数上,编译字节码的时候遇到符号就来查这个表。
但是这样做带来一个问题:
我注意到很多Common
Lisp都支持把源文件编译成fasl。若是在多个文件中都共用一些符号,比如A、B、C这种,以我的方法,直接导出编译好的字节码后就不能确保能够保证每个文件中符号的代号一致,文件甲中编译的符号A的代号可能是42,到了文件乙中,可能就是24了。
各种Lisp实现是如何处理这个问题的?
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”群组。
要查看更多选项,请访问 https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn

---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到lisp-cn+***@googlegroups.com。
要查看更多选项,请��
宋为
2016-07-24 11:46:18 UTC
Permalink
但是符号也有可能被保存在各种数据结构(如数组)中。

如果加载时分配,也就意味着我需要把fastload文件中的所有数据结构遍历一遍咯?
如果要导出fastload文件,那么在导出的时候要把符号映射表整个导出,那么在加载时才可以对照着来分配新的代号咯?

* 我把表示符号的那个整数称为符号的代号。
Post by Liu Cheng
就是普通的链接时分配就行了吧,和.o文件里面的符号一样的
Post by 宋为
如题,觉得symbol这个数据类型比较神奇,不知道应该如何正确地实现它。
做过一个小Lisp,是通过一个映射表,把每个符号的字符串对应到一个整数上,编译字节码的时候遇到符号就来查这个表。
但是这样做带来一个问题:
我注意到很多Common
Lisp都支持把源文件编译成fasl。若是在多个文件中都共用一些符号,比如A、B、C这种,以我的方法,直接导出编译好的字节码后就不能确保能够保证每个文件中符号的代号一致,文件甲中编译的符号A的代号可能是42,到了文件乙中,可能就是24了。
各种Lisp实现是如何处理这个问题的?
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”群组。
要查看更多选项,请访问 https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn

---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到lisp-cn+***@googlegroups.com。
要查看更多选项,请访问
Loading...