原文(英文版本)见这里.

以下是我的翻译兼一些技术方面的背景资料:

1 1980年,我开始编程.

2 Basic,400 steps (此句不知如何翻译)

3 1988年,我遇到了Emacs,在学校的Sun-3上,和200多个学生共用.

4 Emacs实际上是被禁止使用的,因为消耗太多内存.所以我只是尝试了一下了.

5 我可以自由下载Emacs并阅读其源代码.

6 Emacs是我的第一个Lisp解释器.

7 从Emacs我学到了很多关于语言实现的知识.

8 例如,emacs的整数实现(Embedding integer in pointers)

参考Lisp_Object定义,在Emacs源代码的lisp.h中,Lisp_Object是一个既可以作为指针使用又可以作为整数使用的类型具体代码见下,注意Lisp_Int为0,使得非负整数可以直接转换为对应的List_Object类型:

#define VALBITS 29
#define GCTYPEBITS 3
enum Lisp_Type{Lisp_Int = 0,/*Symbol.  XSYMBOL (object) points to a struct Lisp_Symbol.*/Lisp_Symbol = 2,/*Miscellaneous.  XMISC (object) points to a union Lisp_Misc,
whose first member indicates the subtype.*/Lisp_Misc = 3,/*String.  XSTRING (object) points to a struct Lisp_String.
The length of the string, and its contents, are stored therein.*/Lisp_String = LISP_STRING_TAG,/*Vector of Lisp objects, or something resembling it.
XVECTOR (object) points to a struct Lisp_Vector, which contains
the size and contents.  The size field also contains the type
information, if it's not a real vector object.*/Lisp_Vectorlike = 5,/*Cons.  XCONS (object) points to a struct Lisp_Cons.*/Lisp_Cons = 6,Lisp_Float = 7,};typedef union Lisp_Object{/*Used for comparing two Lisp_Objects;
also, positive integers can be accessed fast this way.*/EMACS_UINT i;struct{EMACS_INT val  : VALBITS;enum Lisp_Type type : GCTYPEBITS;} s;struct{EMACS_UINT val : VALBITS;enum Lisp_Type type : GCTYPEBITS;} u;}
Lisp_OLisp_Stringbject;

9 又例如Emacs的内存自动回收机制(Mark and sweep garbage collection)

具体细节参考这里的讨论.

10 C和Lisp的Calling conventions(不好翻,基本上就是函数如何调用,函数参数的内存模型之类…)

11 我完全理解Lisp怎么工作的

12 我被Lisp Objects迷住了

13 当我得到Sparc工作站时我开始使用Emacs

14 我完全被迷住了,Emacs成为我的一部分

15 而且Emacs任何我不喜欢的部分我都可以改,Emacs完全可配置.

16 Emacs使我明白了任何东西都可以被程序员改变

17 完全的自由

18 编辑时可以无视键位设置

19 我想用Emacs做所有的事,编程,文档,邮件…

20 所以我写了"cmail",我的第一个严肃的Lisp程序,我每天用它

21 1993年,我开始搞我的Ruby

22 Ruby的设计受到Emacs实现的影响,例如整数和tagged pointer合用,相似的GC,和Lisp类似的Object Model

tagged pointer的细节请参考上文的C代码,高地址的3bit用作判别数据类型,低地址的29bit用作指针或者整数(取决于数据类型)

23 接下来我把Smalltalk的OO系统加上去

24 语法我用Algol/Ada/Eiffel

25 但是我是Emacs狂,所以在Emacs中支持auto-indent是必须的

26 在1993年,类似的语法要支持auto-indent很难

27 所以我就写了自己的ruby-mode.el,试图用elisp和正则表达式(regex)解决这个问题.

28 一个礼拜后,我在给Ruby加上end关键字后终于成功了

29 如果我不能让我的emacs下的ruby-mode成功,那么Ruby的语法会更像C

30 这样就和其他脚本语言差不多,Ruby也不会那么受欢迎

31 小结

  • Emacs教我什么是软件自由(freedom for software)
  • Emacs教我如何读代码
  • Emacs让我认识到Lisp的威力
  • Emacs教我如何实现语言核心
  • Emacs教我如何进行内存自动回收(Garbage Collector)
  • Emacs有助于我写代码和调试
  • 我用Emacs写文档邮件
  • Emacs让我成为高效程序员
  • Emacs让我成为黑客
  • Emacs永远改变了我的人生

