我正在评估面向计算的应用程序的语言,该应用程序需要一种面向最终用户的简单嵌入式脚本语言。我一直在考虑使用 Scala 作为主要的底层语言,使用 Jython 作为脚本接口。Scala 的一个吸引力在于我可以定义诸如:*
矩阵对象的元素乘法之类的方法,并将其与中缀语法一起使用a :* b
。但是 :* 在 Python 中不是有效的方法名称。Jython 如何处理这个问题?
由于它的灵活性,我会考虑使用 Scala 作为脚本语言。但即使使用类型推断,所有和必需的val
类型var
定义对于习惯于像 matlab 这样的动态语言的外行用户来说还是太多了。相比之下,Boo 的 option-ducky
选项可能会起作用,但我想留在 JVM 而不是 .NET 上。我认为 Scala 没有-ducky
。
更一般地,考虑以下 DSL(来自http://www.cs.utah.edu/~hal/HBC/)来模拟潜在狄利克雷分配:
model {
alpha ~ Gam(0.1,1)
eta ~ Gam(0.1,1)
beta_{k} ~ DirSym(eta, V) , k \in [1,K]
theta_{d} ~ DirSym(alpha, K) , d \in [1,D]
z_{d,n} ~ Mult(theta_{d}) , d \in [1,D] , n \in [1,N_{d}]
w_{d,n} ~ Mult(beta_{z_{d,n}}) , d \in [1,D] , n \in [1,N_{d}]
}
result = model.simulate(1000)
对于熟悉分层贝叶斯建模的用户来说,这种语法非常棒(例如与 PyMCMC 相比)。JVM 上是否有任何语言可以很容易地定义这样的语法,并且可以访问像 python 这样的基本脚本语言?
想法赞赏。