คำถามติดแท็ก virtual-machine

เครื่องเสมือนเป็นเลเยอร์การจำลองระหว่างโปรแกรมและระบบปฏิบัติการที่แสดงให้แอปพลิเคชันมีสภาพแวดล้อมพิเศษในการทำงานมากกว่าสภาพแวดล้อมดิบที่ระบบปฏิบัติการจัดเตรียมไว้ให้

6
เหตุใดจึงไม่มีภาษาโปรแกรมอื่นที่คอมไพล์ไปยัง Python bytecode
ใน Java มีหลายภาษาที่คอมไพล์ไปยัง Java bytecode และสามารถรันบน JVM - Clojure, Groovy และ Scala เป็นภาษาหลักที่ฉันจำได้จากส่วนบนของหัว อย่างไรก็ตาม Python จะเปลี่ยนเป็น bytecode (ไฟล์. pyc) ก่อนที่จะถูกเรียกใช้โดย Python interpreter ฉันอาจจะงมงาย แต่ทำไมไม่มีภาษาการเขียนโปรแกรมอื่นใดที่คอมไพล์ไปยัง python bytecode? มันเป็นเพียงเพราะไม่มีใครใส่ใจหรือมีข้อ จำกัด หรือสิ่งกีดขวางบางอย่างที่ทำให้ยากลำบาก?

25
ความคิดเกี่ยวกับการพัฒนาโดยใช้เครื่องเสมือน [ปิด]
ฉันจะทำงานเป็นผู้นำการพัฒนาสำหรับการเริ่มต้นและฉันแนะนำให้เราใช้ VMs เพื่อการพัฒนา ฉันไม่ได้พูดถึงนักพัฒนาแต่ละคนที่มีเดสก์ท็อปที่มี VM สำหรับการทดสอบ / การพัฒนาฉันหมายถึงการมีชั้นวางเซิร์ฟเวอร์ที่ VMs ทั้งหมดได้รับการจัดการและให้นักพัฒนาทำงานจาก microPC (ChromeOS ทุกคนหรือไม่) คอมพิวเตอร์. สำหรับฉันแล้วประโยชน์คือความจริงที่ว่ามันสามารถปรับขนาดได้มากราคาถูกในระยะยาวจัดการได้ง่ายขึ้นและเราใช้ประโยชน์จากฮาร์ดแวร์ให้ได้ศักยภาพสูงสุด สำหรับข้อด้อยฉันไม่สามารถนึกถึงผู้ทำสต็อกที่เฉพาะเจาะจงนอกเหนือจากที่เราต้องการใครสักคนที่จะติดตั้ง / ดูแลการตั้งค่าดังกล่าว ฉันหวังว่าคุณบางคนอาจมีการตั้งค่าที่คล้ายกันในสถานที่ทำงานของคุณและสามารถชั่งน้ำหนักกับความคิดเห็นของคุณ ขอบคุณ

