ซอฟต์แวร์ใช้งานได้จริงหมายความว่าอย่างไร


27

ฉันสงสัยว่าซอฟต์แวร์นั้นทำงานได้อย่างไร ซอฟต์แวร์ดังกล่าวคืออะไรกันแน่และแตกต่างจากซอฟต์แวร์ที่ไม่ทำงานโดยกำเนิดอย่างไร ฉันจะทราบได้อย่างไรว่ามีซอฟต์แวร์บางส่วนที่ทำงานบนคอมพิวเตอร์ของฉันหรือไม่ มีแนวโน้มว่าจะมีซอฟต์แวร์อยู่ในคอมพิวเตอร์ของฉันที่ทำงานได้ตามปกติหรือไม่?


2
"native" หมายถึงการออกแบบให้ทำงานบนทุกแพลตฟอร์ม / OS
yuritsuki

ฉันไม่ใช่ ... ดูเหมือนว่าผู้ดำเนินรายการจะมีคำถามอ่านยาก ...

5
@faB คุณรู้หรือไม่ว่าไม่มีผู้ดูแลเกี่ยวข้องในการปิดคำถาม
slhck

ฉันยอมรับชื่อคำถามทำให้ฉันคิดถึงความแตกต่างระหว่างการเรียกใช้ "โปรแกรม" ภายใต้ "ระบบปฏิบัติการ" หรือบนตัวประมวลผล (เช่นการเข้าถึงฮาร์ดแวร์โดยตรง)
Breakthrough

ไม่ใช่ว่าคำถามคือ ไม่ดี ต่อ se แต่มันไม่ดีสำหรับเว็บไซต์นี้ จากหลักฐานที่ได้จากคำตอบมันไม่ใช่สิ่งที่สามารถตอบได้อย่างหมดจดและมีข้อโต้แย้งรอบข้างซึ่งทำให้การปิดเหมาะสมทั้งหมดตามคำถามที่พบบ่อย
afrazier

คำตอบ:


43

ซอฟต์แวร์นั้นมีอยู่ในแพลตฟอร์มหากได้รับการออกแบบให้ทำงานบนแพลตฟอร์มนั้น

แพลตฟอร์มมักจะอ้างถึงระบบปฏิบัติการ แต่ก็สามารถนำไปใช้กับอุปกรณ์เช่น Nintendo Game Boy

ตัวอย่างการใช้เกมบอยมันได้รับซอฟต์แวร์จากคาร์ทริดจ์ ตลับหมึกพิมพ์นี้มีรหัสที่ทำงาน โดยกำเนิด บน Game Boy

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

เลเยอร์ความเข้ากันได้ เป็นเหมือนตัวเลียนแบบ เมื่อคอมพิวเตอร์ 64- บิตและระบบปฏิบัติการกลายเป็นกระแสหลักพวกเขาจำเป็นต้องเข้ากันได้กับเทคโนโลยี 32 บิตที่มีอยู่ เนื่องจากสถาปัตยกรรมแบบ 64 บิตและ 32 บิตนั้นแตกต่างกันมากเลเยอร์ความเข้ากันได้จึงจำเป็นต้องมีเพื่อเรียกใช้ซอฟต์แวร์ 32 บิตบนเครื่อง 64 บิต สำหรับ Microsoft Windows รุ่น 64 บิต Microsoft จำเป็นต้องเขียนเลเยอร์ความเข้ากันได้เพื่อให้โปรแกรม 32 บิตยังคงทำงานบนระบบ 64 บิตใหม่ นี่คือเหตุผลที่บางโปรแกรมติดตั้งบ่อยครั้งในโฟลเดอร์ที่เรียกว่า Program Files (x86)ที่ไหน x86 หมายถึง "32- บิต"

