Wednesday, August 04, 2004

Multi-Tasking Virtual Machine

ตอนบ่ายนั่งอ่าน Scaling J2EE Application Servers with the Multi-Tasking Virtual Machine

ลอกมาสั้นๆได้ว่า "MVM is a general-purpose virtual machine for executing multiple Java applications. Applications executing in MVM are referred to as isolates."

ดีเหมือนกันจะได้ไม่ต้องเรียก JVM หนึ่งตัว ต่อ Application หนึ่งตัวเหมือนตอนนี้ อีกหน่อย OS เป็นอะไรก็ไม่สนแล้ว Application ทั้งหลายทำงานอยู่บน VM หมด

จะเรียกว่า OS เก่งขึ้นจนมี VM ให้ใช้ (แบบ .Net) หรือ VM มันเก่งขึ้นจนให้บริการพื้นฐานที่จำเป็นสำหรับ App ทั่วไปได้ โดย App ไม่ต้องพึ่ง OS โดยตรง (แบบ Java) ก็คงเหมือนๆกัน

ที่แน่ๆ Java/.Net กำลังฮิต อีกหน่อยโปรแกรมที่ทำงานบน VM คงมีมากขึ้นเรื่อยๆ โปรแกรมที่คอมไพล์เป็น Native คงลดลง ?

โปรแกรมทำงานช้าลงแต่คนเขียนโปรแกรมสบายขึ้น คงไม่เป็นไรเพราะ CPU ตอนนี้ยังเร็วเกินพอ ?

ชอบ .Net ตรงที่เขียนด้วยภาษาอะไรก็ได้ เขาชอบยกตัวอย่างว่า "เขียน class ด้วย C++ แล้ว subclass อีกทีด้วย VB.Net แล้วเอา class นั้นไปใช้ในโปรแกรม Perl" โปรแกรมเมอร์ถนัดภาษาอะไรก็ใช้ภาษานั้น ไม่ต้องมานั่งเรียนใหม่อีก

ชอบ Java ที่ทำงานบน CPU/OS อะไรก็ได้ แต่เดี๋ยวนี้ .Net ก็เริ่มมี Mono มาช่วยตรงนี้

เพิ่มเติม

เคยเห็น PDA ของ Kyocera (PocketCosmo) ใช้ Intent platform ของ Tao Group ซึ่งดูเหมือนจะเป็น VM อย่างหนึ่งเหมือนกันเพื่อรันโปรแกรม Java โดยใช้ intent JTE

เคยซื้อหนังสือ MSX Magazine มีแถมโปรแกรม MSXPlayer ซึ่งเป็น Emulator ของคอมพิวเตอร์ MSX โปรแกรมนี้พัฒนาให้ทำงานบน Intent มี Binary ให้เล่นได้ทั้งบน Windows และ PocketPC

3 comments:

bact' said...

บน JVM ก็ใช้ภาษาอะไรก็ได้เหมือนกันนะครับ

Java, Python, Prolog, Beanshell... ตอนนี้มีใหม่อีกตัว Groovy

Programming Languages for the Java VM
http://flp.cs.tu-berlin.de/~tolk/vmlanguages.html

แต่ทั้งภาษาโปรแกรมบน JVM/.Net Runtime ถึงจะบอกว่า ใช้ 'ภาษาอะไรก็ได้'
แต่คนเขียนก็ต้องปรับตัวนิดหน่อยเหมือนกัน เพราะว่าชนิดของตัวแปรจะไม่เหมือนกับที่เคยเขียนซะทีเดียว
จะต้องอิงชนิดตัวแปรตามมาตรฐานของ VM (เพื่อให้แชร์ข้อมูลกันได้ โดยเฉพาะ class)

Hui/ฮุ้ย said...

ขอบคุณครับสำหรับ Link ไปดูมาแล้ว ส่วนมากเป็น Interpreter ของภาษานั้นที่เขียนด้วย Java

ส่วนน้อยที่เป็นภาษาซึ่งคอมไพล์เป็น Bytecode ของ JVM ได้เลย (ดูในรายการน่าจะมีไม่ถึง 10%) ภาษาเหล่านี้จะทำงานร่วมกันได้ดีเหมือนบน .Net หรือเปล่า เช่น ตัวอย่าง เขียน class A ด้วยภาษาหนึ่ง แต่ไป subclass เป็น Aa ด้วยอีกภาษาหนึ่ง แล้วเอาไปใช้ในอีกภาษาหนึ่ง

เพราะแต่ละภาษาในรายการอาจจะไม่ OO หรือมีรายการชนิดตัวแปร ฯลฯ ไม่เหมือนกัน

บน .Net เขาก็ต้องแก้เยอะเหมือนกัน อย่าง VB ก็ต้องแก้เป็น "VB. Net", C++ ก็ต้องแก้หน่อยเป็น "Managed C++" (MC++) ถึงจะทำงานร่วมกับ .Net แท้ๆอย่าง C# ได้

VB.Net กับ C# จะทำได้เหมือนกันแทบทุกอย่าง ยกเว้นที่ C# มีแต่ VB.Net ทำไม่ได้ ก็ได้แก่ unsafe code (ใช้ Pointer) หรือ operator overload, ...

id said...

I'm expecting register base vm, eg. parrot.
Since stack base vm like JVM and .NET doesn't suite
language like Perl and such and such a dynamic
binding language. They do run theoritically slower.