3
ระบบประเภทคืออะไร?
พื้นหลัง ฉันกำลังออกแบบภาษาเป็นโปรเจคต์ด้านข้าง ฉันมีแอสเซมเบลอร์ทำงานตัววิเคราะห์แบบคงที่และเครื่องเสมือนสำหรับมัน เนื่องจากฉันสามารถรวบรวมและเรียกใช้โปรแกรมที่ไม่น่าสนใจโดยใช้โครงสร้างพื้นฐานที่ฉันได้สร้างขึ้นฉันจึงคิดที่จะนำเสนอที่มหาวิทยาลัยของฉัน ในระหว่างการพูดคุยของฉันฉันบอกว่า VM ให้ระบบประเภทถูกถามว่า " ระบบประเภทของคุณคืออะไร " หลังจากตอบฉันได้รับเสียงหัวเราะจากผู้ที่ถามคำถาม ดังนั้นแม้ว่าฉันเกือบจะเสียชื่อเสียงในการถามคำถามนี้ แต่ฉันกลับไปที่โปรแกรมเมอร์ ความเข้าใจของฉัน ตามที่ฉันเข้าใจแล้วระบบประเภทถูกใช้เพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับเอนทิตีในโปรแกรมเพื่อให้รันไทม์หรือคอมไพเลอร์หรือเครื่องจักรอื่น ๆ รู้ว่าต้องทำอย่างไรกับสตริงของบิตที่ทำงาน พวกเขายังช่วยรักษาสัญญา - คอมไพเลอร์ (หรือตัววิเคราะห์โค้ดหรือรันไทม์หรือโปรแกรมอื่น ๆ ) สามารถตรวจสอบว่า ณ จุดใดก็ตามที่โปรแกรมทำงานกับค่าโปรแกรมเมอร์ที่คาดหวังว่ามันจะทำงาน ประเภทยังสามารถใช้เพื่อให้ข้อมูลกับโปรแกรมเมอร์มนุษย์เหล่านั้น ตัวอย่างเช่นฉันพบประกาศนี้: function sqrt(double n) -> double; มีประโยชน์มากกว่านี้ sqrt(n) ก่อนหน้านี้ให้ข้อมูลมากมาย: sqrtตัวระบุเป็นฟังก์ชั่นรับdoubleอินพุตหนึ่งตัวและสร้างอีกdoubleอันเป็นเอาต์พุต หลังบอกคุณว่ามันอาจเป็นฟังก์ชั่นการใช้พารามิเตอร์เดียว คำตอบของฉัน ดังนั้นหลังจากถูกถามว่า "ระบบประเภทของคุณคืออะไร" ฉันตอบดังนี้: ระบบประเภทเป็นแบบไดนามิก (ประเภทถูกกำหนดให้กับค่าไม่ใช่ตัวแปรที่เก็บไว้) แต่มีความแข็งแกร่งโดยไม่มีกฎบังคับที่น่าแปลกใจ (คุณไม่สามารถเพิ่มสตริงลงในจำนวนเต็มเนื่องจากมันเป็นประเภทที่เข้ากันไม่ได้ แต่คุณสามารถเพิ่มจำนวนเต็มเป็นจำนวนจุดลอยตัว) . ระบบชนิดถูกใช้โดย VM …

4
เหตุใด VMs จึงจำเป็นต้องเป็น "เครื่องซ้อน" หรือ "เครื่องลงทะเบียน" ฯลฯ
(นี่เป็นคำถามที่มือใหม่มาก) ฉันได้ศึกษาเกี่ยวกับ Virtual Machines เล็กน้อยแล้ว ปรากฎว่าส่วนมากของพวกเขาได้รับการออกแบบคล้ายกับคอมพิวเตอร์ทางกายภาพหรือทางทฤษฎี ฉันอ่านว่า JVM เป็น 'เครื่องซ้อน' หมายความว่า (และแก้ไขให้ฉันถ้าฉันผิด) คือมันเก็บทุกอย่างไว้ใน 'หน่วยความจำชั่วคราว' บนสแต็กและทำการดำเนินการบนสแต็กนี้สำหรับ opcodes ทั้งหมด ตัวอย่างเช่นซอร์สโค้ด2 + 3จะถูกแปลเป็น bytecode คล้ายกับ: push 2 push 3 add คำถามของฉันคือ: JVMs อาจเขียนโดยใช้ C / C ++ และเช่นนั้น ถ้าเป็นเช่นนั้นทำไม JVM ไม่รันโค้ด C ต่อไปนี้: 2 + 3.. ? ฉันหมายความว่าเหตุใดจึงต้องใช้สแต็กหรือใน 'รีจิสเตอร์' VM อื่น ๆ - …

