这本来是一个为工科教学专门开发的附属品,并不是说Python或Java有多不好,根本上它就是一个Java工程教材,但又要结合人工智能。因此,出现了这样一个包容性的怪胎,可以用python一样的语法与Java一起编写。
没流行起来的一个致命原因,它是基于Eclipse开发的一套DSL语言,胎生于xText技术,我甚至还开发了VsCode插件。Xtext - Language Engineering Made Easy!
python
var a = np.arange(24).reshape(2,3,4)
let a1 = a.shape[0]
println("维度:"+a1)
var c = new int[]{1,2}
println("数组:"+c[0])
var b = a[:-1,2]
b[0] = 9
b.dump
使用jpy语言,可让你像Python一样对数组进行各种维度的切割,还支持对一纬和多维数组的矩阵运算,用起来简直和Python的Numpy一样。
自夸一下,Java版本的Numpy也是我实现的,结合jpy语言用起来还是挺爽的!毕竟我们很多人是来搬砖的,现在给你一辆货车把Python代码都搬过来,生活不要太惬意!
python
var a= np.arange(12).reshape(3,4)
var b= a[2:][1]
开发的历程还是挺艰难的,我要和欧洲的大神们在论坛交流。国内熟悉XText技术的程序员很少,官网的Demo也实在是太简单,是我研究了很久才扩展实现了jpy的一整套语法,其中的实现逻辑也是躺了不少坑的,后面会详细解释:
python
JpySingleStatement returns XExpression:
XSwitchExpression |
XIfExpression |
XForLoopExpression |
XBasicForLoopExpression |
XWhileExpression |
XTryCatchFinallyExpression |
XSynchronizedExpression |
JpyBranchingStatement |
XExpressionOrVarDeclaration |
XDoWhileExpression |
XReturnExpression |
XThrowExpression |
XSynchronizedExpression |
JpyWithOpenAs
;
JpyBranchingStatement returns XExpression:
{JpyContinueStatement} "continue" |
{JpyBreakStatement} "break"
;
@Override
IdOrSuper :
FeatureCallID | 'super' | 'open'
;
尽管自我感觉很厉害的样子,但至今无人问津少有关注,我也两年没更新维护。说句实在的,Eclipse为什么养一帮人搞xText技术啊,根本是没人用的东西! 毕竟很多人也不是研究编译语言的,甚至开发DSL也鲜有人想到使用Eclipse吧。
先写到这,稍后我再分享实现的jpy语言的技术细节。