@
maxco292 这啥,你说 TAPL 么。。。那个嘛,有 type system 也并不会显得一个 toy language 不 toy 了。何况多数所谓的工业语言光是 type system 上也都挺 toy 的就是了。
不过我个人意见是对没搞清楚要设计成什么样的来讲还不如不看。
另外像是通用做法:
https://aiplaybook.a16z.com/reference-material/mccarthy-1960.pdf没管 type 不也照样挺 FP 的嘛。
想清楚了针对什么目的(比如 totality )搞 type system,之后再看看 The Little Typer 之类的入门(虽然老实说,欠了很多东西没讲清楚)。
@
ech0x 你一开始提的一些问题比大多数关于琐碎设计选项的问题的确更有意义,能镇住用过某些语言的用户,也能糊住现在的 LZ,但远远支撑不了 LZ (想要)吹的说法。
换些问法吧。(翻译太麻烦的进阶问题仅供参考。)
1:(设计语言时,下同)为什么要考虑静态动态?
1.5:为什么要考虑类型?
1.5.1:为什么要考虑类型系统?
1.5.1.1:Structrual or nominal?
1.5.1.2:Why support array?
1.6:为什么要推导类型?
1.7:Why not (algebraic) effect system?
2:为什么要倒腾什么“面向过程”?(不好意思,这个槽点我实在忍不住了……)
2.5:什么叫“函数式”?
3:为什么要考虑单独对内存进行管理?
4:怎么支持元编程?
4.1:When and why macros considered harmful?
4.2:How to deal with hygiene?
4.3:How to avoid trivial equational theory caused by features about reflection support?
5:为什么 dependent types 更高级……
嘛,看下面的回复,可能关于类型上面 LZ 确实没啥新的想法,否则可以直接 gradual typing 糊脸了。
至于数组就还是别鞭尸了吧,C 的 dimension/rank 光是说法自己就挺乱的。
顺便关于尾递归……这玩意正好我前几个月刚好折腾了不少,补充点附加题给有兴趣的童鞋(糊 SICP 真的是远远不够的):
1.PTC(proper tail call)/PTR(proper tail recursion) 和 TCO(tail call optimization) 的差别在哪?
2.TCO 和 TCE(tail call elimination) 的差别是?
3.PTR 和 evlis tail recursion 的差别是?
4.为什么 safe for space requirement 对环境的结构有限制?
5.在一个 native 实现上要求不依赖全局 GC,且语言要求支持 PTC,对整个语言的设计有什么影响?
@
mostkia 怎么说呢……大部分人看到的巨人其实都挺矮的……
@
Qiaogui 可以是 spec 的一部分,但体例不完整。
我比较怀疑你会全部返工,所以还是建议你先整理需求。
(如果照常规的 spec 的写法,你这里是有不少比“变量”更基本的内容是要提到外面写的。)
另外,因为各种这里已经有人提过的和没提过的原因,我建议你最好不要随便说“非常了解”。
@
qzivli 虽然 LZ 的设计比较感人,不过这水深得很,别太死脑筋……
比如:
https://srfi.schemers.org/srfi-45/srfi-45.htmlhttp://klisp.org/docs/Promises.html#Promises@
mind3x 别那么悲观嘛……要我说的话,现在所有比较流行(这楼里大多数人包括 LZ 可能有听说过的)工业语言刨祖坟串起来后的设计,还真没几个不民科的。
算上委员会的话可能还好点,但其中有些经典的设计在历史上就是以看上去相当民科的方式溜进去的——比如说,从 ALGOL-60 要求支持递归调用开始。
(不信?随便举些比较有名的,分分钟挖黑历史出来。虽然可能有些槽点外行难以理解就是了。)