11
มีเหตุผลใดที่จะไม่ยอมรับซอฟต์แวร์ที่ส่งมอบเป็นเครื่องเสมือนจริงหรือไม่?
นี่เป็นคำถามเกี่ยวกับโลจิสติกส์ไม่ใช่คำถามทางเทคนิค บริษัท ของฉันจ้างงานซอฟต์แวร์ฝังตัวบางงาน โดยเฉพาะเราได้จ่ายผู้รับเหมาเพื่อพัฒนาระบบฝังตัวสำหรับเราเนื่องจากเราไม่มีความรู้ภายในเพียงพอที่จะทำเอง (เรามีนักพัฒนาแอปพลิเคชันบนเดสก์ท็อปเท่านั้น) ดังนั้นผู้รับเหมาได้เสร็จสิ้นซอฟต์แวร์และพวกเขาได้ถามว่าพวกเขาอาจส่งมอบมันให้กับเราในเครื่องเสมือนจริงหรือไม่ VM เป็นเครื่อง Windows 8 ที่ประกอบด้วย CodeWarrior IDE ที่กำหนดค่าไว้ล่วงหน้าพร้อมด้วยซอร์สโค้ดเป็นโครงการ CodeWarrior แนวคิดคือสิ่งนี้จะช่วยให้เราสามารถทำการเปลี่ยนแปลงรหัสภายใน VM ที่กำหนดค่าไว้แล้วเพื่อการพัฒนาโครงการนี้ต่อไป มีข้อเสียใด ๆ ในการทำเช่นนี้แทนที่จะให้พวกเขาแนะนำเราเกี่ยวกับวิธีการกำหนดค่าเครื่องพัฒนาของเราเองเพื่อทำการเปลี่ยนแปลงรหัสในโครงการหรือไม่? ปัญหาเดียวที่ฉันสามารถคาดการณ์ได้คือ VM ทำงานช้าและใช้เวลานานในการสร้างโครงการใหม่เมื่อเราทำการเปลี่ยนแปลงรหัส แต่ในทางกลับกันฉันชอบความคิดที่จะได้รับสภาพแวดล้อมการพัฒนาระบบฝังตัวที่กำหนดค่าไว้ล่วงหน้าดังนั้นฉันจึงไม่จำเป็นต้องเพิ่ม IDE อีกตัวในเดสก์ท็อปแอปพลิเคชันเดสก์ท็อปของฉัน ฉันไม่สามารถนึกถึงเหตุผลที่ดีว่าทำไมไม่ยอมรับ VM ที่ส่งมอบได้ แต่ฉันแค่ต้องการเรียกใช้โดยชุมชนนี้ในกรณีที่มีบางสิ่งที่ฉันขาดหายไป

8
การเอาชนะ Object.finalize () ไม่ดีจริงเหรอ?
ข้อโต้แย้งหลักสองข้อต่อการยกเลิกObject.finalize()คือ: คุณไม่ต้องตัดสินใจเมื่อมันถูกเรียก มันอาจจะไม่ถูกเรียกเลย หากฉันเข้าใจสิ่งนี้อย่างถูกต้องฉันไม่คิดว่าสิ่งเหล่านี้เป็นเหตุผลที่ดีพอที่จะเกลียดObject.finalize()มาก มันขึ้นอยู่กับการนำ VM ไปใช้และ GC เพื่อพิจารณาว่าเวลาที่เหมาะสมในการจัดสรรคืนวัตถุนั้นไม่ใช่นักพัฒนา เหตุใดจึงสำคัญที่ต้องตัดสินใจเมื่อObject.finalize()ถูกเรียก ตามปกติและแก้ไขให้ถูกต้องหากฉันผิดเวลาที่Object.finalize()จะไม่ถูกเรียกก็คือเมื่อแอปพลิเคชันถูกยกเลิกก่อนที่ GC จะมีโอกาสเรียกใช้ อย่างไรก็ตามวัตถุได้ถูกจัดสรรคืนเมื่อกระบวนการของแอปพลิเคชันสิ้นสุดลง จึงObject.finalize()ไม่ได้รับการเรียกเนื่องจากไม่จำเป็นต้องโทร ทำไมนักพัฒนาถึงสนใจ? ทุกครั้งที่ฉันใช้วัตถุที่ฉันต้องปิดเอง (เช่นตัวจัดการไฟล์และการเชื่อมต่อ) ฉันจะผิดหวังมาก ฉันต้องตรวจสอบอย่างต่อเนื่องว่าวัตถุมีการนำไปใช้close()หรือไม่และฉันแน่ใจว่าฉันไม่ได้รับสายบางครั้งในอดีต ทำไมมันไม่ได้เป็นเพียงที่เรียบง่ายและปลอดภัยในการเพียงแค่ปล่อยให้มันไป VM และ GC ในการกำจัดของวัตถุเหล่านี้โดยการวางclose()การดำเนินงานในObject.finalize()?

