何为开源EGL,为什么是它?

标签: 开源 egl | 发表时间:2012-01-09 09:38 | 作者:RationalGroup
出处:http://blog.csdn.net

何为开源EGL,为什么是它?

作者:Tim WWilson,EGL架构师,EDT项目领导者 (2011/12/25)

翻译:金发华,EDT项目committer (2012/01/08)

原文请参见: http://xeglblog.blogspot.com/2011/12/what-is-egl-and-why-should-i-care.html

 

        每次有人建议或者推出一门新语言的时候,一个永恒不变的问题是:我们真的需要另外一门编程语言吗?以本人之拙见,在大部分情况下确实不需要,除非它确实跟别的语言有很大的区别。那到底EGL语言为什么与众不同,值得大家关注呢?

        EGL通常只是被描述成一门第四代语言。是的,当EGL只是包含在IBM的产品中,并以一个封闭的黑匣子方式提供给大家的话,这种说法也是合理的。不过现在基于Eclipse的开源版本的EGL并不是把原来的EGL老酒装新瓶重新封装一下,它是以编程语言的方式来表达特定的领域概念,一个完全普遍化和可扩展(generalized and extensible)的框架,也提供了可扩展的编译器和代码生成器框架。EGL编程语言本身确实只提供了一套语法和编译器来创建和验证EGL元模型实例。然而真正有意思的地方是那些代码生成器,它们能解释这些模型并生成目标代码。而且任何代码生成器能被扩展以支持新加入的语言模型元素,或者改变既有的代码生成方式而对既有的代码生成器不产生影响。用户也可以自己写一个代码生成器以支持现在EGL不支持的目标运行时(现在EGL提供了Java和JavaScript代码生成器)。一个很好的例子是写一个新的面向Objective C的代码生成器;另外一个扩展代码生成器的例子是基于现有的Java代码生成器进行扩展,使之能理解如何把用户界面应用概念对应到目标Andriod运行时框架。

        这种定义一个模型并使用模型编译器把它们匹配到运行时的方式看起来跟以前的模型驱动开发(Model Driven Development)很相似。在很大程度上是这样的,但是EGL不一样的地方是它是通过编程语言来实现这一切的,包括建模自身,因而也从不需要去编辑生成出来的代码。此外,EDT项目里的工具提供了基于EGL代码调试的功能,而不是生成出来的代码(虽然也有可能需要调试生成出来的代码)。

         EDT项目真正有价值的地方是提供了一个编程语言的基础架构,这个架构下生成的低层次的“汇编”语言是给定的目标平台下广为接受的运行时语言,而不是虚机或者硬件上的二进制代码。当前刚发布的EDT0.7提供了面向基于Web 2.0的C/S(客户/服务器)的业务应用的一种实现,客户端基于浏览器(JavaScript),以及服务器端基于JEE的Web服务(Java)。别的选择也可以被实现,并且基于当前的实现的扩展可以、也将被加进来。

         EGL不是说要来替换现有的语言或者框架,它反而是利用当前既有的和将来会出现的任何新的东西。EGL能够这样做是因为它本身是一门元语言,EGL和第三代语言(比如JavaScript)之间的关系跟传统的第三代语言与汇编语言的关系非常类似。EGL和其他生成第三代语言代码的第四代语言不一样的地方是,暴露给EGL程序员的编程模型是可扩展的,并且将那些编程模型匹配到真正的运行时的代码生成过程也是完全可扩展的。

         那到底什么东西能吸引我们呢?下面是一些例子:

  • 所有应用程序层上使用一门通用编程语言
  • 采用DRY – 不要重复自己(Don’tRepeat Yourself)原则来实现跨层共享的通用数据结构定义。一个很典型的例子是必须存在于客户,服务器端和批处理语言的数据定义及其验证逻辑。
  • 通过更换编译器和重新生成代码,就能切换中间件、框架,甚至运行时平台,而不是刚开始做决定的选择。当然这么做的先决条件是编程模型抽象了给定的框架或者中间件要做的事情的语义。典型的例子是持久化、远程调用、交易管理、业务规则定义和管理等。

        EGL适合任何人和问题吗?不。但是,下面有几种情况EGL是理想的解决方案:

  • 面向多平台的技术和必须与既有投资集成的多层应用程序。通过使用这些系统本身的技术来集成来整合这些技术是极度困难的。即便是你有某个可以工作的解决方案,但是所支持底层的技术选择可能随着时间的选择需要做出改变。如果使用EGL来做这个解决方案,它既很易于编程和维护,并且在需求产生的时候很灵活地改变底层的目标技术。
  • 使用掌握跨技术领域程序员的灵活性。当前的事实是给指定平台创建应用组件的能力只限于那些精通于该平台下的特定的编程语言的人。虽然拥有这些人是绝对必要的,但并不是说在创建一个商业应用时,就需要掌握应用组件可能部署到的所有地方的平台相关技术。我见过大学刚毕业的孩子能很快写出部署到主机上的应用。我也看到COBOL程序员能创建出Web 2.0C/S应用。这种情况太常见了,反而使懂得业务这项真正重要的技能显得不重要了。像EGL这样的技术允许公司将这项真正重要的技能利用到开发新的应用上。

         我希望这篇博客能说清楚EGL的某些方面,以及为什么说它不是另外一门做早就做过了的编程语言。人们非常谨慎的选择他们的编程语言,EGL不是试图替代那些选择。简单的说,在当今极端复杂的世界里,有一种能在更高、更有效的抽象的层次上写、管理和维护应用程序的需求,编译技术在这方面一直做得很好。让那些在特定技术方面特别精通的人把他们的知识通过模型编译器表达出来,从而让所有其他人能利用上那些知识。

         在不久的将来,我们将会实现一些EDT的“扩展”。这将会是一个很好的展示EDT是如何通过扩展来解决社区里感兴趣的特殊问题的例子。为了保证扩展的项目的质量,那些取得足够多的人感兴趣的扩展将最终会作为EDT的子项目来维护。正是像这样的项目,将展示出真正EDT想展示的本质。


