noweb 的用法

2015-11-18
阅读 2 分钟
5.5k
Donald Knuth 说:『选择 WEB 作为名字,部分因为它是英语中很少的几个没有用于计算机的三字词语之一。但随着时间流逝,我越来越喜爱这个名字,因为我认为最好把一个复杂的软件确确实实地看成由简单材料以精巧的方式拼出来的一张网。我们通过理解复杂系统的各个简单部分和这些部分与其直接邻居的简单关系来理解复杂系统...

论文式编程

2015-11-18
阅读 17 分钟
6.7k
文学编程的思想非常简单,就是将那些为了能被编译器/解释器正确识别而编写的代码打碎,然后用人类语言将它们编织到文档中,这种文档就是文学编程的源文件。这一概念第一次被完整的实现,是 Knuth 开发的 WEB 工具(此 WEB 并非现代漫天飞舞的那个 Web)。Knuth 的神作——TeX 系统便是借助 WEB 开发的。

理解 GNU Libtool

2015-11-16
阅读 9 分钟
7.6k
这篇文章与『理解 GLib 的单元测试框架』一文有些渊源,因为后者在几个示例中使用了 libtool 产生库文件与应用程序文件。 田园时代 我要写一个叫做 foo 的库,它提供一个什么也不做的函数。这个库的头文件为 foo.h: {代码...} foo.c 是这个库的实现: {代码...} 用 gcc 编译生成共享库文件 libfoo.so: {代码...} 如果...

理解 GLib 的单元测试框架

2015-11-15
阅读 11 分钟
8.8k
单元测试,那些似乎从来都不怎么有用的软件工程教科书里有关于它的确切定义。在本文中,只是将其视为检验某个函数是否正确的一种手段。可将单元测试想象为质检员,将要检验的函数想象为待出厂的零件。

<译> 函子性

2015-11-14
阅读 11 分钟
10.7k
现在,你已经知悉函子是什么了,并且也见识了它的一些例子。本文要做的事,是用一些小函子构造出大函子。更有趣的是,你可以看到哪种类型构造子(相当于一个范畴内部对象之间的映射)能够被扩展为函子(态射之间的映射)。

<译> 函子

2015-11-05
阅读 12 分钟
9.9k
听起来是要破记录,我要讲讲函子:简单又强大的主意。范畴论中充满了这样简单又强大的主意。函子是范畴之间的映射。给定的两个范畴,C 与 D,函子 F 可以将 C 中的对象映射为 D 中的对象——函子是对象上的函数。如果 C 中有一个对象 a,它在 D 中的像即为 F a(省略了括号)。但是范畴中不仅仅存在对象,还有连接对象的态...

<译> 简单的代数数据类型

2015-11-03
阅读 8 分钟
14.1k
我们已经了解了两种类型组合方式:积与余积。编程中,仅通过这两种类型就可以构造出大部分数据结构。正是因为这一点,保证了数据结构的许多性质都是可复合的。例如,如果知道如何比较两种基本类型的值是否相等,并且知道如何将这种比较方法推广到积与余积类型,那么你就能够自动派生出支持相等运算的复合类型。在 Haskel...

<译> 积与余积

2015-10-27
阅读 9 分钟
16.2k
古希腊剧作家 Euripides 曾说过:『每个人都像他尽力维护的同伴』。我们被我们的人际关系所定义。在范畴论中更是这样。如果想刻画范畴中的一个对象,只能通过描述这个对象与其他对象(或其自身)之间的关系模式来实现。

<译> Kleisli 范畴

2015-10-23
阅读 7 分钟
13.9k
你已经见识了如何将类型与纯函数塑造为一个范畴。我还提到过,在范畴论中,有办法构造副作用或非纯函数。现在有一个像这样的例子:具有运行日志的函数。这种东西,用命令式语言可以通过对一些全局状态的修改来实现,像这样:

<译> 范畴,可大可小

2015-10-22
阅读 5 分钟
15.2k
最小的范畴是拥有 0 个对象的范畴。因为没有对象,自然也就没有态射。这个范畴挺悲哀的,因为它只拥有自己。不过,对于其它范畴而言,它可能是挺重要,例如所有范畴的范畴(对的,有这么一个范畴)。如果你觉得空集是有意义的,那么为何会觉得空的范畴无意义?

<译> 类型与函数

