天才程序员——法布里斯·贝拉(FabriceBellard)

简介

法布里斯·贝拉(FabriceBellard)有着“天才程序员”之称,因为FFmpeg、QEMU等项目而闻名于业界。同时,他凭着极其深厚的计算机底层功力编写出了多款编译器和虚拟机,并靠着出色的数学知识提出了最快圆周率算法贝拉公式。然而面对这些成就,贝拉坦言不过是因为是喜欢做自己感兴趣的事情。

高中写出压缩软件

贝拉于1972年生在法国格勒诺布尔,从小就对电子设备表现出与生俱来的兴趣,据说他咿呀学语时说出的第一个词语是“magn etophone” (录音机)。

良好的家境使得幼时的贝尔能够更加容易地获得他所探索领域的知识和设备。在他9岁时,家里就给贝拉购买了一台TI-59科学计算器,好满足他对编程的好奇之心。11岁时,贝拉拥有了一台更为先进的TI-49/4A私人电脑。15岁时,贝拉的装备换成了Amstrad PC1512,更为强大的配置和全 qwerty 键盘,令贝拉对计算机和编程所表现出来的浓厚兴趣发挥得淋漓尽致。

读高中的贝拉在PC1512 上编程时,因为磁盘空间有限,他想到通过压缩文件来节省有限的磁盘空间。他用8086 汇编语言(PC1512的机器语言)重写了现有的压缩方法LZSS,优化了程序的结构,使得压缩、解压过程变得更加快速,同时允许被压缩的可执行文件在后续的启动时不需要明确的解压缩。这就是后来著名的可执行压缩程序LZEXE,是当年DOS上第一个广泛使用的文件压缩程序。

贝拉将LZEXE发给几个朋友并发布到各种论坛里,引起了不小的轰动,贝拉的编程能力开始崭露头角。

求学时的思考

高中毕业后,贝拉先后进入巴黎高等综合理工学院和法国电信研究院求学。

早年在编程方面的经历,以及在理工学院求学的经历让日渐成熟的贝拉对计算机科学的整体面貌有了更为全面的认识和思考。他认为计算机科学最重要的两个方面是学习计算机如何运作的原理和知识,以及通过学习计算本身来开发语言,用各种不同的方法让计算机更加有效地工作。

而编程必是基于原始程序设计经验,从一个非常靠近机器的语言开始,慢慢发展为高级的语言。贝拉觉得有志向的计算机科学家通过汇编语言和计算机硬件来深度理解计算机的工作原理是必不可少的一个环节。

发布最快圆周率的算法

1995年,贝拉用 C 语言编写出了快速乘法,FFT 是快速傅立叶变换的缩写,这是一个在数字信号处理中非常常用和有效的算法。欧洲数学家JohnPollard曾发现用在 FFT 中的一个类似的过程可以用做有效的乘法,然而苦于没有实际完整的代码实现,可以说是贝拉最后用 C 语言实现 Pollard 的工作。

1997年,贝拉提出了最快速的计算圆周率的算法,他使用改良后的查德诺夫斯基方程算法来进行圆周率的计算,并使用贝利-波尔温-普劳夫公式来验证计算的结果。这种算法是当时也是目前所有圆周率算法中最快的一种,这个计算N位圆周率的公式比传统的BBQ算法要快47%。为了纪念贝拉对圆周率算法所作出的杰出贡献,他所使用的改良型算法被命名为“Fabrice Bellard算法”。

2009年,贝拉用桌面电脑打破了由超级计算机保持的圆周率运算记录。他仅花费了116天,就计算出了PI的小数点后第2.7万亿位,超过了排名世界第47位的T2K Open超级计算机于2009年8月17日创造的世界纪录,新纪录比原纪录多出1200亿位,然而,与超级计算机比,贝拉所使用的的不过是价格不到2000欧元的个人PC,配置、性能根本无法与T2K Open相提并论。

贝拉在圆周率方面的辉煌成就,使他创造多次圆周率计算的世界纪录,并因此而登上《科学美国人》法文版。

写出VReng和TinyGL

1998年,贝拉开发出VReng (虚拟现实引擎),这是一个分布式 3D 应用程序,运用多播技术允许通过 Internet 连接在虚拟世界中导航。之后,贝拉注意到有效的OpenGL后端是基于软件的,比实际需求要慢很多。于是他决定基于 VReng 的代码来编写一个更小和更快的3D光栅。

最终在 2002 年,贝拉发布了 TinyGL,一个 OpenGL 的子集的小型实现。TinyGL 比 Mesa 和Solaris 的OpenGL 快很多,是平台独立的,并且数量级比后二者小很多,总共才 400KB。这也是他在图像处理领域取得的重要成就。

开发出 FFmpeg