เลเยอร์ความเข้ากันได้มักจะมีความใกล้ชิดกับระบบเนทีฟมากกว่าอีมูเลเตอร์ VirtualBox emulates ฮาร์ดแวร์สำหรับระบบปฏิบัติการ * * * * และระบบที่มันเลียนแบบไม่ได้มีปฏิสัมพันธ์โดยตรงกับระบบโฮสต์มากนัก WOW64 คือ เลเยอร์ความเข้ากันได้ ในการที่มันช่วยให้โปรแกรม 32- บิตทำงานบน Windows 64 บิตในแบบบูรณาการมากขึ้น WoW64 ช่วยจัดทำโปรแกรม เข้ากันได้ ค่อนข้างมากกว่า การลอกเลียนแบบ พวกเขาในสภาพแวดล้อมที่แยก

ห้องสมุดการแปล เป็นองค์ประกอบของเลเยอร์ที่เข้ากันได้ เมื่อใดก็ตามที่รหัสไบนารี่ทำงานแบบไม่ติดไวรัสไลบรารี่การแปลจะช่วยเปลี่ยนเส้นทางการโทรระหว่างประเทศที่ไม่ใช่เจ้าของภาษาไปเป็นการโทรภายในที่ระบบสามารถเข้าใจได้ โปรแกรมประกอบที่เขียนขึ้นสำหรับ TI-83 ดั้งเดิมอาจไม่สามารถใช้งานร่วมกับเครื่องคิดเลข TI-83/84 Plus รุ่นใหม่กว่าได้เนื่องจากการโทรบางอย่างที่เข้าท่าในสถาปัตยกรรมของ TI-83 อาจไม่สามารถใช้งานได้ใน TI-83/84 + อีกต่อไป คลังการแปล (อาจรวมอยู่ในเปลือกเช่น MirageOS ) สร้างความมั่นใจว่าการเรียกร้องให้ TI-83 ไปยังสถานที่ใหม่ที่ได้รับการปรับปรุงในเครื่องคิดเลข TI-83/84 +

รหัสที่ไม่ขึ้นกับแพลตฟอร์ม เขียนด้วยภาษาที่เป็น ตีความ โดยสิ่งที่มักจะทำงานโดยกำเนิด ตัวอย่างเช่น PHP เป็นภาษาการเขียนโปรแกรมที่ตีความและดำเนินการโดยไบนารี PHP ที่ติดตั้งซึ่งได้รับการรวบรวมแล้ว โดยกำเนิด สำหรับระบบปฏิบัติการที่ใช้ Windows, Mac และ Unix โค้ด PHP ที่เว็บสคริปเตอร์เขียนนั้นเป็นอิสระจากแพลตฟอร์มช่วยให้โค้ดทำงานบนระบบปฏิบัติการหลายระบบตราบเท่าที่มีการติดตั้ง PHP สำหรับระบบปฏิบัติการเหล่านั้น


เบ็ดเตล็ด

ราชทัณฑ์

* * * * ขอบคุณ, Michael Kjörling สำหรับ จับประเด็นบางอย่าง กับ คำตอบนี้ .

อื่น ๆ

ความแตกต่างระหว่าง "ดั้งเดิม" และ "ไม่ใช่เจ้าของภาษา" คือ ไม่ใช่ขาวดำ . เครดิตให้กับ afrazier )


3
ผู้เยาว์ nitpick: (มันคือ VirtualBox ไม่ใช่ VirtualBox และ) VirtualBox ไม่ได้จำลองระบบปฏิบัติการมันจำลอง ฮาร์ดแวร์ . ดังนั้นคุณสามารถติดตั้งระบบปฏิบัติการใด ๆ ที่คุณชอบใน VirtualBox (ขึ้นอยู่กับข้อ จำกัด ของการจำลองเสมือน) หรือแม้แต่เขียนของคุณเองตั้งแต่เริ่มต้น
a CVn

1
พื้นเมือง บ่อยครั้งก็หมายความว่ามันกำลังใช้ไลบรารี่ชุดหลักและ API สำหรับแพลตฟอร์มพื้นฐานซึ่งสามารถสร้างความแตกต่างได้เล็กน้อย มีบางคนที่ไม่พิจารณาว่าแอปพลิเคชั่น. NET เป็น "native" เหมือนกับแอปพลิเคชัน Win32 API เป็น "native" และในทำนองเดียวกันบางคนไม่พิจารณาโปรแกรม KDE ที่ทำงานบน Gnome desktop "native"
afrazier

