[发明专利]基于通知的约束集翻译以实现命令性执行有效

专利信息
申请号: 200980118918.3 申请日: 2009-05-18
公开(公告)号: CN102037447A 公开(公告)日: 2011-04-27
发明(设计)人: D·R·谢里登 申请(专利权)人: 奥普塔姆软件股份有限公司
主分类号: G06F9/45 分类号: G06F9/45
代理公司: 上海专利商标事务所有限公司 31100 代理人: 刘佳;袁逸
地址: 美国加利*** 国省代码: 美国;US
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 基于 通知 约束 翻译 实现 命令 执行
【说明书】:

发明领域

本发明涉及计算机语言的自动翻译。

背景

在计算机技术的发展中,已开发了各种编程范例。这些范例中的两个范例是命令性编程和声明性编程。命令性编程需要提供逐步的命令性指令(例如设定等于2、增量c、调用过程f()),程序员将这些命令性指令组合起来以解决感兴趣的问题。声明性编程需要提供顶层信息(例如一组要强制实施的逻辑约束),该顶层信息经常以更透明地涉及感兴趣的问题的方式来指定。命令性编程往往提供改善的执行性能,但命令性程序可能非常复杂并且难以开发和维护。声明性程序往往相对容易开发和维护,但声明性编程也往往提供相对糟糕和/或受限制的执行性能(例如缓慢的执行和/或无通用性)。命令性和声明性范例的这些优缺点是业内公知的。

由于计算机的底层硬件模型是命令性的,并且处理器执行被动存储器上的命令性指令,因此最早的编程语言(例如汇编语言)是命令性的,且今日广泛使用的许多语言(例如C、C++)仍旧主要是命令性的。当前,声明性语言(例如Prolog、Haskell、Siri和ThingLab)往往是研究语言而不是商用开发语言。

在实践中,计算机语言可包括命令性和声明性两种范例的元素,尽管将任何特定语言归类为主要是命令性或主要是声明性很少会是不确定的。例如,C++提供类、虚函数和继承,这允许单段代码在各种对象类型上操作同时仅按照这些类型的某一基类来表达。这是C++的声明性方面,但C++语言本身主要是命令性的。

尽管纯粹的声明性语言尚未表现出通用性,然而在受限域内已获得令人印象深刻的结果。例如,SQL是涉及关系型数据库的查询和更新的受限域声明性语言。例如,查询是由定义“命中”的属性来指定的,而非命令性地指定如何定位这些记录。SQL在数据库应用中具有广泛商业用途。另一受限域语言是JavaFX,它包括SQL类触发机制以声明要在值改变时调用的过程。该工具明显受限于仅允许在当前上下文中定义数据元素上的触发条件。这些JaVaFX触发器也类似于AspectJ和其它所谓面向方面的编程语言中的“连接点”。这些连接点允许在对象初始化、字段读写和异常处理程序期间在过程的开始和结束时调用代码。

受限域声明性语言的另一示例是用来向解析器生成器指定语法的语言。该语法被指定为声明性产生规则。解析器生成器将程序作为这些产生规则的集合翻译成实现针对所指定的语法的解析器的命令性代码。在指定语法来识别明显是声明性的,这依赖于语言翻译器来确定如何实现解析器。这种声明性方法已被证明在语言翻译器生成中具有重大价值,这避免了手动实现解析器的耗时且易于出错的任务。然而,编译器或解释器的其余部分是以单独的命令性编程语言来实现的,这导致与共同使用两种不同语言和翻译器相关联的问题。

在某些情形下,由声明性编程提供的有益结果已推动了各种在单个通用编程语言中提供两种范例的主要优点的尝试。迄今为止的方法主要侧重于将命令性编程结构映射到声明性模型(例如在Kaleidoscope’90中的运行时约束解算器)。另一示例是C++的Turtle库,其中Turtle语言的约束模型被结合到C++中。然而,这些方法看来不能解决纯声明性编程模型的固有低效率的问题。

因此,提供对命令性和声明性结构两者进行更为高效和系统的使用的通用编程将是本领域的进步。

概述

根据本发明的各实施例,声明性编程的所选方面被纳入到另外的命令性框架中。具体地,提供对约束的声明性指定。本发明的各实施例的其它重要方面包括在程序单元不需要事先知道其数据成员中的哪一些服从约束的情形下在翻译时对约束的自动求解以及对程序单元的单独翻译。在实践感兴趣的许多情形下,以声明性方式指定的约束可在编译时由编译器来求解以提供包括用于强制实施约束的自动提供的命令性代码的命令性程序表示。如此,命令性编程所特有的效率不会因为添加了对约束的声明性指定而受到明显危及。贯穿本申请,“翻译”包括“编译”和“解释”,并且对“编译”等的引用可与对“解释”等的引用互换,除非另外专门有说明。

参照附图开始对本发明的各实施例的一些基本的概述是有益的。图1示出已知编程结构的伪代码示例。在该例中,程序单元102包括准声明性语句“do A if X changes(如果X改变则进行A)”。作为该语句的结果,当程序员(例如在“set X(设定X)”行内)更改X时,则该语言自动提供代码以在“set X”指令后立即“do A(进行A)”。在所有附图中,由语言自动提供的代码由虚线包围。图1的示例类似于一些已知的编程结构(例如JavaFX的触发器)。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于奥普塔姆软件股份有限公司,未经奥普塔姆软件股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/200980118918.3/2.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top