Phần mềm chạy tự nhiên có nghĩa là gì?


27

Tôi đã tự hỏi nó có nghĩa là gì để phần mềm chạy tự nhiên. Chính xác thì phần mềm đó là gì và nó khác với phần mềm không chạy tự nhiên như thế nào? Làm thế nào tôi có thể biết nếu một phần mềm nhất định sẽ chạy tự nhiên trên máy tính của tôi? Có khả năng đã có phần mềm trên máy tính của tôi chạy tự nhiên không?


2
"bản địa" ngụ ý nó được thiết kế để chạy trên bất kỳ nền tảng / hệ điều hành nào trên đó
yuritsuki

Tôi cũng vậy ... có vẻ như người điều hành gặp khó khăn khi đọc câu hỏi ...

5
@faB Bạn có nhận ra rằng không có người điều hành nào tham gia vào việc đóng câu hỏi không?
slhck

Tôi thừa nhận, tiêu đề câu hỏi khiến tôi nghĩ về sự khác biệt giữa việc chạy một "chương trình" trong "hệ điều hành" hoặc trên chính bộ xử lý (ví dụ: truy cập phần cứng trực tiếp).
Đột phá

Nó không phải là câu hỏi là xấu mỗi se, nhưng nó không tốt cho trang web này. Bằng chứng là các câu trả lời, nó không phải là thứ gì đó có thể được trả lời rõ ràng và có một số đối số xung quanh nó, khiến cho việc đóng của nó hoàn toàn phù hợp theo Câu hỏi thường gặp.
afrazier

Câu trả lời:


43

Một phần mềm có nguồn gốc từ một nền tảng nếu nó được thiết kế để chạy trên nền tảng đó.

Một nền tảng thường đề cập đến một hệ điều hành, nhưng nó cũng có thể được áp dụng cho các thiết bị như Nintendo Game Boy.

Lấy ví dụ về Game Boy, nó lấy phần mềm từ hộp mực. Các hộp mực này chứa mã chạy tự nhiên trên Game Boy.

Trình giả lập là một lớp cho phép phần mềm được thiết kế cho một nền tảng được chạy trên nền tảng khác. Ví dụ: có các trình giả lập có thể thực thi hình ảnh của các hộp mực Game Boy và cho phép bạn chơi các trò chơi Game Boy trên máy tính hoặc thậm chí là điện thoại di động của bạn.

Một lớp tương thích giống như một trình giả lập. Khi máy tính và hệ điều hành 64 bit trở thành xu hướng, chúng cần tương thích với các công nghệ 32 bit hiện có. Do kiến ​​trúc 64 bit và 32 bit rất khác nhau, nên thường cần một lớp tương thích để chạy phần mềm 32 bit trên máy 64 bit. Đối với phiên bản 64 bit của Microsoft Windows, Microsoft cần phải viết một lớp tương thích để các chương trình 32 bit vẫn hoạt động trên hệ thống 64 bit mới. Đây là lý do tại sao một số chương trình thường được cài đặt vào một thư mục có tên Program Files (x86), trong đó x86có nghĩa là "32-bit".

Các lớp tương thích có xu hướng thân mật hơn với hệ thống gốc hơn là các trình giả lập. VirtualBox mô phỏng phần cứng cho các hệ điều hành * và các hệ thống mà nó mô phỏng không có nhiều tương tác trực tiếp với hệ thống máy chủ. WoW64 là một lớp tương thích ở chỗ nó cho phép các chương trình 32 bit chạy trên Windows 64 bit theo cách tích hợp hơn. WoW64 giúp làm cho các chương trình tương thích hơn là mô phỏng chúng trong một môi trường bị cô lập.

Một thư viện dịch là một thành phần của các lớp tương thích. Bất cứ khi nào mã nhị phân chạy không nguyên bản, thư viện dịch sẽ giúp chuyển hướng các cuộc gọi không phải tiếng nước ngoài sang cuộc gọi gốc mà hệ thống có thể hiểu được. Các chương trình lắp ráp được viết cho TI-83 ban đầu có thể không tương thích với các máy tính TI-83/84 Plus mới hơn vì một số cuộc gọi có ý nghĩa trong kiến ​​trúc của TI-83 có thể không còn hợp lệ trong TI-83/84 +. Một thư viện dịch thuật (có thể được bao gồm trong các vỏ như MirageOS ) đảm bảo rằng các lệnh gọi TI-83 đến các địa điểm mới, được cập nhật trong máy tính TI-83/84 +.