7
Java IDE เขียนด้วยภาษาจาวาบริสุทธิ์ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา มี Java IDE เขียนใน Java หรือไม่ ฉันเพิ่งได้แล็ปท็อป DET ปี 9 ที่โรงเรียนในวันนี้และมีข้อ จำกัด ทุกประเภท ค่อนข้างน่ารำคาญคุณไม่สามารถเรียกใช้งานโปรแกรมอื่นนอกเหนือจากที่ติดตั้งไว้แล้วในระบบ (ด้วยเหตุผลบางอย่างที่พวกเขาไม่ได้ปิดการใช้งานพรอมต์คำสั่งPowerShellหรือ regedit แปลก ๆ ) พวกเขาอนุญาตให้คุณเรียกใช้โปรแกรมปฏิบัติการ Java ดังนั้นฉันคิดว่ามันจะเป็นวิธีเดียวที่จะสามารถเขียนโปรแกรมบนแล็ปท็อปเส็งเคร็งของฉันที่โรงเรียน (เมื่อฉันทำงานทั้งหมดเสร็จตามธรรมชาติ): D แก้ไข: โดยเขียนใน Java ฉันยังหมายความว่าปฏิบัติการที่ใช้ในการเรียกใช้โปรแกรมที่มีนามสกุลไฟล์ "ขวด" จึงทำงานบนJVM แก้ไข 2: ฉันลองDrJava IDE และมันใช้งานได้ดีขอบคุณ (ฉันสามารถรวบรวมและรันโปรแกรม)! เกี่ยวกับการรัน Eclipse ผ่านบรรทัดคำสั่งโดยใช้คำสั่ง …

3
ทางเลือกใดในการใช้สแต็กเพื่อแสดงความหมายของการเรียกใช้ฟังก์ชัน?
เราทุกคนรู้และชื่นชอบที่การเรียกใช้ฟังก์ชันมักจะใช้งานโดยใช้ stack มีเฟรม, ที่อยู่ผู้ส่ง, พารามิเตอร์, ล็อตทั้งหมด อย่างไรก็ตามสแต็กเป็นรายละเอียดการใช้งาน: การเรียกประชุมอาจทำสิ่งต่าง ๆ (เช่น x86 fastcall ใช้ (ลงทะเบียน), MIPS และผู้ติดตามใช้หน้าต่างลงทะเบียนและอื่น ๆ ) และการเพิ่มประสิทธิภาพสามารถทำได้แม้กระทั่งสิ่งอื่น ๆ การเพิ่มประสิทธิภาพการโทรหาง .. ) แน่นอนว่าการมีคำสั่งกองซ้อนที่สะดวกในหลาย ๆ เครื่อง (VMs เช่น JVM และ CLR แต่ยังมีเครื่องจริงเช่น x86 ด้วย PUSH / POP เป็นต้น) ทำให้สะดวกในการใช้งานสำหรับการเรียกใช้ฟังก์ชั่น แต่ในบางกรณีก็เป็นไปได้ เพื่อตั้งโปรแกรมในลักษณะที่ไม่จำเป็นต้องใช้ call stack (ฉันกำลังคิดเกี่ยวกับสไตล์การส่งผ่านต่อเนื่องที่นี่หรือนักแสดงในระบบส่งข้อความ) ดังนั้นฉันเริ่มสงสัยว่า: เป็นไปได้หรือไม่ที่จะใช้ semantics call function โดยไม่มี …

