"julius sirait" <[EMAIL PROTECTED]> writes:

> 1. python bisa jalan di virtual machine ruby?

maksudnya YARV? belum ada python implementation targetting YARV bytecode.


> 2. ruby jalan di virtual machine python?

belum ada ruby implementation targetting python VM bytecode.


> virtual machine ruby yang default "kalau gak salah", traverse
> abstract syntax tree. 

Maaf, de-tour sedikit dulu untuk comment kalimat di atas.

Dalam context email ini, arti "virtual machine" ada dua:
1. Application Virtual Machine
2. Execution Environment (bagaimana terjemahkan ini?)

Definisi #1 adalah definisi yang lebih sering dipakai dan dijelaskan
di "Virtual Machine" entry di Wikipedia dan yang saya pakai untuk
mengerti pertanyaan nomer satu anda. 

Definisi #2 dipakai oleh kalangan formal language analysis, dan tidak
populer di luar kalangan tersebut. Penjelasan singkat execution
environment: semua bahasa mempunyai spesifikasi. Ada yang specnya
formal: C, Common Lisp, Scheme, Java; ada yang specnya di-define
sebagai: apa saja yang official implementation does, seperti: ruby,
perl.

Spec ini merinci hukum2x di dunia di mana code2x akan
dijalankan. Contoh: di dunia ruby, ada hukum yang bilang bahwa value
yang di bind ke sebuah instance variable tidak akan berubah sampai
bindingnya explicitly dirubah atau instancenya sudah tidak bisa
diakses lagi (bisa di garbage collect). Atau kalau method call tanpa
explicit receiver, bagaimana cara derive receivernya? Atau kalau
method call dengan banyak argument, apakah ada order di mana
argument2x itu di-evaluate?

Execution environment menerapkan hukum2x di spec selagi menjalankan
code. Jadinya codeya bisa buat berbagai macam asumsi seperti tidak
mesti bolak2x bind the same value to the an instance variable karena
takut akan berobah tiba2x tanpa alasan jelas. Analoginya, kita di
dunia nyata bisa bergantung pada hukum2x alam seperti buah apel di
bumi selalu jatuh ke bawah. Hukum2x seperti ini, biarpun trivial
sekali, itu penting dan kita mungkin tidak bisa berfungsi kalau hukum
alam berubah2x terus menerus.

Seperti term "hacker" ada dua definisi: 1. orang yang tukang jebolin
computer, 2. orang yang jago sekali di komputer. Definisi #1 yang
lebih sering dipakai, dan semakin dikit orang yang tahu definisi #2.

Biarpun definisi #2 jarang dipakai, saya bawa2x dia bukan karena mau
bikin komplex pertanyaan Julius, tapi karena saya tidak jelas apa yang
julius maksud dengan "virtual machine ruby".

Di dalam sense definisi #1, tidak ada "virtual machine ruby yang
default". Paling dekat adalah YARV. Tapi di kalimat berikutnya:

> baru di yarv yang interpret bytecode yah? 

menunjukan bahwa YARV bukan yang dimaksud dengan "virtual machine ruby
yang default".

Jadinya definisi #2 kah yang dimaksud? Tapi interpreter, bukan
execution environment, yang traverse syntax tree. Execution
environment itu hal abstract. Interpreter sebuah bahasa implements
execution environment buat bahasa itu.



> baru di yarv yang interpret bytecode yah? 

YARV implementasi dari ruby virtual machine (def #2) dengan teknik
virtual machine (def #1).

Singkatnya, ya, YARV interprets byttecode.



> Jadi kalau mau jalan kan python di virtual machine ruby default,
> kudu terjemahkan ke abstract syntax tree nya ruby.

Kalau maksudnya mau jalankan python di ruby1.8, harus bikin python
compiler yang targetnya ruby code. Di ruby1.8, kamu gak bisa
modifikasi AST secara langsung.

> bisa di check site ini: http://www.parrotcode.org/faq/
>
> kalau inline beda lagi pertanyaannya.
> python dan ruby dicampur2, trus jalan di virtual machine mana?

Gak ngerti. Tentunya di parrot virtual machine, bukan?

> tapi yang lebih menarik itu, pertanyaannya: kenapa pake jruby? apakah
> karna performance? atau apa?

Karena Java library. Pilihan scheme favourite saya adalah SISC karena
dia diimplement dengan java jadinya saya bisa ada akses ke library
java yang begitu variasi.

JRuby juga menggunakan JVM threading yang kemungkinan besar memakai
native threading di OS anda. Jadinya bisa take advantage of multiple
CPUs.


YS.

Kirim email ke