松本行弘(Ruby发明者):Emacs怎样改变了我的人生相关推荐

  1. 人物访谈:松本行弘谈Ruby

    2011年11月11日,图灵社区就Ruby的设计和中国程序员关注的诸多话题,采访了Ruby设计者松本行弘先生,以下为访谈内容. 图灵社区:<松本行弘的程序世界>中文版上市之后,在程序员(不 ...

  2. 松本行弘为什么要开发Ruby

    Ruby是起源于日本的编程语言.近年来,特别是因为在Web开发方面的效率很高,Ruby引起了全世界的关注,它的应用范围也扩展到了很多企业领域. 作为一门编程语言,Ruby正在被越来越多的人所了解,而作 ...

  3. 松本行弘:我的编程人生

    生平: 松本行弘(Yukihiro Matsumoto),1965年4月14日出生于日本鸟取县.1984年,就读于筑波大学第三学科信息学系.2年后休学,成为末日圣徒耶稣基督教会的宣讲师.大学复学后,加 ...

  4. 带您走进松本行弘的程序世界

    编者按: 在此书上市之前,特别对此书做一下方向说明,<松本行弘的程序世界>适合各层次程序设计人员和编程爱好者,也可以供相关技术人员参考. 本书的目的不是深入讲解哪种特定的技术,也没有全面讨 ...

  5. 转:松本行弘:我的编程人生(r6笔记第83天)

    生平: 松本行弘(Yukihiro Matsumoto),1965年4月14日出生于日本鸟取县.1984年,就读于筑波大学第三学科信息学系.2年后休学,成为末日圣徒耶稣基督教会的宣 讲师.大学复学后, ...

  6. [Ruby编程语言].弗拉纳根_松本行弘读书笔记

    Ruby is Object-Oriented, Ruby是一门完全的面向对象语言.Ruby里的每个值都是对象 迭代器(iterator)行为类似于循环,包含在花括号中的代码称为代码块(block), ...

  7. Ruby中的设计模式——《松本行弘的程序世界》

    < 设计模式 > 一书是用C++ 和 Smalltalk 介绍模式实例的.看了那些例子,大家都会感觉到,绝大多数的模式用 Smalltalk 实现起来非常简单.这是为什么呢? 因为Smal ...

  8. 我和Ruby之父松本行弘的握手

    5月21日早上,去广大会展中心,参加shanghai on Rails组织的ruby china conference,进会场之前的路上遇见kembo公司的sasaki san和天狗软件的koz sa ...

  9. 《松本行弘的程序世界》中文版原作者序

    从年轻的时候开始,我就一直对编程语言有着极为浓厚的兴趣.比起"使用计算机去干什么?"这一问题,我总是一门心思在想着"如何将自己的意图传达给计算机?".从这个意义 ...

最新文章

  1. “评IDC,送免费主机”活动,主机无任何限制,无广告
  2. linux命令grep如何使用,Linux下如何使用grep搜索文本
  3. python怎么导入csv文件-python读取CSV文件
  4. poj 1821 fence
  5. 【经验】对“面试造火箭,入职拧螺钉”的看法
  6. u盘文件看得见却打不开_U盘出问题了,为什么自己尝试恢复后却发现很多文件打不开?...
  7. android自动退出对话框,Android开发 在用EditText对话框Dialog退出后实现输入盘的退出...
  8. STM32F407控制AD7606 采用HAL库的TIM和SPI
  9. 集合源码阅读:LinkedList
  10. 第十届 蓝桥杯大赛 青少年创意编程 C++组
  11. 我不够格,但我还是希望事情到此为止,继续工作罢
  12. 【英语学习】【WOTD】resuscitate 释义/词源/示例
  13. SpringCloud服务注册与发现Eureka
  14. Element - Vue UI Framework
  15. 怎么在Guitar Pro乐谱中加入哇音
  16. HTML 纯数字或字母 超出div容器,如果是文字则可正常自动折行
  17. 金南瓜 secs/gem协议 符合SEMI secs/gem协议 国际通讯协
  18. IE浏览器无法下载文件的解决办法(windows服务器)
  19. 对一个浮点数保留两位小数
  20. java正则表达式双引号_java正则表达式去掉双引号

热门文章

  1. 开源项目github
  2. [收藏]POSIX标准
  3. 如何从官网下载MySQL最新版本的安装包?
  4. 视频直播技术详解之采集
  5. java入门好学吗_java好学吗?我是小白中的小白,零基础...
  6. GPRS模块(sim900a)联网(PC)测试失败篇
  7. IT培训有靠谱的机构吗,长什么样的?
  8. [统计学笔记] (十)一元线性回归
  9. OAuth 2.0 基础(2)
  10. java socket 打印机_思普瑞特,小票打印机和标签打印机java网络驱动设计与实现...