@afrazier: นั่นเป็นเพราะแอปพลิเคชั่น. NET ได้รับการออกแบบมาให้ทำงานบน "Common Language Runtime" และต้องการเลเยอร์ความเข้ากันได้ในการทำงานบน Windows หรือเลเยอร์ความเข้ากันได้อื่นเพื่อทำงานบน Linux
Ben Voigt

@Ben Voigt: ยังคงเป็น API ของบุคคลที่หนึ่งไบนารีจะถูกคอมไพล์ไปยังรหัส x86 / amd64 ดั้งเดิม (ไม่ว่าจะรันไทม์โดย CLR หรือล่วงหน้ากับ ngen) และเฟรมเวิร์กมาพร้อมกับ Windows รุ่นล่าสุด นี่เป็นส่วนหนึ่งของการโต้แย้งที่ใหญ่กว่าและไม่เหมาะสมที่นี่จริงๆ
afrazier

กล่องเสมือนไม่ได้จำลองทางเทคนิค แต่เป็น Virtualizer อีมูเลเตอร์ของเวลาที่ผ่านไปได้เลียนแบบฮาร์ดแวร์ที่แตกต่างอย่างสมบูรณ์ ภายใต้เวอร์ชวลไลเซอร์ระบบปฏิบัติการ & amp; ซอฟต์แวร์ใช้งานได้จริงบนโฮสต์ CPU ความแตกต่างคืออุปกรณ์นั้นเสมือนหรือจำลอง เป็นความแตกต่างทางเทคนิคเล็กน้อยที่แม้แต่เว็บไซต์ Virtual Box ก็ยังชี้ให้เห็นที่นี่ virtualbox.org/wiki/Virtualization
Matt H

4

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


3

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

Java ไม่ใช่รหัสเนทีฟ มันถูกคอมไพล์ไปที่ bytecode ระดับกลางซึ่งจะทำงานบนชิปเซ็ตเฉพาะ Java สามารถ โทร รหัสเนทีฟ Eclipse เป็นตัวอย่างที่ยอดเยี่ยม - สำหรับความเร็ว Java เรียกใช้การโทรกราฟิกเนทีฟแพลตฟอร์ม

ถ้าคุณวิ่ง ไวน์ เป็นโปรแกรมจำลองการทำงาน MS Windows API ที่ไม่ใช่รหัสเนทิฟ แม้ว่าคุณกำลังเรียกใช้งานรหัสที่ออกแบบมาสำหรับชิปเซ็ตนั้น (x86) แต่คุณไม่ได้เรียกใช้รหัสสำหรับระบบปฏิบัติการที่บู๊ตได้ แต่เป็นการเปลี่ยนไลบรารี MAME รันไบนารีสำหรับ CPU และระบบปฏิบัติการที่แตกต่างกัน

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

มีเส้นบางเบลอ เว็บเบราว์เซอร์ของคุณทำงานเป็นรหัสเนทิฟ แต่ก็สามารถเรียกใช้ Java (เรียบเรียงเป็น bytecode) หรือ Javascript (ภาษาที่ตีความด้วยสคริปต์)


.NET, VBA, XUL , IA-32 (บน CPU64 ของ AMD64 อย่างน้อย), ...
a CVn

3

มันขึ้นอยู่กับบริบทเป็นอย่างมาก สำหรับฉัน "native" หมายถึงแอปพลิเคชันที่ใช้คุณสมบัติและกลไกที่ระบบปฏิบัติการมีให้แทนที่จะเป็นของตัวเอง ที่สามารถใช้กับคุณลักษณะส่วนต่อประสานกับผู้ใช้ (ปุ่ม, หน้าต่าง, กล่องโต้ตอบตัวเลือกไฟล์), รวมถึงคุณสมบัติภายใต้ประทุน (เช่นการรวมกับ "เปิดด้วย ... ")

ตัวอย่างเช่นบน Windows แอพพื้นฐานจะใช้ "WinAPI" เพื่อรับปุ่มเลื่อนแถบเดียวกับแอปพลิเคชันอื่น ๆ พวกเขาทำงานเหมือนกันในแอประบบ (notepad) เหมือนกับในแอปของบุคคลที่สาม

