笔记目前还在更新中,预计下周能完更。同时项目里还有 orgmode 的官方文档的翻译,后续也会出一个 org 的笔记,有兴趣的同学可以点点 star
感觉一些英文梗可能需要用括号标注一下?
“参数”一词来源于数学中的用法,并不指两个人之间的争论;相反,它指的是传递给函数的信息
改成这样:
“参数” (argument) 一次来源于数学中的用法, 并非指两个人之间的争论 (argument); 相反, 它指的是传递给参数的信息 (parameters)
还有一些英文表达和中文表达不同的问题 (?) 比如 “回显区域” (echo area?) 有点怪怪的, 安装函数定义 (install the definition of a function?) .
不过感觉很不错的样子, 可以用来拿给别人传销 emacs 了.
这种好人好事应该点个支持,另外,3楼说的有道理。
感谢建议,项目还在持续完善中,暑假会抽空把文章重新润色一遍,或者有空的小伙伴也可以提交 PR 一起参与本项目的更新
尾递归是一种特殊的递归形式,它可以被编译器优化为迭代,从而避免递归带来的堆栈溢出问题
Emacs 似乎是没有尾递归优化的?随便测试了一下,纯解释、byte-compile
、native-compile
都会 Lisp nesting exceeds ‘max-lisp-eval-depth’
。(不知道 Guilemacs 怎么样)
另外,因为不经常看文档所以花了好久才反应过来另两篇是 C-h R eintr/orgguide
的翻译。至少把许可证和来源放一放会比较好吧。
有的,named-let
当时翻译完了给orgmode官方发了个邮件,希望能在orgmode加一个我这个中文翻译。然后官方回我了让我改下page发给他们,我没明白啥意思就一直没回这个邮件:cry:
是 这封邮件 吗?可能是因为 orgguide 文件在 orgmode(而不是 orgweb)仓库里,没有加翻译的先例,所以让你把网页和 PDF 放到网上(如 GitHub pages),然后再从 orgweb 链接过去? 但看起来已经从官网链接到你的博客了( 手册 | Org 主模式 (“用普通话”))。
居然已经链接了,我都不知道这事:smiley:
严格来说 emacs 没有 properly tail-call optimization,中文大概是「所有尾调用变为跳转的优化」,而 named-let 只能处理一些特定情况。实际上,不止是 named-let 可以将尾递归翻译成 while,cl-labels 也支持,或者说 named-let 就是用 cl-labels 实现的。优化的具体实现,见 cl–self-tco
Emacs有尾递归优化,需要native-comp并且native-comp-speed
设置为3的情况下才有(默认为2)
那我猜测 byte compile 也可以优化 (?)
不可以,native comp和bytecomp用的IR不一样。native comp是到LIMPLE->GIMPLE,libgccjit支持C,本质上是个泛用后端。bytecomp是在emacs内部的lisp虚拟机上执行,依赖elisp的过程原语,后端层面支持没有那么好。
还真行。
(defun add (a b)
(cond
((= b 0) a)
(t (add (+ a 1) (- b 1)))))
(let ((native-comp-speed 3))
(native-compile 'add))
(add 1 20000)
;;=> 20001