Mã độc lập với nền tảng được viết bằng ngôn ngữ được diễn giải bởi một thứ thường chạy tự nhiên. Ví dụ, PHP là ngôn ngữ lập trình được diễn giải và thực thi bởi tệp nhị phân PHP đã cài đặt, vốn đã được biên dịch nguyên bản cho các hệ điều hành Windows, Mac và Unix. Mã PHP mà các tập lệnh web viết độc lập với nền tảng, cho phép mã hoạt động trên nhiều hệ điều hành miễn là PHP được cài đặt cho các hệ điều hành đó.


Linh tinh

Đính chính

* Cảm ơn bạn, Michael Kjorling , vì đã nắm bắt được một số vấn đề với câu trả lời này .

Khác

Sự khác biệt giữa "bản địa" và "không bản địa" không phảimàu đen và trắng . (Tín dụng cho afrazier )


3
Mã khóa nhỏ: (đó là VirtualBox, không phải VirualBox và) VirtualBox không mô phỏng hệ điều hành, nó mô phỏng phần cứng . Vì vậy, bạn có thể cài đặt bất kỳ hệ điều hành nào bạn thích trong VirtualBox (chịu các giới hạn ảo hóa) hoặc thậm chí tự viết từ đầu.
CVn

1
Bản địa cũng thường ngụ ý rằng nó sử dụng bộ thư viện chính và API cho nền tảng cơ bản, điều này có thể làm cho sự khác biệt trở nên hơi mờ. Có khá nhiều người không coi các ứng dụng .NET là "bản địa" như các ứng dụng API Win32 là "bản địa" và tương tự một số người không coi chương trình KDE chạy trên máy tính để bàn Gnome là "bản địa".
afrazier

@afrazier: Đó là vì các ứng dụng .NET được thiết kế để chạy trên "Thời gian chạy ngôn ngữ chung" và cần một lớp tương thích để chạy trên Windows. Hoặc một lớp tương thích khác để chạy trên Linux.
Ben Voigt

@Ben Voigt: Đây vẫn là API của bên thứ nhất, các tệp nhị phân được biên dịch thành mã x86 / amd64 gốc (cho dù trong thời gian chạy bởi CLR hoặc trước với ngen) và khung đã được gửi cùng với các phiên bản Windows gần đây. Đây là một phần của một cuộc tranh luận lớn hơn và không thực sự thích hợp ở đây.
afrazier

Virtual Box về mặt kỹ thuật không phải là trình giả lập mà là Virtualizer. Một trình giả lập của thời gian trôi qua luôn mô phỏng phần cứng hoàn toàn khác nhau. Trong một trình ảo hóa, HĐH & phần mềm thực sự chạy trên CPU chủ. Sự khác biệt là các thiết bị là ảo hoặc giả lập. Đó là một sự khác biệt kỹ thuật nhỏ mà ngay cả trang web Virtual Box chỉ ra ở đây: virtualbox.org/wiki/Virtualization
Matt H

4

Mã riêng thường được sử dụng trái ngược với mã không phụ thuộc vào nền tảng. Nếu bạn chạy phần mềm bản địa, bạn đang chạy một tệp nhị phân được biên dịch và, chẳng hạn, một tập lệnh độc lập với nền tảng như javascript hoặc Java bytecode. Biên dịch C hoặc biên dịch C ++ là những ví dụ hay về mã gốc.


3

Có một số câu trả lời đáng ngạc nhiên có thể có, nhưng tiêu chuẩn thường là: mã được biên dịch thành các mã cho CPU và chạy với các thư viện lập trình của HĐH khởi động máy tính. Trong trường hợp này, hầu hết mã bạn chạy sẽ là mã gốc. Có thể một số ví dụ phản tác dụng sẽ làm sáng tỏ mọi thứ.

Java không phải là mã gốc. Nó được biên dịch thành một mã byte trung gian, sau đó được chạy trên chipset cụ thể. Java có thể gọi mã gốc. Eclipse là một ví dụ tuyệt vời - về tốc độ, Java gọi ra một số cuộc gọi đồ họa gốc của nền tảng.

Nếu bạn chạy WINE , trình giả lập API MS Windows, đó không phải là mã gốc. Mặc dù bạn đang thực thi mã được thiết kế cho chipset đó (x86), nhưng bạn không chạy mã cho HĐH đã khởi động nó, mà là các thư viện thay thế. MAME chạy nhị phân cho các CPU và hệ điều hành khác nhau.

Các kịch bản không phải là mã gốc. Chúng được viết bằng ngôn ngữ cấp cao hơn và sau đó phải được chuyển đổi trong thời gian chạy thành mã chạy trên CPU của bạn.

Có một số dòng mờ. Trình duyệt web của bạn chạy dưới dạng mã gốc ,, nhưng nó cũng có thể chạy Java (được biên dịch thành mã byte) hoặc Javascript (ngôn ngữ được dịch theo kịch bản).


