仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2130|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA网站制作之XJ: 一个扩大Java言语的计划仓酷云

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:35:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。Java向来是一种以稳定应万变的言语。在Java5中,annotation的引进使得Java在某些特别的使用场所(如企业使用)中可以举行定制。Annotations可被看做是用Java中心手艺来界说的"范畴特定言语"(DomainSpecificLanguages,DSLs)。

Annotation实质上是一种name-value情势的绑定,仅限于它们所能表达的意义。它们不克不及界说新的语法布局,比方为collection增添个"select"。现实上annotations的存在展现了Java自己必要DSL的兼容,可是却缺少可以完整完成DSL所需要的丰厚性。

在这里我们为使Java可以撑持自界说语义给出了一些倡议和计划。假如可以举行一些得当的"扩大"(extension),在不与现有的语法抵触的情形下而且保存向后兼容。比方:用一些语法界说类来发生新的语法布局,临时称之为"语义类",如许就可以够以现无方式在程序中得以完成。我们把这个计划称之:XJ(eXtensibleJava,可扩大Java)

XJ给Java带来了这个所谓的"语义类"。一个语义类也是一个有一般语法的的Java类,当Java剖析器碰到由语义类界说的语法布局,那末就用语义类中界说的语法来处置这些输出信息。假如剖析乐成,那这些语法能够分解为一个Java笼统语法树(AST:abstractsyntaxtree)。一个笼统语法树能够有一个尺度接口被Java编译器所利用当处置语法的时分。AST的新范例能够经由过程完成符合的接口来举行创立。

思索到JAVA中的一个复杂言语布局:根据某些前提从一个collection当选一个元素出来。一个利用新布局的例子以下所示:

Java代码

<br>

  • importlanguagemylang.Select;
  • publicPersongetChild(Vector<Person>people){
  • @SelectPersonpfrompeoplewherep.age<18{
  • returnp;
  • }
  • else{returnnull;}
  • }
  1. importlanguagemylang.Select;publicPersongetChild(Vector<Person>people){@SelectPersonpfrompeoplewherep.age<18{returnp;}else{returnnull;}}
复制代码

这个新的语法接口能够叫做"Select",用"@"标记界说在语法类饮用的的前缀。界说了一个Vector从当选出前提为年事小于18岁的人群。最初前往满意前提的值,大概前往空值。Select的语法界说以下。

Java代码

<br>

  • publicPersongetChild(Vector<Person>people){
  • for(inti=0;i<people.size();i++){
  • Personp=people.elementAt(i);
  • if(p.age<18)
  • returnp;
  • }
  • returnnull;
  • }
  1. publicPersongetChild(Vector<Person>people){for(inti=0;i<people.size();i++){Personp=people.elementAt(i);if(p.age<18)returnp;}returnnull;}
复制代码

同理,经由过程XJ,一个新的语法接口经由过程界说语义类来界说。一个语义类包含语法由Java剖析器来处置详细的程序语法而且前往一个AST。一旦一个语义类被界说,它就可以经由过程在语义界说标记"@"后界说从而在程序代码中被利用。select的布局界说以下:

Java代码

