毕竟现在语法添加太多了,不知道会不会出现那种必须到运行时才能 disambiguating(消除歧义)的语法
目前 implicit type cast (准确的说更高级,我们允许在类型之间手动定义转换规则
目前 implicit type cast (准确的说更高级,我们允许在类型之间手动定义转换规则
out def Type.implicitAs out def Type.explicitAs)(out def 是为了保存类型 overload 的信息,单纯 def 会覆盖之前的同名 def(覆盖时如果不使用 new def 语法会收到警告,safe scope 和 safe def 里不允许这么做))是 object as Type 而 -> 被用来赋值 a->prop value_expr
当然 -> 也被用来定义没有参数的 Block 和转换表达式到 Block 类型 ary.each ->println timeout(10) -> println "I love Ruby(x)"
... 应该... 不会吧
duangsuse::Echo
#zhihu 又忍不住想起那个撕逼 https://www.zhihu.com/question/42315543 话说泛型类型检查写起来也麻烦啊... 要死递归就更麻烦了所以还是简单一点...
duangsuse::Echo
不过 Ins 要类型推导也毕竟麻烦,之前模拟的时候说了不支持 Union Type(一个符号可能是两个类型,比如 (define a (if weather_fine 1 #t)),这里全局符号 a 的类型是 (Number ^ Boolean) ^: XOR) 那么不支持 type union 也就是说一些函数启发式类型推导是不能用的(又是我乱想了...)...... 好吧是我瞎想了不支持就是不支持,x => if x { 1 } else { true } 本来类型就是应该推导为 (Integer ^…
https://www.jianshu.com/p/529b21edd418
看完了之后我发现我有些误解,类型检查不仅是为了
王垠比我懂得多,他说
如果这是一个union type的话,调用id(1)会报错,因为id的类型有可能是bool->bool,不能接受int的输入。调用id(True)也会报错,因为id的类型也有可能是int->int,不能接受bool的输入。所以就左右不是人。
其实如果彭飞仔细看那两个变量a和b的类型,就会发现这是intersection type,而不是union type。
看完了之后我发现我有些误解,类型检查不仅是为了
make program compiles 所做的工作,更是为了尽可能确保程序正确做的王垠比我懂得多,他说
^ 是“官方”的 「并集类型」intersection type 标记而 | 才是 Type union 的标记推导出的 int -> int | bool ->bool 表示的确实是一个intersection type,而不是union type。只不过我中间用的|记号跟union type一样,所以看起来比较混淆,然而内部实现确实是intersection type,而不是union type。我怀疑彭飞到底明不明白什么是intersection type。这个type表示这个函数(id)“同时”是int->int和bool->bool,而不是表示它“有时”是int->int,而另外的时候是bool->bool。所以如果你调用id(1),推导出的输出一定是int。如果你输入id(True),它推导出的一定是bool。
现在我把中间的分隔符改成了unicode字符∧,跟intersection type的论文上一样。我想这下他该满意了吧?也就是个表面现象而已。
def ambigous(x):
return x
a = ambigous(1)
b = ambigous(True)
如果这是一个union type的话,调用id(1)会报错,因为id的类型有可能是bool->bool,不能接受int的输入。调用id(True)也会报错,因为id的类型也有可能是int->int,不能接受bool的输入。所以就左右不是人。
其实如果彭飞仔细看那两个变量a和b的类型,就会发现这是intersection type,而不是union type。
简书
到底是谁在欺负我们读书少?
发表了之前的文章《我为什么不再做PL人》之后,我发现有人在知乎上发表文章诬蔑我。本来不想理知乎上的东西,但作者把各种刚从论文上学来的术语,似懂非懂,照本宣科列了一大堆,挺能唬...
duangsuse::Echo
不过 Ins 要类型推导也毕竟麻烦,之前模拟的时候说了不支持 Union Type(一个符号可能是两个类型,比如 (define a (if weather_fine 1 #t)),这里全局符号 a 的类型是 (Number ^ Boolean) ^: XOR) 那么不支持 type union 也就是说一些函数启发式类型推导是不能用的(又是我乱想了...)...... 好吧是我瞎想了不支持就是不支持,x => if x { 1 } else { true } 本来类型就是应该推导为 (Integer ^…
抱歉之前写错了... 我那行
其实是该写成
最后:Ins 的类型推导设置那么多规则甚至用更高级的算法有什么意义呢... 有什么意义呢... 如果常量折叠没有的话
f = x => if x { 1 } else { true } 本来类型就是应该推导为 (Integer ^ Boolean) 的其实是该写成
f 的 「返回类型」是 (Integer ^ Boolean) 或者说 f 的类型是(当然这点输入代码推导不出来它的类型,但假设这是我给它指出的类型) (Boolean -> {Integer | Boolean})
这里写错的 ^ (在你们看是对的,但其实只是歪打正着)被我误解成了是 Type Union 的标记...最后:Ins 的类型推导设置那么多规则甚至用更高级的算法有什么意义呢... 有什么意义呢... 如果常量折叠没有的话
final far safe bo = false; a = if bo { 1 } else { 1R } 这种类型推导还是得个垃圾吧https://www.jianshu.com/p/4149a394ef88 #cs #pl
其实,这个分数的意义远远不止是一个A+,它涵盖的内容可能超乎你的想象。也许你可以从一个很小的例子看出它到底意味着什么。
在课程进行到一半的时候,我花了一个星期的时间,独立解决了曾经困扰程序语言领域十多年的难题——CPS变换。在这十几年里面,有众多的世界级专家参与过这个问题的研究,包括非常强悍的丹麦Aarhus大学教授Olivier Danvy,Andrzej Filinski,Dan Friedman本人以及他的得意门生Matthias Felleisen,Felleisen的得意门生Amr Sabry,普林斯顿大学著名教授Andrew Appel(编译器教材“虎书”的作者)。这些人为这个话题发表了不知道多少论文,Appel还为此专门写了一本书。我之所以会去解决这个问题,是因为Friedman别出心裁,把这个问题作为了一道附加题目放进了B521的作业里。
我不知道这个问题有如此之难,所以愣头愣脑,真把它当成作业题给解决了。按照作业的“道德规范”,完全从问题出发,不看书不看论文不查网络,全凭自己的头脑,在一个星期之内得到了最优的结果。这就是所谓“王垠40行代码”的含义。一个人七天,一群人十年,我想你应该知道这是什么概念。
其实,这个分数的意义远远不止是一个A+,它涵盖的内容可能超乎你的想象。也许你可以从一个很小的例子看出它到底意味着什么。
在课程进行到一半的时候,我花了一个星期的时间,独立解决了曾经困扰程序语言领域十多年的难题——CPS变换。在这十几年里面,有众多的世界级专家参与过这个问题的研究,包括非常强悍的丹麦Aarhus大学教授Olivier Danvy,Andrzej Filinski,Dan Friedman本人以及他的得意门生Matthias Felleisen,Felleisen的得意门生Amr Sabry,普林斯顿大学著名教授Andrew Appel(编译器教材“虎书”的作者)。这些人为这个话题发表了不知道多少论文,Appel还为此专门写了一本书。我之所以会去解决这个问题,是因为Friedman别出心裁,把这个问题作为了一道附加题目放进了B521的作业里。
我不知道这个问题有如此之难,所以愣头愣脑,真把它当成作业题给解决了。按照作业的“道德规范”,完全从问题出发,不看书不看论文不查网络,全凭自己的头脑,在一个星期之内得到了最优的结果。这就是所谓“王垠40行代码”的含义。一个人七天,一群人十年,我想你应该知道这是什么概念。
简书
我为什么在乎这一个A+
我知道有些人至今仍然嘲笑和鄙视我,因为我曾经说过,我在Dan Friedman的两门课程B521(程序语言理论)和B621(高级程序语言理论)都得了A+。只要提到我,他们就会...
#recommended #zhihu
https://www.zhihu.com/question/42016079
我所看到的最佳回答:
其实垠神从来没有黑某个领域,没有黑某个语言,没有黑某个编程思想。
他从来黑的都是像对待宗教一样的盲目崇拜的态度,学者和各个公司里的各种欺世盗名。
他渺小时所崇拜的山峰一样偶像,在他爬上山顶后,轰然倒塌了,他觉得爬山不值,很懊恼。
https://www.zhihu.com/question/42016079
我所看到的最佳回答:
其实垠神从来没有黑某个领域,没有黑某个语言,没有黑某个编程思想。
他从来黑的都是像对待宗教一样的盲目崇拜的态度,学者和各个公司里的各种欺世盗名。
他渺小时所崇拜的山峰一样偶像,在他爬上山顶后,轰然倒塌了,他觉得爬山不值,很懊恼。
Zhihu
如何评价王垠新文章《我为什么不再做PL人》? - 知乎
有问题,上知乎。知乎是中文互联网知名知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。
Forwarded from duangsuse Throws
Forwarded from duangsuse Throws
现在想想当时我在 #GeekApk 时所做的设计... 真是令人头疼,因为实在是太多设计版本了...
我都不知道如果要去修订它、或者说从上面汲取灵感应该从哪里开始...
我都不知道如果要去修订它、或者说从上面汲取灵感应该从哪里开始...
Forwarded from duangsuse Throws
现在
popf.rip 这个域名好像也到期了,VPS 也没钱了,所以 GitApk 做出之前我留下一个快照就 destory 了
duangsuse Throws
Photo
所说的就是第二张「GeekApkSpecShort」,因为当初在 GeekApk 时留下的设计太多了... 真的、真的搞不明白我到底在设计个啥玩意... 版本、分支都太多了... 不知道哪个是真的 哪些特性应该保留 哪些特性应该去掉
#GitHub 上用的 #javascript PDF 渲染器好像有内存泄漏问题... 处理大文件的时候直觉导致我电脑死机四次,我足足按了 3 次 alt+sysrq+i 终止所有程序最后还重启了一次...
我准备先花 20 分钟左右开发个在 Android 上自动启用 USB Tethering (USB 绑定网络)的应用
然后把 METO 的 sm.ms 图床接口代码发上来快速分享给大家
然后补充一下 Gekyll 的设计,有时间时写
然后给 InScript 添加新特性,假期结束前出总文档
👆...
然后把 METO 的 sm.ms 图床接口代码发上来快速分享给大家
然后补充一下 Gekyll 的设计,有时间时写
然后给 InScript 添加新特性,假期结束前出总文档
👆...