2014年终总结

本来我都忘记了,结果有网友提醒我要写,我就来写一写。 现在的年终总结已经没什么内容了,主要是GacUI (www.gaclib.net)的开发实在太漫长。我现在在做拖控件程序GacStudio,希望在做完之后可以有Blend编辑WPF的效果,在xml里面写data binding的时候不同的地方会有不同的intellisense。这当然是很难的,所以才想做。因此今年就把GacUI做到可以有Control Template、Item Template、Data Binding

靠谱的代码和DRY

上次有人来要求我写一篇文章谈谈什么代码才是好代码,是谁我已经忘记了,好像是AutoHotkey还是啥的专栏的作者。撇开那些奇怪的条款不谈,靠谱的 代码有一个共同的特点,就是DRY。DRY就是Don't Repeat Yourself,其实已经被人谈了好多年了,但是几乎所有人都会忘记。什么是DRY(Don't Repeat Yourself) DRY 并不是指你不能复制代码这么简单的。不能repeat的其实是信息,不是代码。要分析一段代码里面的什么东西时信息,就跟给物理题做受力

跟vczh看实例学编译原理——三:Tinymoe与无歧义语法分析

文章中引用的代码均来自https://github.com/vczh/tinymoe。  看了前面的三篇文章,大家应该基本对Tinymoe的代码有一个初步的感觉了。在正确分析print sum from 1 to 100之前,我们首先得分析phrase sum from (lower bound) to (upper bound)这样的声明。Tinymoe的函数声明又很多关于block和sentence的配置,不过这里并不打算将所有细节,我会将重点放在如何写一个针对无歧义语

跟vczh看实例学编译原理——二:实现Tinymoe的词法分析

文章中引用的代码均来自https://github.com/vczh/tinymoe。  实现Tinymoe的第一步自然是一个词法分析器。词法分析其所作的事情很简单,就是把一份代码分割成若干个token,记录下他们所在文件的位置,以及丢掉不必要的信息。但是Tinymoe是一个按行分割的语言,自然token列表也就是二维的,第一维是行,第二维是每一行的token。在继续讲词法分析器之前,先看看Tinymoe包含多少token: 符号:(、)、,、:、&、+、-、*、/

随手撸了一个可以写递归lambda的Y函数

最近学习C++11的variadic template argument,终于可以摆脱用fpmacro模板来复制一大堆代码的做法了,好开心。这个例子的main函数用lambda写了一个斐波那契数列的递归计算函数。跟以往不同的是,在Y函数的帮助下,这个lambda表达是可以成功看到自己,然后递归调用。当然这仍然需要用普通的C++递归来实现,并不是λ-calculus那个高大上的Y Combinator。  #include <functional>

跟vczh看实例学编译原理——一:Tinymoe的设计哲学

自从《序》胡扯了快一个月之后,终于迎来了正片。之所以系列文章叫《看实例学编译原理》,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点。  但是第一个系列还没到开始处理Tinymoe源代码的时候,首先的跟大家讲一讲我设计Tinymoe的故事。为什么这种东西要等到现在才讲呢,因为之前没有文档,将了也是白讲啊。Tinymoe在github的wiki分为两部分,一部分是介绍语法的,另一部分是介绍一个最小的标准库是如何实现出来的,地址在

跟vczh看实例学编译原理——零:序言

在《如何设计一门语言》里面,我讲了一些语言方面的东西,还有痛快的喷了一些XX粉什么的。不过单纯讲这个也是很无聊的,所以我开了这个《跟vczh看实例学编译原理》系列,意在科普一些编译原理的知识,尽量让大家可以在创造语言之后,自己写一个原型。在这里我拿我创造的一门很有趣的语言 https://github.com/vczh/tinymoe/ 作为实例。  商业编译器对功能和质量的要求都是很高的,里面大量的东西其实都跟编译原理没关系。一个典型的编译原理的原型有什么特征呢

2013年终总结

2013年我就干了两件事情。第一件是gaclib,第二件是tinymoe。  Gaclib终于做到安全的支持C++的反射、从XML加载窗口和控件了。现在在实现的东西则是一个给gaclib用的workflow小脚本,用来写一些简单的view的逻辑、定义viewmodel接口,还有跟WPF差不多的data binding。  Tinymoe是我大二的时候就设计出来的东西,无奈以前对计算机的理论基础了解的太少,以至于没法实现,直到现在才能做出来。总的来说ti

如何设计一门语言(十二)——设计可扩展的类型

摘要: 在思考怎么写这一篇文章的时候,我又想到了以前讨论正交概念的事情。如果一个系统被设计成正交的,他的功能扩展起来也可以很容易的保持质量这是没错的,但是对于每一个单独给他扩展功能的个体来说,这个系统一点都不好用。所以我觉得现在的语言被设计成这样也是有那么点道理的。就算是设计Java的那谁,他也不是傻逼,那为什么Java会被设计成这样?我觉得这跟他刚开始想让金字塔的底层程序员也可以顺利使用Java是有关系...阅读全文陈梓瀚(vczh) 2013-11-10 17:06 发表