写点什么

面向语言编程:超越面向对象编程的革命性进步?

  • 2007-09-20
  • 本文字数:1254 字

    阅读完需:约 4 分钟

在巴塞罗那举行的 Server Side’s Java 专题讨论会上,Martin Fowler 和 Neal Ford 做了一场展示面向语言编程的重要报告。Fowler 曾撰文将面向语言编程定义为“围绕一组领域特定语言来构建软件的编程风格”。Fowler 和Ford 又进一步发展了其中的一些想法(可参见 Fowler at Jaoo 2006 ),并提出了“超越面向对象编程的革命性进步”的可能性。

面向对象编程以分层结构和树状的抽象提供了一种有用的建模范式。然而现实并不总是按层次组织的,Neal Ford 指出。现实的“盘根错节,彼此联系”是很难用理想化的树状画面来勾勒其模型的。其结果就是现在广泛使用的 aspects 和 XML,它们渐渐地增加了复杂性,并侵蚀了我们实施抽象的原意。为了弥补这个问题,抽象的水平应该再次提升,因此 Ford 建议用语言取代分层来作为建模机制。

按照 Martin Fowler 的说法,面向对象的领域建模让我们得以“汇集词汇”,但语法——将词汇组合起来的方法——却是缺失的;DSL 补足了语法的方面。因此面向语言编程引导我们“从思考词汇,即对象,走向一种结合了词汇和语法的语言观念。”

对 Neal Ford 来说,用 DSL 来作为一种新的抽象机制令他特别感兴趣的是,它能填补上下文的空缺。在缺乏上下文的环境中,你要“从最基本的共识着手并解释所有的细节”。这就是你与 API 和框架沟通的方式,因为它们没有“任何内建的上下文”。因此代码中总是不断重复一些上下文,以致成了干扰。相反 DSL“总是有着隐含的上下文,上下文几乎从不露面,就算露面也是很少很少,通常最多一次”。因此我们不必一再地提供上下文信息,于是代码更具可读性,也更有表现力。

Fowler 和 Ford 都强调了可读性的重要。他们认为 DSL 的动机经常被误解。目的并不是为了让业务分析师能够自己写代码,而是为了让他们能够阅读和检验代码,从而填补专业开发者和业务人员之间的罅隙。

有些人厌恶使用面向语言编程的风格,因为他们担心维护的问题以及增加的学习负担,特别是在缺乏强大的 IDE 来处理这些纯文字的 DSL 的情况下。Fowler 最近在一篇文章中反对说“大一点的框架[……] 带来的挑战一点都不比学一门语言少”,他再次强调了单一语言编写的项目的复杂性。并且,Neal Ford 强调说如果一门DSL 很难读,那么它的设计就是很糟糕的,因为“[使用DSL 的] 目的之一就是为了创造出更容易阅读的代码”。

至于IDE 支持,现今至少有三家主要厂商正为面向语言编程提供这一类工具:Charles Simonyi 开发的Intentional Software,Microsoft 的Software Factories 和JetBrains 开发的Meta Programming System。这些工具,Martin Fowler 称之为语言工作台(Language Workbench),让设计并使用DSL 变得更加简单。这些工具提高了面向语言编程的竞争优势,虽然Fowler 相信“还要过几年大多数人才会考虑用[语言工作台] 来开发实际的项目。”

你怎么看?面向语言编程有机会成为“下一位明星”吗?语言工作台的能力会在多大程度上影响你在项目中采用DSL 的决策呢?

查看英文原文: Language-oriented programming : an evolutionary step beyond object-oriented programming?

2007-09-20 00:011707
用户头像

发布了 225 篇内容, 共 67.9 次阅读, 收获喜欢 52 次。

关注

评论

发布
暂无评论
发现更多内容

Go-Excelize API源码阅读(十三)—— GetSheetVisible、SetSheetFormatPr

Regan Yue

Go 开源 源码解析 8月日更 8月月更

悟了,应该都了解分布式架构下负载均衡器吧

知识浅谈

负载均衡 8月月更

直播商城系统——直播和电商的合理有效结合

开源直播系统源码

软件开发 直播系统源码 直播带货系统 直播商城系统 直播app系统

基于CC2530(ZigBee)设计的景观照明控制系统+配套手机APP

DS小龙哥

8月月更

GitHub标星139K的:“嵌入式Linux系统开发教程”

收到请回复

Java Linux 程序员 嵌入式 #运维

计算机网络(二、物理层)

计算机网络 8月月更

低代码实现探索(四十八)后端服务

零道云-混合式低代码平台

迄今为止最完整的DDD实践

阿里技术

DDD 经验分享

CSS

武师叔

8月月更

借我 1 小时,与 1000 人一起参与开源

腾源会

开源 腾源会

我做了个《联机桌游合集: UNO+斗地主+五子棋》无需下载,点开即玩!叫上朋友,即刻开局!不看广告,不做任务,享受「纯粹」的游戏!

HullQin

CSS JavaScript html 前端 8月月更

3 分钟温故知新 RxJS 【创建实例操作符】

掘金安东尼

前端 函数式编程 8月月更

预约直播 | 基于预训练模型的自然语言处理及EasyNLP算法框架

阿里云大数据AI技术

深度学习 阿里云 算法框架

Promise.allSettled 的 Polyfill 处理

汪子熙

JavaScript Promise Async 8月月更 web编程

设备管理|风机的日常运行与维护

PreMaint

企业设备管理 预测性维护 设备健康管理 风机的日常运维

阿里云鲍文乐:基于事件的自动化运维最佳实践

阿里云弹性计算

事件 自动化运维 CloudOps

付费会员之我见(43/100)

hackstoic

商业模式

【LeetCode】课程表Java题解

Albert

LeetCode 8月月更

圣庭医疗联合创始人谷红仓:高通量基因测序在药物研发和靶向治疗中的应用

阿里云弹性计算

HPC 高性能计算 生命科学 基因测序

Web登录很简单?开玩笑!

TimeFriends

8月月更

五分钟给你的 gRPC 服务加上 HTTP 接口

万俊峰Kevin

Go 微服务 gRPC web开发 go-zero

腾讯发布第二季度财报,腾讯云数据库收入同比增长超过30%

科技热闻

组件解析:基础组件button的实现

独来独往

大前端 低代码 可视化 组件化 低代码平台

AntDB基于WAL日志的DML数据闪回实现

亚信AntDB数据库

AntDB 国产数据库 AISWare AIDB

阿里最新的Spring Boot项目开发实战手册,掀起了项目实战变革狂潮

Java面试那些事儿

Java 编程 程序员 面试 架构师

云原生(二十) | 深入了解Kubernetes(k8s)Service

Lansonli

云原生 k8s 8月月更

少儿编程是智商税吗?不花钱让孩子赢在起跑线!

博文视点Broadview

开源一夏 | 使用 JavaScript 将文本转换为文件

海拥(haiyong.site)

JavaScript GitHub 开源 前端 8月月更

怎么分辨企业转型是“真数字化”还是 “伪数字化”?

雨果

数字化转型

应用缺少POI数据,如何开发地点深度信息?

HarmonyOS SDK

什么是文件存储?与对象存储有什么区别?

wljslmz

文件存储 8月月更

面向语言编程:超越面向对象编程的革命性进步?_架构_Sadek Drobi_InfoQ精选文章