`
canonical
  • 浏览: 366935 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[导入]关于LOP(Language Oriented Programming)

阅读更多

IntelliJ老板的一篇文章Language Oriented Programming: The Next Programming Paradigm
英文 http://www.onboard.jetbrains.com/articles/04/10/lop/
中文 http://blog.csdn.net/chelsea/archive/2005/02/17/290486.aspx

Martin Follower的一篇文章 Language Workbenches: The Killer-App for Domain Specific Languages?
http://www.martinfowler.com/articles/languageWorkbench.html

概念解释:
DSL(Domain Specific Language): a limited form of computer language designed for a specific class of problems, 例如SQL语言,xml配置文件。
LOP(Language Oriented Programming): the general style of development which operates about the idea of building software around a set of domain specific languages.
Language Workbench: the new breed of tools to do language oriented programming

LOP不是一个新的提法,不过随着前段时间MDA(Model Driven Architecture)概念的热炒,LOP似乎终于熬到了应用层面。Sergey Dmitriev的文章中批评了主流程序语言的不足,大概有这么几条:
1. 通用语言表达能力(expressive power)很差,Time Delay to Implement Ideas
2. 领域概念的表达分散在实现代码中,整体图像迷失,因而Understanding and Maintaining Existing Code很困难。
3. 类库等不是用领域概念表达的,因而Domain Learning Curve很陡峭。

这 些都是标准的陈词滥调。地球人都知道,从问题描述到软件实现之间存在着巨大的逻辑障碍,这种障碍有一部分是本质性的,即源于我们认识中的创造性因素,而另 一部分是技术性的,即源于我们使用的技术手段的限制。我们所能想到的解决的办法就是尽量提高解决方法的抽象层次, 提升到所谓的领域层面,从而消解技术性障碍,同时辅助创造性发展。当我们的脑子里不再充斥着各种技术性细节的时候,大概就可以集中精力做些创造性工作了。 LOP把这些老帐又翻出来,到底它提供了什么新意?下面我们简要分析一下LOP方案中概念的含义。

1. 领域(Domain)。
    计算机语言与自然语言在使用上是有着深刻不同的。自然语言只是传递着信息,而计算机语言还要负责具体干事情,即计算机语言要同时说明怎么做和怎么用。做与 用这是两个不同的领域,例如我现在编了一个时光机器的软件,上面就一按钮,只要轻轻一按,嗖的一声我就回到了500年前。怎么样,使用简单吧,但实现呢? 我们当然希望在一个领域中使用最适合它的描述方法和控制指令。目前主流语言都是面向机器实现领域的(是实现领域的DSL?),加上Von Neumann串性化体系的限制, 强迫我们用动态过程来实现静态概念,更加剧了它对使用领域描述的不适应性。我们所要做的就是将做与用尽量分离,但同时尽量增大用的灵活性,domain representation不仅仅给最终用户用,还给程序员用。能在使用领域概念范围内解决的问题,我们不要将其拖延到实现领域。在领域间进行转换,总 存在信息转换成本,甚至会造成信息失真。例如,一幅画看起来结构很简单,但是用自然语言描述起来都相当困难,更别说转换为计算机语言了(当然,这个例子很 有可能是误导的,因为涉及到不同的感官,其中的区别是非常深刻的,无法用单一的原因去解释)。所谓领域区分,最重要的还是使用领域与实现领域的区分(不同 的复杂性,不同的表现形式...),而不仅仅是业务领域与计算机领域的划分。在业务领域内部我们也要区分使用与实现。

2. 领域特定语言(DSL)
    语言与库的最大差别在于语素可以自由组合,以极低的代价构造出无数可验证的结构,而库函数的组合和搭配调用是冗长的,受限的,难以进行校验的。DSL强大 的描述能力和推理能力其实是通过放弃其通用建模能力而实现的。最有效的DSL必须弱于图灵机,必须将大量做的过程分离出去,必须引入大量的领域概念(本 体)。
    在引入外部概念的时候,DSL会将其转义为领域概念之后使用,从而消除歧义性并降低理解难度。
    DSL不是在通用环境下工作,而是在明确受限的context下工作,因而概念的表达可以更加简洁,而且领域概念之间还可以通过context构成一种整体性,例如非此即彼。
    witrix平台中的tpl模板引擎在一定程度上可以看作是一种DSL tools, 我也一直推动tpl在这个方向上发展。tpl具有强大的领域抽象能力,例如
       弹出一个选择系统用户的窗口,直接实现为 
        <a href="select_user.jsp?deptId=1">选择用户<a>

    封装为tag之后,使用形式变为
        <app:选择用户 部门编号="1" />
    经过转换之后,这里的调用不再是API含义,不再是说明怎么做,而是描述用什么。tpl中的标签可以使用调用时明确指定的参数,也可以从全局 context中导入隐含的变量,从而依赖于所在领域的假定。例如,我们的很多界面控件需要与后台交互,依赖于后台jsplet框架,因而这些tpl标签 选择自动导入$thisObj和objectName等变量。领域抽象与context依赖其实正是DSL的精华所在。
    (关于DSL,有些人可能会将其等价于规则引擎(rule engine), 这其实是一种误解。规则引擎实现的是条件空间的分解与合并,它是一个独立的技术,与DSL并没有必然的联系)

3. 语言工作台(Workbench)
    Workbench是LOP的使能技术。我们希望自由的构造DSL,必然需要对结构具有强大的控制能力。而文本语言总是线性的,静态的。看看现在对自然语 言的研究吧,显然我们对于怎样在线性文本中塞入更多的结构缺乏本质性的认识。我们人为构造的语言,限于表现形式,其结构都异常的贫乏。计算机的脑袋是简单 的,于是,我们想到增加维度,通过复杂的工具配合,来实现多层次,多视角, 动态的结构控制。在我看来,很多时候这是一种无奈之举,当然也确实是目前唯一可行的办法。
    工具复杂了之后,造成的本质性障碍在于结构上的僵化,其具体表现之一就是所谓的厂家锁定,一种结构融合上的困难。不同厂家产品的结构具有巨大的差异而无法 互相交互。xml其实正是为了解决这种结构交互困难而产生的,所以我更希望看到基于xml的工作。而在xml的形式下,能够实施的结构变换现在也在不断发 展当中,AOP, XSLT等等。
分享到:
评论

相关推荐

    基于LOP 的行为识别

    利用骨骼进行的人体行为识别, 基于LOP 的行为识别,可以运行 (action recognition) 文件列表: actionletEnsemble-master actionletEnsemble-master\.gitignore actionletEnsemble-master\LICENSE ...

    lop_detection.nasl

    lop_detection

    lop:用于 Java 的低开销分析器

    LOP - 用于 Java 的低开销分析器 LOP 是一个非常简单的 Java 分析器,它通过使用字节码检测。 用法 在 Java 程序的根目录中创建文件profiler.properties 。 在此文件中,添加一组遵循方案<class>=,<method>... ,...

    ACIS官方对于LOP操作的介绍,英文版,没有侵权

    ### ACIS中的LOP操作详解 #### 一、概述 ACIS是一款先进的三维几何建模内核,被广泛应用于各种CAD/CAM/CAE软件之中。LOP(Local Operations)是ACIS提供的一种局部操作功能,它允许用户在不改变实体模型拓扑结构的...

    LOP工艺管道安装方案.doc

    【LOP工艺管道安装方案】是针对特定化工装置——LOP装置C10、C20区工艺管道的施工指导文件。此方案详尽规划了从工程概述、编制依据、施工工艺程序到施工方法和技术措施的全过程,确保工程优质、安全地完成。 1. ...

    baitapjava-tren-lop

    标题 "baitapjava-tren-lop" 暗示这是一个关于 Java 编程的学习项目或者练习集,可能包含一系列的 Java 代码示例和练习题,用于提升编程技能。"lop" 可能指的是 "lop"(逻辑运算)或者课程的级别(如班级、学期等)...

    Lop:为您的Android录制视频

    在Lop项目中,`Lop-master`这个文件名暗示了这是一个关于项目源码的压缩包,可能包含了完整的Android项目结构,供开发者参考学习。 要使用MediaRecorder,首先要初始化并配置它。在Android应用中,通常会在创建一个...

    10发三码绑定半成品通讯板.LoP100

    10发三码绑定半成品通讯板.LoP100

    lop BT_python_dozenrcc_

    标题中的"lop BT_python_dozenrcc_"似乎指的是一个与Python相关的项目或工具,其中"BT"可能代表“行为树”(Behavior Tree),这在游戏AI或者机器人控制领域常用。"dozenrcc"可能是该项目的特定部分或者功能模块,但...

    lop:最不令人反感的路径

    标题 "lop:最不令人反感的路径" 指向的是一个可能的编程问题或算法挑战,其中"lop"可能是“Least Offensive Path”的缩写,暗示我们需要找到一条在某种意义上最为“温和”或“不具侵犯性”的路径。描述中的“洛普”...

    afl.rs, 带美国模糊lop的模糊 Rust 代码.zip

    afl.rs, 带美国模糊lop的模糊 Rust 代码 使用美国模糊 lop ( AFL ) 代码的afl.rs 模糊 Rust是什么?模糊测试是一种软件测试技术,它通过提供伪随机数据作为软件的输入来发现安全性和稳定性问题。 美国模糊lop是一种...

    面向循环的编程:一种新的代码重用攻击以绕过现代防御

    面向循环的编程(Loop-Oriented Programming,简称LOP)是一种新兴的代码重用攻击技术,它能够绕过现代防御机制,包括粗粒度的控制流完整性(Coarse-Grained Control Flow Integrity,简称CFI)和影子栈(Shadow ...

    EPL指令说明

    EPL(Eltron Printer Language)是一种专为条码打印机设计的编程语言,旨在简化打印操作并提高效率。本篇将详细解析EPL指令集中的一些关键命令,包括初始化、文本打印、条码打印、图形处理、线绘制等,以帮助用户更...

    lop:关于编程逻辑学科的一般信息

    编程逻辑不仅仅是关于语法和语句,更是关于思考和解决问题的方式。 1. **编程思维**:编程逻辑的核心是编程思维,一种将问题分解为可执行步骤的方法。它包括分析问题、定义目标、创建算法以及调试和优化代码。通过...

    lop67tk:Lop 67 TK 是一个教育网站,让您在我们的网站上搜索、玩耍、学习。 您可以通过翻译成其他语言、错误报告等来帮助我们。

    关于我们 Lop 6/7 TK 是一个教育网站,让您在我们的网站上搜索、玩耍、学习。 我们的产品:Lop 6/7 Tim Kiem(搜索引擎)、Lop 6/7 Hoi Dap(问答)、Lop 6/7 Hai Vui Lam(媒体社交网络)、... 网站: : ,也请查看...

    数学游戏:JOGO DE LOP

    数学游戏:JOGO DE LOP

    AFL:American Fuzzy lop-面向安全的模糊器

    美国模糊 最初由Michal Zalewski开发, 。 如果您没有时间阅读此文件,请参阅 。1)引导模糊测试的挑战模糊检测是识别实际软件中安全问题的最强大,最成熟的策略之一。 它负责迄今为止在安全性至关重要的软件中发现...

    moeldv_D8JE5LOP

    由于"bot_dev01"作为描述,我们可以推断这可能是一个关于机器人开发的项目,特别是处于开发阶段01的版本。 【标签】"Apex" 指的是Salesforce平台上的Apex语言。Apex是一种托管在Salesforce云平台上的面向对象的编程...

    JavaEye新闻月刊 - 2008年3月 总第1期.pdf

    2. **面向语言的编程**:文章讨论了面向语言的编程(Language-Oriented Programming, LOP)这一新兴编程范式,它允许开发者创建定制的编程语言以解决特定问题。文中提出疑问,这是编程设计的新潮流还是仅仅是一种...

    LOP:晶格有序编程

    洛普(LOP)是一种新颖的编程语言,它引入了图论的概念来实现程序的结构和控制流。晶格有序编程的核心是将程序设计为一个有序的、数学化的结构,类似于图论中的晶格。这种编程范式允许开发者以更抽象和结构化的方式...

Global site tag (gtag.js) - Google Analytics