Saturday, April 17, 2010

Error di scalashell - Scala Interactive Shell versi 0.1 di Scala 2.7.7

scalashell adalah proyek software bebas untuk membuat shell scala yang lebih interaktif dan mengandung syntax highlighting. Instalasi dapat dilakukan dengan mudah menggunakan Scala Bazaar. Secara total, paket yang diperlukan adalah scalashell-scala, scalashell-library, dan jline (untuk completion dan interaktivitas di scalashell -- seperti halnya GNU Readline).

[bpdp@bpdp-arch lib]$ sbaz install jline
planning to install: jline/0.9.91
Installing...
[bpdp@bpdp-arch ~]$ sbaz install scalashell-scala
planning to install: scalashell-library/0.1
planning to install: scalashell-scala/0.1
Installing...
[bpdp@bpdp-arch ~]$

Setelah selesai, scalash harus dibuat executable dengan perintah berikut (asumsi: scala terinstall di ~/software/scala-2.7.7/):

[bpdp@bpdp-arch ~]$ chmod +x software/scala-2.7.7.final/bin/scalash 

Pada awalnya, jika dijalankan akan muncul error berikut ini:

[bpdp@bpdp-arch ~]$ scalash 
Scala Shell version 0.1  ($(java.vm.name), Java 1.6.0_18)

scala:0> Exception in thread "main" java.lang.ClassNotFoundException: binder0
    at scala.tools.nsc.interpreter.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:27)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at scala.tools.nsc.Interpreter.bind(Interpreter.scala:543)
    at org.scalashell.scalash.ScalaShell$$anonfun$bindSettings$1.apply(ScalaShell.scala:64)
    at org.scalashell.scalash.ScalaShell$$anonfun$bindSettings$1.apply(ScalaShell.scala:61)
    at scala.tools.nsc.Interpreter.beQuietDuring(Interpreter.scala:110)
    at org.scalashell.scalash.ScalaShell.bindSettings(ScalaShell.scala:61)
    at org.scalashell.scalash.ScalaShell.repl(ScalaShell.scala:106)
    at org.scalashell.scalash.ScalaShell.run(ScalaShell.scala:183)
    at org.scalashell.scalash.Main$.main(Main.scala:54)
    at org.scalashell.scalash.Main.main(Main.scala)

[bpdp@bpdp-arch ~]$ 

Workaround untuk error tersebut adalah dengan menjalankan scalash di direktori $SCALA_HOME/lib. Berikut adalah snapshotnya:

[bpdp@bpdp-arch lib]$ pwd
/home/bpdp/software/scala-2.7.7.final/lib
[bpdp@bpdp-arch lib]$ scalash 
Scala Shell version 0.1  ($(java.vm.name), Java 1.6.0_18)

scala:0> :help 

Available commands:

:help - Display the list of commands or the help text for command
:history - Display, manage and recall edit-line history
:load - Load and interpret one or more files

For help on a specific command type:
    help command

scala:1>
[bpdp@bpdp-arch lib]$ ls -la
total 11684
drwxr-xr-x  3 bpdp users    4096 Apr 17 21:26 .
drwxr-xr-x 10 bpdp users    4096 Apr 17 21:08 ..
-rw-r--r--  1 bpdp users    1566 Apr 17 21:26 RequestResult$line0$object$.class
-rw-r--r--  1 bpdp users     669 Apr 17 21:26 RequestResult$line0$object.class
-rw-r--r--  1 bpdp users     984 Apr 17 21:26 binder0$.class
-rw-r--r--  1 bpdp users     845 Apr 17 21:26 binder0.class
-rw-r--r--  1 bpdp users   61187 Apr 17 21:22 jline.jar
-rw-r--r--  1 bpdp users     741 Apr 17 21:26 line0$object$$iw$$iw$.class
-rw-r--r--  1 bpdp users     510 Apr 17 21:26 line0$object$$iw$.class
-rw-r--r--  1 bpdp users     502 Apr 17 21:26 line0$object$.class
-rw-r--r--  1 bpdp users     632 Apr 17 21:26 line0$object.class
-rw-r--r--  1 bpdp users   27333 Oct 28 20:19 sbaz-tests.jar
-rw-r--r--  1 bpdp users  416030 Oct 28 20:19 sbaz.jar
drwxr-xr-x  3 bpdp users    4096 Apr 17 17:54 scala
-rw-r--r--  1 bpdp users 6359523 Oct 28 20:19 scala-compiler.jar
-rw-r--r--  1 bpdp users  269699 Oct 28 20:19 scala-dbc.jar
-rw-r--r--  1 bpdp users 3789991 Oct 28 20:19 scala-library.jar
-rw-r--r--  1 bpdp users  224578 Feb 26 22:26 scala-partest.jar
-rw-r--r--  1 bpdp users  623359 Oct 28 20:19 scala-swing.jar
-rw-r--r--  1 bpdp users   57833 Apr 17 21:07 scalashell-library-0.1.jar
-rw-r--r--  1 bpdp users   30564 Apr 17 21:07 scalashell-scala-0.1.jar
[bpdp@bpdp-arch lib]$ 

Kelihatannya scalashell memerlukan beberapa file .jar dari Scala sekaligus membuat beberapa class (temporary?) seperti di atas (lihat beberapa file .class) yang muncul setelah dijalankan di direktori lib ini.

Dari apa yang telah saya kerjakan, scalash ini lebih nyaman digunakan daripada REPL scala bawaan dari distribusi Scala. Selamat mencoba!

0 comments:

Post a Comment