<br>

  • packagemylang;
  • importlanguagejava.syntax.Grammar;
  • importjava.syntax.AST;
  • importjava.syntax.Block;
  • importjava.syntax.Context;
  • importjava.syntax.Statement;
  • importjava.syntax.Sugar;
  • importjava.syntax.Type;
  • importjava.syntax.Var;
  • publicclassSelectextendsSugar{
  • privateTypetype;
  • privateVarvar;
  • privateASTcollection;
  • privateASTtest;
  • privateBlockbody;
  • privateBlockotherwise;
  • publicSelect(TypeT,Stringn,ASTc,ASTt,Blockb,Blocko){
  • type=T;
  • var=newVar(n);
  • collection=c;
  • test=t;
  • body=b;
  • otherwise=o;
  • }
  • //SelectGrammardefinition
  • @GrammarextendsStatement{
  • Select::=
  • T=Type
  • n=Name
  • "from"c=Exp
  • "when"t=Exp
  • b=Block
  • o=("else"Block|{returnnewBlock();})
  • {returnnewSelect(T,n,c,t,b,o);}.}
  • //Desugartoproduceanabstractsyntaxtree
  • publicASTdesugar(Contextcontext){
  • Class<T>cType=context.getType(collection);
  • if(isVector(cType))
  • returndesugarVector(cType,contect);
  • else//Morecases...
  • }

  • publicASTdesugarVector(Class<T>cType,Contextcontext){
  • Vardone=context.newVar();
  • Varcoll=context.newVar();
  • return
  • [|boolean<done>=false;
  • <cType>coll=<collection>;
  • for(inti=0;i<<coll>.size();i++){
  • <underlyingType(cType)><var>=<coll>.elementAt(i);
  • if(<test>){
  • <done>=true;
  • <body>;
  • }
  • }
  • if(!<done>)
  • <otherwise>;
  • |];
  • }
  • }
  1. packagemylang;importlanguagejava.syntax.Grammar;importjava.syntax.AST;importjava.syntax.Block;importjava.syntax.Context;importjava.syntax.Statement;importjava.syntax.Sugar;importjava.syntax.Type;importjava.syntax.Var;publicclassSelectextendsSugar{privateTypetype;privateVarvar;privateASTcollection;privateASTtest;privateBlockbody;privateBlockotherwise;publicSelect(TypeT,Stringn,ASTc,ASTt,Blockb,Blocko){type=T;var=newVar(n);collection=c;test=t;body=b;otherwise=o;}//SelectGrammardefinition@GrammarextendsStatement{Select::=T=Typen=Name"from"c=Exp"when"t=Expb=Blocko=("else"Block|{returnnewBlock();}){returnnewSelect(T,n,c,t,b,o);}.}//DesugartoproduceanabstractsyntaxtreepublicASTdesugar(Contextcontext){Class<T>cType=context.getType(collection);if(isVector(cType))returndesugarVector(cType,contect);else//Morecases...}publicASTdesugarVector(Class<T>cType,Contextcontext){Vardone=context.newVar();Varcoll=context.newVar();return[|boolean<done>=false;<cType>coll=<collection>;for(inti=0;i<<coll>.size();i++){<underlyingType(cType)><var>=<coll>.elementAt(i);if(<test>){<done>=true;<body>;}}if(!<done>)<otherwise>;|];}}
复制代码

从Select的语律例则界说能够看到一个优秀格局的语句是经由过程一个称号,关头字"from"及其表达式,关头字"when"及其表达式,和界说select块的注释。在注释后,还能够界说if-else之类的可选关头字。在select划定规矩中的每一个case中,剖析元素发生一个能够和称号可选联系关系的值。比方,和称号为"T"相干联的范例。别的,剖析划定规矩也包括前往值的Java语句。这些包括在{and}中,并且能够援用任安在前面界说的称号。由Selectrule前往终极了局是Select类的一个实例。

由语法所决意的前往值必需是java.syntax.AST类的一个实例。假如前往值是尺度JavaAST类的实例,那在语法类中不必要做特别处置。假如前往值是自界说语法类的实例,那末这个类必需完成AST接口,出处编译器翻译成JavaVM辨认的代码。更复杂易行的举措是用户自界说语义类从java.syntax.Sugar承继,而java.syntax.Sugar经由过程desugar办法完成了AST接口。desugar办法卖力把输出的信息注释为接口中已界说的AST(笼统语法树),

在这篇漫笔中我们先容了Java的扩大(XJ),次要是经由过程界说新的Java语法来对Java言语自己举行扩大。固然XJ还没有在Java中完成,可是它是XMF言语的次要特性。XMF言语已在贸易工具(XMF-Mosaic)中被利用并在2008年开源。关于本文更多的细节和例子能够参照这篇文章:超出Annotations:可扩大Java言语的企图。来自:http://www.javaeye.com/news/1924

有了这样一个呼声:让java代替C语言成为基本语言。这些足以说明java简单易学的这个优点。其次,java的功能强大,前面我也提到了,EJB3.0的推出使java成为了大型项目的首选。
乐观 该用户已被删除
推荐
发表于 2015-4-9 10:34:43 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
回复 支持 0 反对 1

使用道具 举报

再见西城 该用户已被删除
板凳
发表于 2015-1-21 10:39:40 来自手机 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
地板
发表于 2015-1-30 15:31:27 来自手机 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
透明 该用户已被删除
5#
发表于 2015-2-6 13:48:34 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
冷月葬花魂 该用户已被删除
6#
发表于 2015-2-8 06:24:25 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
深爱那片海 该用户已被删除
7#
发表于 2015-2-9 00:30:22 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
小魔女 该用户已被删除
8#
发表于 2015-2-13 11:44:01 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
爱飞 该用户已被删除
9#
发表于 2015-2-24 15:20:42 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
山那边是海 该用户已被删除
10#
发表于 2015-3-7 12:31:08 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
因胸联盟 该用户已被删除
11#
发表于 2015-3-15 05:09:28 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
分手快乐 该用户已被删除
12#
发表于 2015-3-17 06:09:39 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
老尸 该用户已被删除
13#
发表于 2015-3-28 12:46:25 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
若相依 该用户已被删除
14#
发表于 2015-3-29 02:28:09 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
我是中文名字 该用户已被删除
15#
发表于 2015-4-9 10:36:38 | 只看该作者
来瞧瞧来瞧瞧来瞧瞧
愤怒的大鸟 该用户已被删除
16#
发表于 2015-4-15 03:49:11 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
蒙在股里 该用户已被删除
17#
发表于 2015-4-15 22:19:21 | 只看该作者
是一种为 Internet发展的计算机语言
再现理想 该用户已被删除
18#
发表于 2015-4-28 06:12:10 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
谁可相欹 该用户已被删除
19#
发表于 2015-5-1 03:21:12 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
只想知道 该用户已被删除
20#
发表于 2015-5-1 16:53:00 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-28 05:12

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表