Lisp的那个年代的编程原则是,多用栈,少用变量,给函数传递参数尽量用常量,如需要传递指针的话宁可传函数指针也不传变量指针
因为不用变量,所以也没有内存溢出问题,一个函数结束后与这函数相关的所有资源都释放,然后就有了Lisp
Lisp的那个年代的编程原则是,多用栈,少用变量,给函数传递参数尽量用常量,如需要传递指针的话宁可传函数指针也不传变量指针
因为不用变量,所以也没有内存溢出问题,一个函数结束后与这函数相关的所有资源都释放,然后就有了Lisp
然后出现的很多做法,比如高阶函数、克里化,都是为了不用变量
对于一定要用使用的变量,干脆就不释放,例如Lisp里的defvar
你这槽点太多不知从何说起。
你说的“变量”是指堆吗。本质上来说堆和栈都是一样的内存,只是如果不做区分用起来不方便。在有操作系统之前,栈只是通过sp寄存器指向的区域。没有堆的概念,需要内存随便找块空的地方用就行。在有操作系统之后,内存由系统给,任何程序都避免不了使用动态内存,函数式语言一样需要。最简单的道理,数据来了你放哪?
“因为不用变量,所以也没有内存溢出问题”,内存溢出和是否用变量没关系。准确来说,内存溢出的定义是你使用的内存超出了预设的范围。如果源源不断有数据来,想要不溢出,就得不断拿新的内存,不断的复制数据。c的话得自己实现这个过程,高级一点的语言能自动实现。
个人认为编程得多从数据流动的角度去理解,其他都是辅助性的概念。
我以为是要聊一聊怎么用 lisp 养活公司,这里的生产性应该是 efficiency 吧。
我都没看出來你说的是 Lisp,我还以为是 APL。
当初就是这么干的,把堆和栈的用法搞成几套代码模板,让写程序的人严格遵守,后来撑不住了,想让编译器自动处理,于是有了Lisp
有啊,就是C语言,当初Mozilla的邮件列表里天天报内存泄漏,虽然漏勺但是它自由啊,和人持不乱有异曲同工之妙
漏勺是影响生产力的强因子?那么可以举几个common lisp做的比c好的例子吗,firefox内核,linux内核,还是EMACS内核?
就知道个內核,x乎看多了吧,CAS 有作为开源 CAS 两大支柱的 Maxima 和 FriCAS,theorem prover 有 NASA 打钱开发的 PVS 和用于研究 Homotopy Type Theory 的 NuPRL,哪个不比 C 做的好。顺带世界上第一个 HTML 服务器就是 Common Lisp 写的,叫 CL-HTTP,当年还做过美国白宫主页。
世界上第一个 IRC 客户端也是用 Lisp 在 Emacs 里实现的。
感觉这个贴子没法提供给其它人什么有用信息,关了。想继续讨论的用私信或在线聊天。