History of Silk 02/00 SILK4.x A new release with an improved core Silk interpreter, a much nicer Java interface, and a compiler. 07/99 SILK3.x Ken Anderson's extension of SILK/JLIB2 to include generic functions. 10/98 SILK2.x Tim Hickey's extension of SILK to include an applet-building library JLIB. 04/98 SILK1.x Peter Norvig's original Scheme interpreter implemented in Java. 11/97 Jscheme Tim Hickey's interpreter for writing applets using a small subset of Scheme.Jschemeは,すべてのJavaコンストラクタ,メソッド,フィールドなどに単純なイ ンタフェースをもっています.ただし,Javaのクラスを新たに生成することは できません.インタプリタとして,アプレットまたはアプリケーションとして 走り,コンパイラは,File.silkをFile.javaへ変換します. SilkのインタプリタはPureJava1.1で記述されています. SilkのコンパイラはPure Silk 4で記述されています. Silkのプログラムは小さなJavaプログラムにコンパイルされます. Silkはappletに対するスクリプト言語として使うことができます. いくつかの便利なJavaツールがデモディレクトリにあり, PC/Linux上のNetscape 4.7+ または,MacのIE 4.*上で走るように なっています. Javaで書くと以下のようになるプログラムは,
/* Java example */ import java.awt.*; import java.awt.event.*; public class Demo { static public void main(String[] args) { final Frame win = new Frame("Hello"); Button b = new Button("Goodbye"); win.add(new Label("Hello"), BorderLayout.NORTH); Label p = new Label( "sin(PI) = "+ Math.sin(Math.PI)); win.add(b); win.add(p,BorderLayout.SOUTH); b.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e) { win.hide();}}); win.pack(); win.show(); System.out.println("Done");}}次のように記述する形になっています.
;; Silk example (import "java.awt.*") (import "java.awt.event.*") (define win (Frame. "Hello")) (define b (Button. "Goodbye")) (.add win (Label. "Hello") BorderLayout.NORTH$) (define p (Label. (string-append "sin(PI) = " (.toString (Math.sin Math.PI$))))) (.add win b) (.add win p BorderLayout.SOUTH$) (.addActionListener b (Listener. (lambda (e) (.hide win)))) (.pack win) (.show win) (.println System.out$ "Done")表示されるウィンドウは,
% printenv CLASSPATH .;/java/jdk1.4;/java/jdk1.4/lib;/java/jdk1.4/jre; /java/jdk1.4/src; /home/inaba/lecture/jscheme5/jscheme/lib/jscheme.jar % java jsint.Scheme Jscheme 5.0 (04/05/2002) > (exit) #t % cat HelloWorld.silk (let ((W (java.awt.Frame. "HelloWorld Demo")) (L (java.awt.Label. "H E L L O W O R L D !")) (F (java.awt.Font. "Helvetica" java.awt.Font.BOLD$ 24)) (BG (java.awt.Color. 0x0000ff)) (FG (java.awt.Color. 0xffccaa))) (.setFont L F) (.setBackground W BG) (.setForeground W FG) (.add W L) (.resize W 300 300) (.show W) ) % java jsint.Compile HelloWorld.silk % wc HelloWorld.java 496 1476 15357 HelloWorld.java % javac HelloWorld.java % java HelloWorldこうすると,中央にHello Worldと書かれた ウィンドウが現れます.