2014年4月15日
摘要: RT 阅读全文
posted @ 2014-04-15 12:30 陈梓瀚(vczh) 阅读(6755) 评论(17) 推荐(1) 编辑
  2014年3月23日
摘要: 文章中引用的代码均来自https://github.com/vczh/tinymoe。看了前面的三篇文章,大家应该基本对Tinymoe的代码有一个初步的感觉了。在正确分析"print sum from 1 to 100"之前,我们首先得分析"phrase sum from (lower bound) to (upper bound)"这样的声明。Tinymoe的函数声明又很多关于block和se... 阅读全文
posted @ 2014-03-23 16:55 陈梓瀚(vczh) 阅读(7514) 评论(11) 推荐(11) 编辑
  2014年3月2日
摘要: 文章中引用的代码均来自https://github.com/vczh/tinymoe。实现Tinymoe的第一步自然是一个词法分析器。词法分析其所作的事情很简单,就是把一份代码分割成若干个token,记录下他们所在文件的位置,以及丢掉不必要的信息。但是Tinymoe是一个按行分割的语言,自然token列表也就是二维的,第一维是行,第二维是每一行的token。在继续讲词法分析器之前,先看看Tiny... 阅读全文
posted @ 2014-03-02 23:45 陈梓瀚(vczh) 阅读(7232) 评论(5) 推荐(4) 编辑
  2014年2月11日
摘要: 自从《序》胡扯了快一个月之后,终于迎来了正片。之所以系列文章叫《看实例学编译原理》,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点。但是第一个系列还没到开始处理Tinymoe源代码的时候,首先的跟大家讲一讲我设计Tinymoe的故事。为什么这种东西要等到现在才讲呢,因为之前没有文档,将了也是白讲啊。Tinymoe在github的wiki分为两部分,一部分是介绍语法的,另一部分是介绍一个最小的标准库是如何实现出来的,地址在 https://github.com/vczh/tinymoe/wiki 不带问号的那些都是写完了的。系列文章的目标在介绍Tinymo 阅读全文
posted @ 2014-02-11 12:54 陈梓瀚(vczh) 阅读(6448) 评论(3) 推荐(7) 编辑
  2014年1月19日
摘要: 在《如何设计一门语言》里面,我讲了一些语言方面的东西,还有痛快的喷了一些XX粉什么的。不过单纯讲这个也是很无聊的,所以我开了这个《跟vczh看实例学编译原理》系列,意在科普一些编译原理的知识,尽量让大家可以在创造语言之后,自己写一个原型。在这里我拿我创造的一门很有趣的语言 https://github.com/vczh/tinymoe/ 作为实例。商业编译器对功能和质量的要求都是很高的,里面大量的东西其实都跟编译原理没关系。一个典型的编译原理的原型有什么特征呢?性能低 错误信息难看 没有检查所有情况就生成代码 优化做得烂 几乎没有编译选项 等等。Tinymoe就满足了上面的5种情况,因为我的目 阅读全文
posted @ 2014-01-19 01:22 陈梓瀚(vczh) 阅读(13606) 评论(22) 推荐(24) 编辑
  2014年1月4日
摘要: 2013年我就干了两件事情。第一件是gaclib,第二件是tinymoe。Gaclib终于做到安全的支持C++的反射、从XML加载窗口和控件了。现在在实现的东西则是一个给gaclib用的workflow小脚本,用来写一些简单的view的逻辑、定义viewmodel接口,还有跟WPF差不多的data binding。Tinymoe是我大二的时候就设计出来的东西,无奈以前对计算机的理论基础了解的太少,以至于没法实现,直到现在才能做出来。总的来说tinymoe是一个模仿英语语法的严肃的编程语言——也就是说它是不基于NLP的,语法是严格的,写错一个单词也会编译不过。因此所有的函数都要写成短语,包括控制 阅读全文
posted @ 2014-01-04 21:52 陈梓瀚(vczh) 阅读(8620) 评论(2) 推荐(3) 编辑
  2013年11月10日
摘要: 在思考怎么写这一篇文章的时候,我又想到了以前讨论正交概念的事情。如果一个系统被设计成正交的,他的功能扩展起来也可以很容易的保持质量这是没错的,但是对于每一个单独给他扩展功能的个体来说,这个系统一点都不好用。所以我觉得现在的语言被设计成这样也是有那么点道理的。就算是设计Java的那谁,他也不是傻逼,那为什么Java会被设计成这样?我觉得这跟他刚开始想让金字塔的底层程序员也可以顺利使用Java是有关系... 阅读全文
posted @ 2013-11-10 17:07 陈梓瀚(vczh) 阅读(3991) 评论(13) 推荐(3) 编辑
  2013年11月4日
摘要: 第一步:如果从未发布过博客文章的话,需要在菜单里面选这里添加博客账号 第二步:选择正确的设置 第三步:写完博客之后,按这里就可以发布了! 如果以后需要写新的博客的话,还可以直接点这里: Word 2013就是简单好用啊,虽然Live Writer没有了,但是有了Word 2013,其实也是一样的。 阅读全文
posted @ 2013-11-04 01:33 陈梓瀚(vczh) 阅读(3801) 评论(3) 推荐(3) 编辑
  2013年10月19日
摘要: 大家看到这个标题肯定会欢呼雀跃了,以为功能少的语言就容易学。其实完全不是这样的。功能少的语言如果还适用范围广,那所有的概念必定是正交的,最后就会变得跟数学一样。数学的概念很正交吧,正交的东西都特别抽象,一点都不直观的。不信?出门转左看Haskell,还有抽象代数。因此删减语言的功能是需要高超的技巧的,这跟大家想的,还有跟go那帮人想的,可以断定完全不一样。首先,我们要知道到底为什么需要删减功能。在这里我们首先要达成一个共识——人都是很贱的。一方面在发表言论的时候光面堂皇的表示,要以需求变更和可维护性位中心;另一方面自己写代码的时候又总是不惜“后来的维护者所支付的代价代价”进行偷懒。有些时候,人 阅读全文
posted @ 2013-10-19 21:52 陈梓瀚(vczh) 阅读(4451) 评论(20) 推荐(8) 编辑
  2013年9月16日
摘要: 几个月前就一直有博友关心DSL的问题,于是我想一想,我在gac.codeplex.com里面也创建了一些DSL,于是今天就来说一说这个事情。 创建DSL恐怕是很多人第一次设计一门语言的经历,很少有人一开始上来就设计通用语言的。我自己第一次做这种事情是在高中写这个傻逼ARPG的时候了。当时做了一个超简单的脚本语言,长的就跟汇编差不多,虽然每一个指令都写成了调用函数的形态。虽然这个游戏需要脚本在剧情... 阅读全文
posted @ 2013-09-16 09:27 陈梓瀚(vczh) 阅读(11500) 评论(7) 推荐(10) 编辑