JVM และ Java ของ WORA แตกต่างจากภาษาระดับสูงอื่น ๆ อย่างไร


12

ในโลกของ Java เรามักจะพูดถึง JVM และเมื่อ Java เป็นรุ่นใหม่มันมีคุณสมบัตินักฆ่าที่คาดว่าจะเป็นของ "Write Once, Run Anywhere"

จากวิธีที่ผู้คนพูดคุยและเขียนสิ่งนี้ดูเหมือนจะแตกต่างจากวิธีการทำงานของ Python แต่ฉันไม่ได้ตระหนักถึงวิธีการที่รหัส Python ที่ฉันเขียนจะทำงานแตกต่างกันในเครื่องอื่น (แม้ว่าฉันจะไม่ได้เขียน Python มาก)

แล้วฉันจะพลาดอะไรไป? JVM แตกต่างจาก Python interpreter อย่างไร? มีวิธีที่ Python ขาดความเป็นอิสระของแพลตฟอร์ม Java หรือไม่? หรือนี่เป็นเพียงความแตกต่างทางวัฒนธรรม?


1
ความแตกต่างหลักคือความเข้มงวดของข้อกำหนด JVM มันถูกนิยามไว้อย่างชัดเจนว่ามันจะต้องประพฤติอย่างไร

คำตอบ:


17

Java ทำงานได้ดีมากในการแยกคุณออกจากระบบปฏิบัติการพื้นฐานและให้เครื่องมือที่แน่นอนเหมือนกันกับแพลตฟอร์มส่วนใหญ่ที่ใช้งานได้เพื่อพูดคุยกับสิ่งต่าง ๆ ในระบบปฏิบัติการพื้นฐาน

Python ไม่ได้ทำงานที่ดีในการแยกคุณออกจากระบบปฏิบัติการพื้นฐานมันไม่มีวิธีมาตรฐานในการจัดการระหว่างการสื่อสารกระบวนการ (ดูที่ความแตกต่างในโมดูล sys และโมดูลระบบปฏิบัติการระหว่าง windows และ * ระวังการนำ Python ไปปฏิบัติเช่น)

ฉันได้เขียนโค้ดใน python ที่จะทำงานเฉพาะในกล่อง * NIX หรือกล่อง Windows โดยใช้เพียงการเรียก API ของ Python ที่มีใน Java มันจะยากมากที่จะเขียนโค้ดที่เป็นเพียง Java API ที่จะไม่ทำงานเหมือนกันทั้งบน กล่อง Windows หรือกล่อง * NIX


1
มันไม่ยากเลยที่จะเขียนโค้ด Java ที่ใช้งานได้กับ Windows เท่านั้น เพียงยากรหัสเส้นทางแฟ้ม Windows เช่น "C: \ MyApp \ ข้อมูล"
เควินไคลน์

@kevincline เส้นทาง Hardcoded เป็นการปฏิบัติที่ไม่ดีกับระบบปฏิบัติการใด ๆ แต่ Java ไม่ต้องการให้คุณทำเช่นนี้เพราะมันมีวิธีการที่ไม่ขึ้นกับ OS เพื่อดึงข้อมูลไดเรกทอรีทั่วไปเช่นไดเรกทอรีผู้ใช้หรือเส้นทางการติดตั้งของโปรแกรมปัจจุบัน
Philipp

3

ทั้งจากบนและใช้งานจริงภาษามีความแตกต่างเล็กน้อย โดยเฉพาะอย่างยิ่ง JVM ได้รับการออกแบบไม่เพียง แต่เป็นล่าม แต่ยังรวมถึงรันไทม์คอมไพเลอร์, การอนุมานรหัส, เลเยอร์เสมือนการจำลองด้วยเครื่องมือที่สามารถใช้ตะขอแบบไดนามิก, ซีแมนติก GC หลากหลายและความสามารถในการอธิบายการยศาสตร์เสมือน Python สามารถทำงานใน JVM ได้หรือไม่? Java สามารถทำงานใน Python interpreter ได้หรือไม่?

ล่ามส่วนใหญ่เป็นภาษาไทม์ / โทเค็นล่าม JVMs (และอื่น ๆ ) ตามที่คุณรู้ตีความ / รวบรวม / เรียกใช้รหัสกลาง ตัวอย่างเช่น IBM ได้ทำสิ่งนี้มานานหลายทศวรรษนอกเหนือจาก Java มันไม่มีอะไรใหม่ แม้แต่ VB ก็ใช้โค้ดระดับกลางในบางครั้งที่ฉันเชื่อ?

