关键字:下一代编程范型主要原则 LOP : The Next Programming Paradig
Language Oriented Programming : The Next Programming Paradigm
Sergey Dmitriev, JetBrains
现在是软件开发中开始下一次技术革命的时候了,而这次革命的轮廓正变得越来越清晰。下一代编程范型也在接近我们,但仍然没有完全成形--不同的部分有不同的名称:Intentional programming, MDA, generative programming, 等等;我建议把把所有这些新方法归并为一个名字: ‘language-oriented programming’(面向语言的编程), 而本文将阐述这种新的编程范型的主要原则
今天主流的编程方法有一些内在的假定像脖子上的绳索一样桎梏着我们,尽管大部分程序员还没有意识到它;即使算上在编程领域取得的所有进步,我们也仍然处于石器时代;我们有我们信赖的石斧(面向对象编程),能够满足我们的需要,但是当用它来对付最困难的问题时,它会裂成碎屑;为了超越石器前进,我们必须驯服烈火,只有这样,我们才能铸造出新的工具,激发一个创作的新时代,和新技术的爆发
我将讨论编程的局限,它强迫程序员像计算机一样思考,而不是令计算机像程序员一样思考;这是严重的,根深蒂固的局限,需要花费巨大的努力去克服它;当我说这将是编程中下一个大的范型转换时我并没有自命不凡;我们需要彻底重新定义我们编写程序的方法
本文中,我表述了我的观点和我当前在Language Oriented Programming (LOP)上的工作;首先我将展示目前主流编程方法的错误,然后我会使用示例来解释LOP的概念,它们基于我已有的一个LOP的实现:the Meta Programming System (MPS). 本文有意只是给你一个对LOP的惊鸿一瞥,目的是激发你对这个思想的兴趣,并希望能够得到反馈和讨论
Part I. LANGUAGE ORIENTED PROGRAMMING OVERVIEW
Language Oriented Programming and the Meta Programming System
理想的,做一个程序员意味着我可以对计算机做任何事情,我有完全的自由,完全的控制;但实际上,今天的程序员只有非常受限的自由;当然,我确实可以在计算机上做任何事情,但其中一些事情花费了我许多年的努力,而它们实际上只需要少的多的时间;一定有什么事情不对劲
程序员被限制是因为他们深深依赖于那些他们不能轻易改变的编程基础设施:编程语言和开发环境;如果我需要一些语言的扩展,我只能等待语言的设计者去更新它;如果我需要我的IDE有一些额外的强大功能,我只能等待供应商来添加新特性;就是这些依赖限制了我完全的自由;当然,我可以写我自己的编译器和IDE,实际上,这也是我启动了IntelliJ IDEA的原因,因为我厌倦了依赖现有的弱弱的Java IDE;但是,这会花费大量的时间和努力,并且显而易见,对大部分程序员来说是不可行的;理论上的自由和实际的自由之间存在巨大的差异;下文中当我谈到自由时,我指的是实际的自由
获得自由的途径是减少我们的依赖层次;例如,Java的一个主要目标是减少对操作系统的依赖,给开发者在不同操作系统上部署的自由;因此,为了在语言和环境之上获得自由,我们需要减少对它们的依赖
为什么这是一个问题呢?任何general-purpose的语言,像Java和C++,给了我们用计算机做任何事情的能力;这是事实,至少理论上是这样,但是,general-purpose的语言趋向于如同后面我将讲到的般生产效率低下;作为一种替代,我们可以使用domain-specific languages(DSLs,aka ‘little languages’),它们被精心设计成在特定问题域具有高度生产率,比如用SQL编写数据库查询;DSLs的强大之处,领域相关,也正是它们的弱处,因为任何真实世界中的程序都会包括许多不同的领域