3
เหตุใดแกนประมวลผล CPU เพิ่มเติมบนเครื่องเสมือนจึงรวมเวลาช้าลง
[แก้ไข # 2] ถ้าใครจาก VMWare สามารถตีฉันด้วยสำเนาของ VMWare Fusion ฉันยินดีที่จะทำเช่นเดียวกันกับการเปรียบเทียบ VirtualBox กับ VMware อย่างใดฉันสงสัยว่า hypervisor VMware จะได้รับการปรับให้ดีขึ้นสำหรับการทำไฮเปอร์เธรด (ดูคำตอบของฉันด้วย) ฉันเห็นสิ่งที่อยากรู้ เมื่อฉันเพิ่มจำนวนคอร์ในเครื่องเสมือน Windows 7 x64 ของฉันเวลาในการรวบรวมโดยรวมจะเพิ่มขึ้นแทนที่จะลดลง การคอมไพล์มักจะเหมาะอย่างยิ่งสำหรับการประมวลผลแบบขนานเช่นเดียวกับในส่วนตรงกลาง (การทำแผนที่การพึ่งพาโพสต์) คุณสามารถเรียกอินสแตนซ์คอมไพเลอร์ในแต่ละไฟล์. c / .cpp / .cs / ไฟล์ใดก็ได้เพื่อสร้างวัตถุบางส่วน เกิน. ดังนั้นฉันจะจินตนาการว่าการคอมไพล์จริง ๆ แล้วจะขยายขนาดได้ดีกับ # ของแกนประมวลผล แต่สิ่งที่ฉันเห็นคือ: 8 คอร์: 1.89 วินาที 4 แกน: 1.33 วินาที 2 คอร์: …

1
ความสัมพันธ์ระหว่างล่ามเมตาวงกลมเครื่องเสมือนและประสิทธิภาพที่เพิ่มขึ้นคืออะไร
ฉันได้อ่านเกี่ยวกับล่ามเมตาวงกลมบนเว็บ (รวมถึง SICP) และฉันได้ตรวจสอบโค้ดของการใช้งานบางอย่าง (เช่น PyPy และ Narcissus) ฉันได้อ่านเกี่ยวกับสองภาษาค่อนข้างมากซึ่งใช้ประโยชน์จากการประเมิน metacircular, Lisp และ Smalltalk เท่าที่ฉันเข้าใจ Lisp เป็นคอมไพเลอร์โฮสติ้งด้วยตนเองเป็นครั้งแรกและ Smalltalk มีการใช้งาน JIT "จริง" เป็นครั้งแรก สิ่งหนึ่งที่ฉันไม่เข้าใจอย่างสมบูรณ์คือล่าม / คอมไพเลอร์เหล่านั้นจะบรรลุผลการปฏิบัติงานที่ดีได้อย่างไรหรือกล่าวอีกนัยหนึ่งทำไม PyPy จึงเร็วกว่า CPython มันเป็นเพราะการสะท้อน? และจากการวิจัย Smalltalk ของฉันทำให้ฉันเชื่อว่ามีความสัมพันธ์ระหว่าง JIT เครื่องเสมือนและการไตร่ตรอง เครื่องเสมือนเช่น JVM และ CLR อนุญาตการวิพากษ์วิจารณ์ประเภทจำนวนมากและฉันเชื่อว่าพวกเขาใช้งานได้อย่างยอดเยี่ยมในการรวบรวม Just-in-Time (และ AOT ฉันคิดว่า?) แต่เท่าที่ฉันรู้ Virtual Machines นั้นเป็นซีพียูที่พวกเขามีชุดคำสั่งพื้นฐาน Virtual Machines นั้นมีประสิทธิภาพหรือไม่เนื่องจากประกอบด้วยข้อมูลประเภทและข้อมูลอ้างอิง ฉันถามสิ่งนี้เพราะหลายภาษาที่แปลและเรียบเรียงได้ใช้ …

1
สถาปัตยกรรมคอมพิวเตอร์ไม่ได้ขึ้นอยู่กับอาร์เรย์ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว เอกสารต้นฉบับของ Wadler ใน Monads for Functional Programming (Haskell) เขากล่าว อีกคำถามหนึ่งที่มีประวัติอันยาวนานก็คือมันเป็นที่ต้องการของโปรแกรมพื้นฐานในการอัพเดทอาร์เรย์หรือไม่ เนื่องจากความพยายามอย่างมากในการพัฒนาอัลกอริธึมและสถาปัตยกรรมบนพื้นฐานของอาร์เรย์เราจะหลีกเลี่ยงการอภิปรายนี้และเพียงแค่คิดว่าคำตอบคือใช่ ไม่มีการอ้างอิงหรือคำใบ้สำหรับสถาปัตยกรรมที่เป็นไปได้อื่น ๆ ฉันเคยได้ยินบางสิ่งเกี่ยวกับสถาปัตยกรรมที่เหมาะกับ Lisp ใครช่วยกรุณาแนะนำฉันด้วยคำอธิบายและคำแนะนำเกี่ยวกับที่ไหน / ฉันสามารถเริ่มต้นในหัวข้อนี้ ฉันซาบซึ้งมากที่คุณสามารถอธิบายสถาปัตยกรรมที่แตกต่างกันในเวลาสั้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.