2000年,贝拉化名Gérard Lantau公布了著名的FFmpeg项目。通过这个项目,贝拉将自己在电信和数字信号处理方面的专长带到了最前沿。

FFMPE允许用户在许多不同的格式之间进行转换。FFMPEG分割成几个部分,由 libavcodec和libformat 构成,Libavcodec收集音频和视频编解码库,Libavformat提供音频和视频容器复用及解复用库,这两个模块结合起来提供了解析和在不同格式之间进行转换的各种方法。

这个项目无比强大,我们今天所熟知的视频播放软件,如暴风影音、QQ影音、YouTube、VLC等都使用了FFmpeg的编解码函数库。FFmpeg易扩展、功能强、速度快、占资源少,支持的音视频格式极其广泛,基本上超越了其他所有同类软件,被誉为处理数字视频和音频的“瑞士军刀”。

开发出QEMU

继FFmpeg之后,贝拉另一个杰出的成就便是在2005年发布的QEMU。

QEMU是一个处理器仿真,可以用软件来模拟不同处理器体系,允许为一个特定处理器编译的程序通过软件仿真在另外一个体系上运行。QEMU近似于已有的Bochs、PearPC,但具有后两者所不具备的高速及跨平台等特性。

贝拉在QEMU之中大量加入了自己的设计构想,使得它不止是一个简单的处理器仿真器,也可以通过动态翻译来提高性能,借助KQEMU加速器处理,甚至能模拟至接近真实电脑的速度。

QEMU非常强大,若没有过硬的底层硬件和操作系统知识根本完成不了,现在许多的底层开发人员都依赖于它,甚至操作系统教学领域也多用其作为演示。

因为QEMU的速度之快、效率之高,它被包含在许多主要的虚拟化技术中,如 VirtualBox、Xen以及Linux Kernel-based 虚拟机(KVM)。

国际混淆C代码大赛两次夺冠

国际混淆C代码大赛(IOCCC) 是C语言界的一项大事,目的是写出最有创意的、最让人难以理解的C语言代码,它每年都吸引了大量的C程序员前去角逐荣誉,贝拉曾两次夺冠。

一次是在2000年,贝拉向IOCCC提交了一个4KB大小的C语言编译器子集 OTCC。OTCC不仅使贝拉顺利夺得了大赛的冠军,也成为后来的TinyCC的起点。TinyCC 是一个ANSIC99编译器,比其它C 编译器小很多,在发布后的很长时间里一直被开发人员使用。为了演示它的效果,贝拉写了一个工具用 TinyCC 在 15 秒之内就完成了Linux内核的编译和启动。

另一次是在2001年,贝拉设计出一个大小仅为475 字节的程序用于计算和打印最大已知的素数(26972593 – 1),他创造性地使用整数快速傅立叶转换,在几分钟之内便能打印出结果。

Super-Productive Programmer

PavanYara曾形容贝拉是“世界上最多产的程序员(Super-ProductiveProgrammer)”,除了上述成就之外,他还有许多项发明创造。

例如,贝拉在2003年开发了Emacs的复制版QEmacs。

2005年,贝拉用带有VGA显卡的PC机改装成DVB-T的信号发射器。公司为了防止泄密,不仅要封声卡插口,还要焊死显卡插口。

2011年,贝拉用JavaScript写了一个PC虚拟机Js linux,仿真了一个32位的x86兼容处理器,一个8259可编程中断控制器,一个8254可编程中断计时器,和一个16450 UART。在普通桌面电脑的Chrome浏览器中,Jslinux只用了仅仅5.075秒就启动了Linux。

自由软件的积极倡导者

虽然贝拉多产,但是他最为看重的还是FFMPEG、 QEMU,他坦承这是他工作中的最重要的两个项目,但是他花费大量心血开发并维护它们并不是出于对金钱的渴求。

事实上,和“Linux之父” Linus Torvalds等人一样,贝拉也是自由软件的积极倡导人,他在自由软件授权协议的保护下,将包括FFMPEG 、 QEMU在内的许多重要软件的源码都毫无保留地公布了,所有人不仅可以自由的下载他的程序,也可以下载和修改程序的源代码。

贝拉说自己对金钱和名誉毫无兴趣,当年化名Gérard Lantau公布FFMPEG的举动便是有力的佐证,他只是简单的喜欢在他所感兴趣的、他认为有用的项目上花费精力和时间。

有人问他为什么决定在这样宽广的领域中工作,贝拉回答说:“这也不是决定,只是往往我做同样的事情时感觉很无聊,所以我尝试一次又一次的转换项目。”

当贝拉沉浸在这些工作中时,他希望与全世界共享他的工作成果,也希望这对对他人有所帮助。贝拉不屑于行政管理和社交任务,他喜欢做好的、自己感兴趣的事情。