2015-10-21
阅读 8 分钟
15.4k
关于静态 vs 动态,强类型 vs 弱类型,似乎存在着一些争论。下面我用一个思想实验让这些选择变得更直观一些。想象一下,无数只猴子在快乐的随机敲打着键盘,产生程序,编译,然后运行。

<译> 范畴:复合的本质

2015-10-20
阅读 4 分钟
19.2k
上一篇文章,即《写向程序猿的范畴论》的序言,发布之后得到的正面反馈让我有些不知所措。同时,它也激励了我,因为我感受到了大家付诸于我的殷切期望。不过,我担心的是无论我如何努力,依然众口难调。有些读者希望这本书偏于现实,有些人则希望它能抽象一些。有些憎恨 C++ 的人希望所有的示例都是 Haskell 的,而那些...

<译> 写给程序猿的范畴论 · 序

2015-10-20
阅读 3 分钟
30.4k
我打算为程序猿们写一本讲范畴论的书已经有一段时间了。注意,受众不是计算机科学家,而是程序猿——是工程师,而不是科学家。这听起来挺疯狂,我也有些诚惶诚恐,但是我无法容忍科学与工程之间存在着巨大的鸿沟,更何况我自身的工作也是经常需要我在这两个世界中穿梭。不过,要解释一些东西,总让我感觉非常窘迫。我非常...

Emacs 中 C/C++ 编程基本环境配置

2015-10-19
阅读 4 分钟
13.1k
当你用 Emacs 打开或新建一份扩展名为 .c 的文件时,Emacs 会自动开启内置的 C 模式。这个模式提供了语法高亮、自动缩进等基本功能。同时 Emacs 也允许用户深度定制符合自己使用习惯的代码编辑功能,前提是你需要对 Emacs Lisp 扩展语言有一定了解。

非科班出身的人学习编程不负责任指南

2015-10-18
阅读 8 分钟
20.6k
来我们这个实验室里读研的学生可能自从来到这里的第一天就觉得自己的命运很苦逼。他们读本科时主修的是机械设计、制造以及自动化之类的专业,毕业时的简历上也顶多是写写擅长 MS Word、PowerPoint、UGNX、AutoCAD 之类的应用软件。他们有限的学习生涯里,怎么也不会想到来到这里竟然要首先重新学习 C 语言,然后还要学 C...

Vala 与 C 相映成趣

2015-10-17
阅读 3 分钟
6.3k
写完『泛型与闭包』这篇文章后,暗自感慨了一番,要是 C 语言能够从语言层面支持闭包,而不是借助函数指针去进行繁琐的模拟,那么用 C 写程序就一定会有趣很多。

泛型与闭包

2015-10-17
阅读 4 分钟
6.5k
我对基于模板或类型的动态推导而实现的泛型编程方法是有看法的,这些看法可能有些极端。 我觉得无论是模板还是类型的动态推导,基于它们只能建立面向数据的泛型编程范式,而更好的泛型编程范式应该是面向运算。 例如下面这个 C++ 模板函数: {代码...} 虽然它的理想是浪漫的,从所有类型的值构成的数组中获取最大值,但...

漫谈 Gentoo 中文社区的建设

2015-10-15
阅读 3 分钟
7.6k
第一次,2004 年前后,由 LinuxSir 上面的 Gentoo 爱好者发起并维护,为 Gentoo 在国内的推广做出了贡献,但最终项目因故中止。

简单,再简单一些!

2015-10-15
阅读 9 分钟
6.4k
『从双向链表的设计开始』似乎将问题搞的有些复杂了。可能因为它是 4 年前写的,那时我喜欢将简单的问题复杂化……这篇文章尝试将 GObject 与 C++ 代码做一次『映射』,借助 C++ 来理解 GObject 的基本编程框架,然后借助代码生成器保护我们的手指。

ebuild 中的软件包依赖

2015-10-11
阅读 2 分钟
5.2k
Gentoo 的软件包管理器——Portage 中最有用的特性之一就是能够灵活的解决软件包的依赖问题,因为它解决了其他发行版的包管理系统不好解决的一些问题。本文只关注如何在 ebuild 文件中设定软件包的几种常规性依赖。至于 Portage 究竟有多么强大,可认真阅读 Portage 指南。

为一个真实的软件包制作 ebuild

2015-10-11
阅读 3 分钟
5.7k
在『初探 ebuild』文中讲述了 Portage 树与 ebuild 文件的基本知识。这一篇利用这些基本知识来为一个真实的软件包写一份 ebuild 文件,通过这一实例可以大致了解如何使用 Eclass 中的函数。

