文章分类 - YinWang
发表于 2023-07-12 09:49阅读次数:57评论次数:0
摘要:我本科的时候给我爸设计了一种“标准化试卷标记语言”(他是中学英语老师)。当时我写了一个1000来行的 Perl 脚本,可以把这种简单的标记语言转换成美观的 LaTeX 格式文档,并且带有友好的 Tk 图形界面。题目可以包括选择题,填空题,改错题,…… 这种语言的特点是,题目和答案都放在一起,所以出题
阅读全文 »
发表于 2023-07-12 09:48阅读次数:33评论次数:0
摘要:我一直在试图利用程序语言的设计原理,设计一种超越“Unix 哲学”的操作系统。这里是我的设想: 这种系统里面的程序间通信不使用无结构的字符串,而是使用带有类型和结构的数据。在这样的系统里面,Unix 和其它类似操作系统(比如 Windows)里的所谓“应用程序”的概念基本上完全消失。系统由一个个很小
阅读全文 »
发表于 2023-07-12 09:48阅读次数:19评论次数:0
摘要:把我之前的博文基本上转换成了 markdown 格式。我发现 markdown 虽然在编辑器里看起来比 HTML 清晰一些,但也有一些不足。 这些 markup 语言的格式都有点像我本科的时候给我爸做的一种“标准化试卷标记语言”(因为他是中学英语老师)。当时我写了一个1000来行的 Perl 脚本,
阅读全文 »
发表于 2023-07-12 09:47阅读次数:40评论次数:0
摘要:在现实的软件工程中,我经常发现这样的一种现象。本来用很简单的代码就可以解决的问题,却因为设计者过分的关注了“通用性”,“可维护性”和“可扩展性”,被搞得绕了几道弯,让人琢磨不透。 这些人的思维方式是这样的:“将来这段代码可能会被用到更多的场合,所以我现在就考虑到扩展问题。”于是乎,他们在代码中加入了
阅读全文 »
发表于 2023-07-12 09:47阅读次数:336评论次数:0
摘要:我喜欢用“启发”这个词。比如我经常会对人说:“你启发了我。”然而听到这话的人有时候不明白我的意思,自以为高我一筹,于是顿显傲气。其实我用“启发”这个词,是有深刻含义的。“启发”的意思并不等于“我没有你懂得多”或者“你比我聪明”,而是一个很含糊的词。 如果 A 受到了 B 启发,有几种可能性: B 做
阅读全文 »
发表于 2023-07-12 09:45阅读次数:67评论次数:0
摘要:介绍了这么久的 Scheme,却没有讲过如何配置一个高效的 Scheme 的编程环境。有些人开始学习 Scheme 的时候感觉无从下手,所以今天讲一下它的配置。 Scheme 的配置有很多种方式,我不想介绍太多东西,免得有人看花了眼,所以这里只介绍一下我自己的配置。我不大喜欢像 Quack 一类的复
阅读全文 »
发表于 2023-07-12 09:45阅读次数:12评论次数:0
摘要:很多人都知道,我曾经在 Cornell 博士就读,两年之后转学到了 Indiana 大学。几乎所有人,包括 Indiana 大学的人都感觉奇怪,为什么会有人从 Cornell 这样的“牛校”转学到 Indiana。我曾经在之前的博文里提到 Cornell 的情况,比如学生一上课就忙着抄笔记,作业压得
阅读全文 »
发表于 2023-07-12 09:45阅读次数:40评论次数:0
摘要:现在的很多公司,包括 Google 和我现在的公司 Coverity,都喜欢一种“测试驱动的开发”(test-driven development)。它的原理是,在写程序的时候同时写上自动化的“单元测试”(unit test)。在代码修改之后,这些测试可以批量的被运行,这样就可以避免不应该出现的错误
阅读全文 »
发表于 2023-07-12 09:43阅读次数:11评论次数:0
摘要:很多基于 lambda calculus 的程序语言,比如 ML 和 Haskell,都习惯用一种叫做 currying 的手法来表示函数。比如,如果你在 Haskell 里面这样写一个函数: f x y = x + y 然后你就可以这样把链表里的每个元素加上 2: map (f 2) [1, 2,
阅读全文 »
发表于 2023-07-12 09:42阅读次数:21评论次数:0
摘要:从之前的几篇博文里面你也许已经看到了,Haskell 其实是问题相当严重的语言,然而这些问题却没有引起足够的重视。我能看到的 Haskell 的问题在于: 复杂的基于缩进的语法,使得任何编辑器都不能高效的编辑 Haskell 程序,并且使得语法分析难度加倍。对这个观点,请参考我的博文《谈语法》以及我
阅读全文 »
发表于 2023-07-12 09:39阅读次数:62评论次数:0
摘要:之前的一个时间,我曾经公开过这样一段幻灯片,它是2012年10月的时候,我在 Indiana 大学做的最后一次演讲。由于当时的委婉,我并没有直接说出这些结论的重要性。其实它揭示了 ML 和 Haskell 这类基于 Hindley-Milner 类型系统的语言的一个根本性的错误。 这个错误来源于对一
阅读全文 »
发表于 2023-07-12 09:38阅读次数:46评论次数:0
摘要:很早的时候,“函数式语言”对于我来说就是 Lisp,因为 Lisp 可以在程序的几乎任意位置定义函数,并且把它们作为值来传递(这叫做 first-class function)。可是到后来有人告诉我,Lisp 其实不算“函数式语言”,因为 Lisp 的函数不“纯”(pure)。 所谓“纯函数”,就是
阅读全文 »
发表于 2023-07-12 09:35阅读次数:413评论次数:0
摘要:很多人都会用一些“脚本语言”(scripting language),却很少有人真正的知道到底什么是脚本语言。很多人用 shell 写一些“脚本”来完成日常的任务,用 Perl 或者 sed 来处理一些文本文件,很多公司用“脚本”来跑它们的“build”(叫做 build script)。那么,到底
阅读全文 »
发表于 2023-07-12 09:35阅读次数:139评论次数:0
摘要:在上一篇博文的最后,我提到了 Lisp 编译器的问题。由于早期的 Lisp 编译器生成的代码效率普遍低下,成为了 Lisp 失败的主要原因之一。而现在的高性能 Lisp 编译器(比如 Chez Scheme),其实已经可以生成非常高效的代码,甚至可以匹敌 C 程序的速度。如果你看得到我脑子里的东西,
阅读全文 »
发表于 2020-10-21 14:23阅读次数:91评论次数:0
摘要:在之前的几篇博文里面,我多次提到了 Lisp,它相对于其它语言的优势,以及 Lisp Machine 相对于 Unix 的优点。于是有人来信请教我如何学习 Lisp,也有人问我为什么 Lisp Machine 没有“流行”起来。我感觉到了他们言语中对 Lisp 的敬畏和好奇心,但也感觉到了一些隐含的
阅读全文 »
发表于 2020-10-19 11:58阅读次数:140评论次数:0
摘要:一直以来,人们都重视“解决问题”的能力,却忽视了另一种重要的能力:“消灭问题”的能力。各种各样的竞赛,分数和排名,让很多人从小就片面的认为,能“解决问题”的人,就是最厉害的人。拿到一个问题就埋头求解,很少考虑这问题到底有什么意义。这种呆板的思维方式,不仅存在于低级的“应试”和“解题”过程,而且蔓延到
阅读全文 »
发表于 2020-10-13 15:50阅读次数:75评论次数:0
摘要:之前的一篇文章里,我谈到了程序语言设计的一个常见错误倾向:片面追求短小,它导致了一系列的历史性的设计错误。今天我来谈一下另外一种错误的倾向,这种倾向也导致了很多错误,并且继续在导致错误的产生。 今天我要说的错误倾向叫做“试图容纳世界”。这个错误导致了 Python,Ruby 和 JavaScript
阅读全文 »
发表于 2020-10-13 15:49阅读次数:110评论次数:0
摘要:我经常以自己写“非常短小”的代码为豪。有一些人听了之后很赞赏,然后说他也很喜欢写短小的代码,接着就开始说 C 语言其实有很多巧妙的设计,可以让代码变得非常短小。然后我才发现,这些人所谓的“短小”跟我所说的“短小”完全不是一回事。 我的程序的“短小”是建立在语义明确,概念清晰的基础上的。在此基础上,我
阅读全文 »
发表于 2020-10-13 15:48阅读次数:110评论次数:0
摘要:使用和研究过这么多程序语言之后,我觉得几乎不包含多余功能的语言,只有一个:Scheme。所以我觉得它是学习程序设计最好的入手点和进阶工具。当然 Scheme 也有少数的问题,而且缺少一些我想要的功能,但这些都瑕不掩瑜。在用了很多其它的语言之后,我觉得 Scheme 真的是非常优美的语言。 要想指出
阅读全文 »
发表于 2020-10-13 15:43阅读次数:345评论次数:0
摘要:我已经很久很久没有打游戏了(如果不算 Angry Birds 之类用来打发时间的游戏的话)。我的最后一个真正意义上的游戏机是 PlayStation 1。在那上面,我真正欣赏的最后一个游戏,是 Metal Gear Solid (1)。 我曾经是一个游戏迷,可是进入了计算机专业的学习之后,我就开始失
阅读全文 »