แอปพลิเคชัน Java มักจะใช้ "Swing" และดูแตกต่างอย่างสิ้นเชิงเพราะพวกเขาวาดการควบคุมตัวเองมากกว่าที่จะใช้ระบบ ข้อดีคือโปรแกรมจะมีลักษณะเหมือนกันทุกระบบปฏิบัติการ

ตัวเลือกอื่นในการสร้าง GUI คือชุดเครื่องมือข้ามแพลตฟอร์มเช่น "QT" QT จะขอให้ระบบปฏิบัติการวาดตัวควบคุมสำหรับมันดังนั้นพวกเขาควรจะดูพื้นเมืองมาก ๆ ไม่ว่าคุณจะใช้ Windows, OSX หรือ Linux กล่องข้อความ QT จะมีลักษณะเหมือนกล่องข้อความของ windows แต่ไม่ได้เป็นของพื้นเมือง แต่เป็นการจำลองแบบ คุณอาจสังเกตเห็นความแตกต่างเล็กน้อยในรายละเอียด (เช่นเมนูบริบทวิธีการป้อนข้อมูล ฯลฯ )

หมายเหตุเมื่อมีคนพูดว่า "เนทีฟ" พวกเขามักจะหมายถึงโปรแกรมที่คอมไพล์ไปยังรหัสเครื่องแทนที่จะเป็นรหัสกลางซึ่งทำงานในเครื่องเสมือน (เช่นโปรแกรม Java และ. NET) จากตัวอย่างด้านบน WinAPI และแอป QT กำลังใช้รหัสเครื่องในขณะที่โปรแกรม Java นั้นถูกคอมไพล์ไปยัง Java bytecode การใช้งานนี้เป็นปัญหาเล็กน้อยในปัจจุบันเนื่องจากผู้ใช้หลายรายพิจารณาว่าแอปพลิเคชั่น. NET แบบดั้งเดิมที่ดีสำหรับ Windows - เป็นเพียงไฟล์. exe ใช้ตัวควบคุมและ API เดียวกันภายใต้ประทุน รหัสเครื่อง

ในทำนองเดียวกันฉันจะพิจารณาโปรแกรมที่ใช้ GTK รู้เกี่ยวกับโครงสร้างระบบไฟล์ Unix และอาจมาในแพคเกจ. deb สำหรับ native สำหรับ Ubuntu หรือ Gnome มีแม้แต่แอป Gnome บุคคลแรกที่เขียนด้วยจาวาสคริปต์ที่ใคร ๆ ก็สามารถโทรได้! เช่นเดียวกับแอพ "Metro" ของ Windows 8 ซึ่งสามารถเขียนได้หลายภาษาบางคอมไพล์บางตัวไม่ได้


2

หากต้องการพูดให้เป็นนามธรรมมากขึ้นก็เหมือนกับให้คนอื่นที่คุณไว้ใจเรียกใช้งานโปรแกรมในภาษาอื่น

  • Native หมายความว่าระบบปฏิบัติการจะใช้ภาษาถิ่นที่เร็วและง่ายที่สุดที่เขารู้จักไบนารี

    จุดเด่น: ภาษาที่รวดเร็วและมีขนาดใหญ่ซึ่งสามารถพูดคุยซึ่งกันและกันได้ จุดด้อย: ความปลอดภัย, API ที่ซับซ้อน, จำกัดความสามารถของระบบปฏิบัติการ, คอมไพเลอร์ก็ยากที่จะทำ, เพราะโปรแกรม, เมื่อคอมไพล์แล้ว, จะถูกปล่อยออกมา.

  • ไม่ใช่เจ้าของภาษาหมายความว่ารหัสของคุณจะไม่ถูกเรียกใช้งานโดยตรงจากระบบปฏิบัติการ เขาสามารถเรียกใช้งานได้หลายวิธีโดยหลัก ๆ จะถูกตีความและเรียกใช้โปรแกรมรุ่น bytecode ในเครื่องเสมือน

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

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