久违的 Compiz 依然在喘息

2015-10-07
阅读 3 分钟
5.7k
七年前,我在 Gentoo 里安装过 compiz-fusion。更早的时间,我曾经玩过 Beryl,因为当时我还年青,第一次玩 3D 桌面,那酷炫的效果把我和小伙伴都惊呆了。2006 年 1 月,Compiz 发布第一版……这些就是我脑海中的 Compiz 的全部历史。

MathJax 瘦身记

2015-10-06
阅读 6 分钟
8.7k
对于理工科背景的人而言,无论是 Web x.0 的时代,对应的网站都应该支持数学公式。所以,QQ 不支持数学公式,就没必要用 QQ;微信不支持数学公式,就没必要用微信;微博不支持数学公式,就没必要用微博……然而这一切都要归罪于 HTML 的发明者,理工科的专家发明的东西居然不支持数学公式……虽然有个 MATHML,但基本上形同...

初探 ebuild

2015-10-05
阅读 6 分钟
10.4k
无论你使用过多少/多久其他的 Linux 发行版,初次接触 Gentoo 时,极有可能会觉得它在软件包的安装方面很神奇。若要在 Gentoo 中安装一个软件包,通常要定义如何进行软件源代码包的下载、解包、打补丁、编译、安装以及合并。为了实现对软件包进行细微的定制,还需要定义一些有用的元数据(即 USE 旗标)、补丁文件以及一...

X Window 系统与云计算

2015-10-03
阅读 2 分钟
4k
当 Google 刚推出在线办公软件的时候,许多人就开始准备昂首挺胸的进入云计算/云服务时代了。当 google 推出 Chrome OS 系统的时候,许多人赞叹在一个像浏览器的系统中就可以做很多传统桌面的事情了。当 Apple 的 ipad 和 iphone 大行其道的时候,热衷于谈论云计算的人越来越多。就像当年的大型机降格为 PC 一样,无数人...

Linux 挖坑不埋指南

2015-10-02
阅读 6 分钟
5k
也许在你开始尝试使用 Linux 时,已经看到了很多对 Linux 不利的言论。例如,发行版本太多难以取舍、安装繁琐、应用程序没那么多、装显卡驱动很痛苦、无线网卡点不亮、声卡沉默着、中文输入法又在 Emacs 里歇菜了……然而 Linux 已经在这个世界上存在了,即使它存在这样或那样的问题,它依然没有死掉,更何况在 Linux 中去...

用 ConTeXt 排版语法高亮的代码

2015-09-30
阅读 2 分钟
4.2k
ConTeXt 社区有一个 t-vim 模块,它能够将 vim 编辑器中的代码语法高亮结果转化为 ConTeXt 排版语句。这意味着,凭借 vim 与 t-vim,顿时可让 ConTeXt 在这方面鸟枪换炮。因为 ConTeXt 内置的语法高亮功能目前太孱弱了,即使是嵌入了 Lua 解释器的 MkIV,也需要用户自行去写语法解析脚本。既然有 vim 所提供的 500 多种...

与 ConTeXt MkIV 官方文档的接驳

2015-09-29
阅读 2 分钟
3.4k
如果你已经按顺序阅读了以下文档: 序幕有些长 睦邻友好的 ConTeXt Standalone 先写作,后排版 ConTeXt MkIV 中文支持的 Hacking ConTeXt 文稿的物理结构 ConTeXt 文稿的逻辑结构 页面布局 那么你已经从宏观上把握了 ConTeXt 的用法,剩下的就是一些排版上的琐碎细节问题。这方面的内容,让我逐一介绍,我必会力有不逮。...

页面布局

2015-09-29
阅读 4 分钟
5.4k
所谓排版,很多人说它是一门艺术,而我一直都是很庸俗的把它理解为在一个矩形的空白区域里有规则的安置文本和图片(网页排版,还会涉及音像媒介)。所谓『页面布局』,就是对那个矩形的空白区域进行一些常规的划分。ConTeXt 对页面的规划如下图所示。

ConTeXt 文稿的逻辑结构

2015-09-27
阅读 4 分钟
4.2k
『ConTeXt 文稿的物理结构』阐述了 ConTeXt 文稿的自身结构。本文所讲述的 ConTeXt 文稿的逻辑结构则是所排版文档的结构,例如文档的章节标题、段落等文档逻辑单元。文稿的逻辑结构可被文稿的物理结构中的任何一种结构所包含。