.NET, VBA, XUL , IA-32 (ít nhất là trên CPU AMD64), ...
một CVn

3

Nó phụ thuộc rất nhiều vào bối cảnh. Đối với tôi, "bản địa" có nghĩa là một ứng dụng sử dụng các tính năng và cơ chế mà hệ điều hành cung cấp, thay vì tự chạy. Điều đó có thể áp dụng cho các tính năng giao diện người dùng (nút, cửa sổ, hộp thoại chọn tệp), cũng như cho các tính năng dưới mui xe (ví dụ: tích hợp với "Mở bằng ...").

Ví dụ: trên Windows, một ứng dụng gốc sẽ sử dụng "WinAPI" để có cùng các nút, thanh cuộn, v.v. như các ứng dụng khác. Chúng hoạt động giống hệt nhau trong các ứng dụng hệ thống (notepad) như trong các ứng dụng của bên thứ ba.

Các ứng dụng Java thường sử dụng "Xoay" và trông hoàn toàn khác nhau, vì chúng tự vẽ các điều khiển của chúng, thay vì sử dụng các hệ thống. Lợi ích là chương trình trông giống nhau trên mọi HĐH.

Một tùy chọn khác để xây dựng GUI là bộ công cụ đa nền tảng như "QT". QT sẽ yêu cầu HĐH vẽ các điều khiển cho nó, vì vậy chúng sẽ trông rất tự nhiên, bất kể bạn đang chạy Windows, OSX hay Linux. Một hộp văn bản QT sẽ trông giống như một hộp văn bản windows, tuy nhiên nó không phải là một bản gốc, mà là một loại mô phỏng. Bạn có thể nhận thấy sự khác biệt nhỏ trong chi tiết (ví dụ: menu ngữ cảnh, phương thức nhập, v.v.).

Lưu ý khi mọi người nói "bản địa", họ thường có nghĩa là một chương trình được biên dịch thành mã máy thay vì mã trung gian, được chạy trong một máy ảo (như các chương trình Java và .NET). Trong các ví dụ trên, ứng dụng WinAPI và ứng dụng QT đang sử dụng mã máy, trong khi chương trình Java được biên dịch thành mã byte Java. Việc sử dụng này hiện nay có một chút vấn đề, bởi vì nhiều người dùng sẽ xem xét một ứng dụng .NET được làm tốt cho Windows - nó chỉ là một .exe, sử dụng các điều khiển và API chính xác tương tự trong phần mềm và gần như không thể phân biệt được với một chương trình được biên dịch mã máy.

Tương tự như vậy, tôi sẽ xem xét một chương trình sử dụng GTK, biết về cấu trúc hệ thống tệp Unix và có lẽ có trong gói .deb dành cho Ubuntu hoặc Gnome. Thậm chí có những ứng dụng Gnome của bên thứ nhất được viết bằng javascript mà người ta có thể gọi là bản địa! Điều tương tự cũng áp dụng cho các ứng dụng "Metro" của Windows 8, có thể được viết bằng nhiều ngôn ngữ, một số được biên dịch, một số thì không.


2

Nói một cách trừu tượng hơn, nó giống như để người khác tin tưởng bạn thực hiện một chương trình bằng một ngôn ngữ khác.

  • Bản địa có nghĩa là HĐH sẽ sử dụng phương ngữ nhanh nhất, đơn giản nhất mà anh ta biết, nhị phân.

    Ưu điểm: nhanh, sẵn có lớn của ngôn ngữ có thể nói chuyện với nhau vì nó thuộc về kim loại. Nhược điểm: bảo mật, API phức tạp, bị hạn chế về khả năng của hệ điều hành, cũng là trình biên dịch khó thực hiện, bởi vì một chương trình, một khi được biên dịch, được phát hành tự nhiên.

  • Không phải bản địa, có nghĩa là mã của bạn sẽ không được HĐH thực thi trực tiếp. Anh ta có thể bị xử tử theo nhiều cách khác nhau, những cách chính được diễn giải và chạy phiên bản mã byte của chương trình của bạn trong một máy ảo.

    Ưu điểm: API hầu như không bao giờ thay đổi, do đó, các lập trình viên sẽ làm việc dễ dàng hơn nhiều (ít nhất là khi họ sử dụng ngôn ngữ cụ thể này). Nhược điểm: hiệu suất (thường là giảm nhẹ, hiếm khi có thể trở thành vấn đề) và không phải ai cũng thực sự sử dụng ngôn ngữ cụ thể này, vì vậy nó cũng có thể là một vấn đề khi áp dụng công nghệ này. Bảo mật cũng có thể là một vấn đề, nhưng nó không được kiểm soát nhiều. Bằng cách nào đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.