WORA ส่วนใหญ่เป็นPasséในขณะนี้เนื่องจากภาษาที่ตีความหลายภาษาทำงานได้ทุกที่ไม่เปลี่ยนแปลง


3

เมื่อ Java เป็นรุ่นใหม่ WORA เป็นสิ่งที่น่าสนใจโดยเฉพาะคุณสามารถคอมไพล์ในแพลตฟอร์มเดียวและรัน (คอมไพล์ด้วยรหัสไบต์) บนแพลตฟอร์มอื่น

แน่นอนว่าภาษาที่ตีความทำงานคล้ายกันมากโดยไม่คำนึงว่าแพลตฟอร์มใดที่ล่ามทำงานอยู่ (ตราบใดที่ล่ามพร้อมใช้งานสำหรับแพลตฟอร์มนั้น) อย่างไรก็ตามระบบไฟล์ปัญหาการอนุญาตการเข้ารหัสการสิ้นสุดบรรทัดและปัญหาอื่น ๆ ที่มีขนาดเล็ก แต่น่ารำคาญอาจทำให้เกิดอาการปวดหัวได้ บางสิ่งที่ขึ้นอยู่กับแพลตฟอร์มนั้นไม่ง่ายที่จะทำให้เป็นนามธรรม


WORA ในตัวมันเองไม่เพียงพอ บิตที่สำคัญจริงๆก็คือว่ามันถูกกำหนดไว้เป็นอย่างดีว่ามันจะทำงานได้ทุกที่ทำให้มันไม่สำคัญว่าที่มันถูกเรียกใช้
Thorbjørn Ravn Andersen

1

Python มี GUI แพลตฟอร์มที่เป็นอิสระหรือไม่?

อย่างไรก็ตามคุณลักษณะของ WORA เป็นอีกครั้งที่จะหลอกโปรแกรมเมอร์ C ให้มากกว่าเนื่องจาก C มีแนวโน้มที่จะสร้างแบบจำลองแพลตฟอร์มพื้นฐานอย่างใกล้ชิดและเนื่องจากแพลตฟอร์มมีความแตกต่างกัน (ขนาดของคำว่า

Java สัญญาว่าทุกความน่าเบื่อนี้ไม่จำเป็นต้องทำเพราะแพลตฟอร์มที่กำหนดไว้เป็นอย่างดีและคุณรู้ว่า char เป็น 16 บิตเป็นต้นนอกจากนี้ GUI ถูกเขียนใน Java และยังพกพาได้ 100% ซึ่งหมายความว่า โปรแกรมสามารถทำงานบนคอมพิวเตอร์ที่คุณไม่เคยได้ยินและทำงานได้อย่างถูกต้อง


6
Python มีตัวเลือก GUI อิสระหลายแพลตฟอร์ม: docs.python.org/faq/…
Joonas Pulakka

Java GUIs มีชื่อเสียงในการแสดงไม่ถูกต้องบนแพลตฟอร์มต่างๆดังนั้นฉันจึงไม่โอ้อวดในเรื่องนั้น อย่างไรก็ตามฉันจะเห็นด้วยกับคำสั่งที่เหลือของคุณ
โกรธ

-4

ยกเว้นว่า Java นั้นไม่ใช่ WORA อย่างชัดเจน ฉันเห็นซอฟต์แวร์ Java ที่แตกหลังจาก Java ได้รับการอัพเกรดเป็นรุ่นที่สูงกว่าในหมายเลขรุ่นรอง IMHO, WORA เป็นเพียงกลไกการตลาด


1
นี่ไม่ใช่คำตอบสำหรับคำถาม
Eric Wilson

-1 เนื่องจาก Java เป็น WORA สำหรับจุดประสงค์ในทางปฏิบัติทั้งหมด มันจะทำงานได้ถ้าคุณหลีกเลี่ยงการแฮ็กเฉพาะระบบและสิ่งต่าง ๆ ในท้องถิ่นอย่างชัดเจนเช่น JNI ฉันมีแอพพลิเคชั่นกว่า 50,000 รายการที่ทำงานได้อย่างสมบูรณ์บน Windows, Mac และ Linux ไม่มีการเปลี่ยนแปลงครั้งแรกด้วยไฟล์. jar ที่คอมไพล์เหมือนกัน หากคุณยึดมั่นกับจาวาบริสุทธิ์ทุกอย่างก็ใช้ได้
mikera

1
ดูเหมือนว่าคุณเข้าใจผิดว่า WORA หมายถึงอะไร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.