1 | import javax.script.*; |
---|
2 | |
---|
3 | public class JSR223Example { |
---|
4 | |
---|
5 | public static void main(String[] args) { |
---|
6 | //Script Engine instantiation using ServiceProvider - this will |
---|
7 | //look in the classpath for a file |
---|
8 | // /META-INF/services/javax.script.ScriptEngineFactory |
---|
9 | //where the AbclScriptEngineFactory is registered |
---|
10 | ScriptEngine lispEngine = new ScriptEngineManager().getEngineByExtension("lisp"); |
---|
11 | |
---|
12 | //Alternatively, you can directly instantiate the script engine: |
---|
13 | |
---|
14 | //ScriptEngineManager scriptManager = new ScriptEngineManager(); |
---|
15 | //scriptManager.registerEngineExtension("lisp", new AbclScriptEngineFactory()); |
---|
16 | //ScriptEngine lispEngine = scriptManager.getEngineByExtension("lisp"); |
---|
17 | |
---|
18 | //(thanks to Peter Tsenter for suggesting this) |
---|
19 | |
---|
20 | //Accessing variables |
---|
21 | System.out.println(); |
---|
22 | System.out.println("*package* = " + lispEngine.get("*package*")); |
---|
23 | Object someValue = new Object(); |
---|
24 | lispEngine.put("someVariable", someValue); |
---|
25 | System.out.println("someVariable = " + lispEngine.get("someVariable")); |
---|
26 | try { |
---|
27 | //Interpretation (also from streams) |
---|
28 | lispEngine.eval("(defun hello (arg) (print (list arg someVariable)) (terpri))"); |
---|
29 | |
---|
30 | //Direct function invocation |
---|
31 | ((Invocable) lispEngine).invokeFunction("hello", "world"); |
---|
32 | |
---|
33 | //Implementing a Java interface in Lisp |
---|
34 | lispEngine.eval("(defun compare-to (&rest args) 42)"); |
---|
35 | Comparable c = ((Invocable) lispEngine).getInterface(java.lang.Comparable.class); |
---|
36 | System.out.println("compareTo: " + c.compareTo(null)); |
---|
37 | |
---|
38 | //Compilation! |
---|
39 | lispEngine.eval("(defmacro slow-compiling-macro (arg) (dotimes (i 1000000) (incf i)) `(print ,arg))"); |
---|
40 | |
---|
41 | long millis = System.currentTimeMillis(); |
---|
42 | lispEngine.eval("(slow-compiling-macro 42)"); |
---|
43 | millis = System.currentTimeMillis() - millis; |
---|
44 | System.out.println("interpretation took " + millis); |
---|
45 | |
---|
46 | millis = System.currentTimeMillis(); |
---|
47 | CompiledScript cs = ((Compilable) lispEngine).compile("(slow-compiling-macro 42)"); |
---|
48 | millis = System.currentTimeMillis() - millis; |
---|
49 | System.out.println("compilation took " + millis); |
---|
50 | |
---|
51 | millis = System.currentTimeMillis(); |
---|
52 | cs.eval(); |
---|
53 | millis = System.currentTimeMillis() - millis; |
---|
54 | System.out.println("evaluation took " + millis); |
---|
55 | |
---|
56 | millis = System.currentTimeMillis(); |
---|
57 | cs.eval(); |
---|
58 | millis = System.currentTimeMillis() - millis; |
---|
59 | System.out.println("evaluation took " + millis); |
---|
60 | |
---|
61 | //Ecc. ecc. |
---|
62 | } catch (NoSuchMethodException e) { |
---|
63 | e.printStackTrace(); |
---|
64 | } catch (ScriptException e) { |
---|
65 | e.printStackTrace(); |
---|
66 | } |
---|
67 | } |
---|
68 | |
---|
69 | } |
---|