作者:RationalGroup 发表于2012-1-9 9:38:28 原文链接
阅读:12 评论:0 查看评论

相关 [开源 egl] 推荐:

何为开源EGL,为什么是它?

- - CSDN博客推荐文章
何为开源EGL,为什么是它. 作者:Tim WWilson,EGL架构师,EDT项目领导者 (2011/12/25). 翻译:金发华,EDT项目committer (2012/01/08). 原文请参见: http://xeglblog.blogspot.com/2011/12/what-is-egl-and-why-should-i-care.html.

Google开源LevelDB

- 酿泉 - Solidot
Google宣布在BSD许可证下开源其键值存储引擎LevelDB. LevelDB C++库可用于多种不同环境,如被浏览器用于存储最近访问的网页缓存,或者被操作系统使用去储存安装的软件包和依赖包清单,或被应用程序用于存储用户设置. Google称,即将发布的新版Chrome浏览器,就包含了基于LevelDB的IndexedDB HTML5 API实现.

再论开源

- - 谢益辉
几年前我写过一些关于开源的 想法,如今再来看开源,我觉得问题已经不在说教上,而是在趋势上. 倒退十年或更久,那时候程序员相对还比较稀缺,软件闭源开发出来之后别人模仿的成本高,而这些年计算机教育的普及让码农数量变得越来越多,更多人懂编程了,模仿的成本大幅下降. 写软件作为谋生的目的已经在弱化,更多的是为了自己的实际需求,或社区名声:你不开源.

SoftEther VPN开源

- - Solidot
日本筑波大学的全球分布式公共VPN中继服务器软件SoftEther VPN正式在GPLv2许可证下开源,源代码托管在Github、SourceForge和Google Code上. SoftEther VPN是VPN Gate的底层VPN引擎,在开源之后用户将可以编译出自己定制的二进制包. SoftEther VPN提供了一种分布式的免费公共VPN中继服务,服务器由志愿者托管,因此很少能提供长时间的VPN连接,但代理服务器的不断变化也增加了封杀难度.

Facebook 开源 Detectron

- - 最新更新 – Solidot
Facebook 在 Apache 2.0 许可证下 开源了它的目标识别平台 Detectron, 源代码托管在 GitHub 上. Detectron 用 Python 开发,基于 Caffe2 深度学习框架. Facebook 同时公开了超过 70 个预先训练的模型. Detectron 项目始于 2016 年,实现了一系列最新的目标识别算法如 Mask R-CNN,该软件平台在社交巨人的视觉感知系统的进步上扮演了重要角色.

ios代码开源

- - CSDN博客移动开发推荐文章
本人从10年开始搞ios开发,从菜鸟到现在的入门,期间遇到了许多困难,也总结了一些东西,本着开源精神,希望大家共同成长的目的把这个工程开源出来.. 这个工程是从11年到13年之前完成的.主要是我平时用到的一些基础功能模块.其中有其他开源的代码和我自己写的一些.代码结构基本乱,12年以后的代码结构还可以,不是很乱,之前水平有限,如果不怎么样就别喷我了.

Azul开源Zing Jvm

- - InfoQ cn
4月末,继Zing 5.2 之后,. Azul Systems宣布他们将无停顿(pauseless )的 Zing JVM提供给开源软件开发者和项目,以供开发和测试. Azul Systems 工程部副总裁和合作创始人Shyam Pillalamarri向InfoQ说明道:. 我们的部署很大一部分基于开源组件,所以我们认为:“假设我们不能将一些有价值的东西免费提供给开源项目贡献者,他们将一直受限于从Java虚拟机(JVM)视角所看到的内容”,他们将不会考虑额外的用例,或者选择其他能解决了所有内存或扩展性问题、类似Zing的系统.

Java开源建站工具

- Amom - 阮一峰的网络日志
美国程序员Jon Scott Stevens,公布了他的创业公司所使用的开发工具清单. 他的语言平台是Java,开发项目是一个网站(还未上线). 所用到的工具都是开源的,可以免费得到. 在目前的创业者之中,用Java作为网站开发语言的人似乎很少. 这当然不是没有原因的,Java看上去确实不像是最便捷的网站开发工具,给人的感觉是用起来麻烦又费事.

开源Python UI框架:Kivy

- xin - 秀码趣 - ShowMuch.com
Kivy是一个可用以快速创建新颖用户界面应用的开源Python库,比如可以用它来创建多点触摸的应用程序,它具备跨平台特性,目前发行有Windows、MacOS、Linux以及Android版本. 作为一个开源框架,Kivy具备以下特性:A.百分百免费使用;B.基于 LGPL3协议 开源,对商业化应用友好;C.跨平台,支持Windows、MacOS、Linux以及Android;D.允许在不同的平台上运行同一套代码;E.稳定以及有完善的API文档;F.通过OpenGL ES 2.0对硬件进行加速;G.自然支持大部分的输入协议或者输入设备;H.基于Python的简单API……等等.

Java开源建站工具

- Alex - 博客园新闻频道
  美国程序员Jon Scott Stevens,公布了他的创业公司所使用的开发工具清单.   他的语言平台是Java,开发项目是一个网站(还未上线). 所用到的工具都是开源的,可以免费得到.   在目前的创业者之中,用Java作为网站开发语言的人似乎很少. 这当然不是没有原因的,Java看上去确实不像是最便捷的网站开发工具,给人的感觉是用起来麻烦又费事.