Ich bewerte Sprachen für eine rechnerorientierte App, die eine easy eingebettete Skriptsprache für Endbenutzer benötigt. Ich habe darüber nachgedacht, Scala als Hauptsprache und Jython für die Skriptschnittstelle zu verwenden. Ein Anreiz von Scala ist, dass ich Methoden wie :*
für die elementweise Multiplikation eines Matrixobjekts definieren und mit der Infix-Syntax a :* b
verwenden kann. Aber: * ist kein gültiger Methodenname in Python. Wie geht Jython damit um?Infix-Operatoren in Scala und Jython
Ich würde Scala als Skriptsprache aufgrund seiner Flexibilität verwenden. Aber selbst mit typischem Schluss sind die val
und var
und die erforderlichen Typdefinitionen für Laien, die an dynamische Sprachen wie Matlab gewöhnt sind, zu viel. Im Vergleich dazu hat Boo die Option -ducky
Option, die funktionieren könnte, aber ich möchte lieber auf der JVM als .NET bleiben. Ich nehme an, dass es für Scala keine -ducky
gibt.
Generell sollten Sie Folgendes beachten DSL (von http://www.cs.utah.edu/~hal/HBC/) eine Latent Dirichlet Allocation zu modellieren:
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)
Diese Syntax ist grandios (im Vergleich zu PyMCMC zum Beispiel) für Benutzer, die mit hierarchischer Bayes-Modellierung. Gibt es eine Sprache auf der JVM, die es leicht macht, eine solche Syntax zu definieren, sowie Zugang zu einer grundlegenden Skriptsprache wie Python?
Gedanken geschätzt.
Nachdem ich die Diskussion hier gelesen habe, habe ich meine Antwort dahingehend überarbeitet, dass ich deine eigene maßgeschneiderte DSL benutze und sie parsiere ... Basierend auf deiner Problemdomäne denke ich, dass es der beste Weg ist. –