2010-08-01 33 views
11

PHP có máy ảo như Java không?PHP có máy ảo như Java không?

+3

PHP có máy ảo không? Chắc chắn, nó có thể. Giống như JVM? Thậm chí không gần. –

+0

Bây giờ có một máy ảo rất giống với JVM. Xem: https://github.com/Facebook/hiphop-php/wiki –

Trả lời

14

Có.

Độc lập với nền tảng PHP đang chạy, các tập lệnh được biên dịch thành cùng một bytecode và được chạy bởi Công cụ Zend.

Sự khác biệt từ Java là mã được biên dịch này thường không được lưu trữ thành các tệp riêng biệt và các tập lệnh được biên dịch lại trên mỗi lần thực thi (tuy nhiên, xem bộ đệm mã hóa).

+1

Sự khác biệt về khái niệm của chúng giữa Công cụ Zend và JVM? –

+1

@Chris Đó là câu hỏi rất mơ hồ và tôi không đủ triển khai JVM để thậm chí phác thảo một câu trả lời. – Artefacto

+0

Điều đó là công bằng. Cảm ơn bạn. –

5

Một khác biệt quan trọng giữa Engine Zend và một JVM điển hình là trong cách họ thực hiện bytecode:

  • Engine Zend thực thi (diễn giải) các bytecode biên dịch trực tiếp. (Ít nhất đó là điều tôi nghĩ sẽ xảy ra. Tôi không thể xác nhận điều này từ tài liệu trực tuyến của Zend!)
  • Một JVM thường sẽ sử dụng trình biên dịch JIT để biên dịch bytecode thành chỉ dẫn gốc và sau đó thực hiện các hướng dẫn gốc.

Thực tế, hành vi JVM phức tạp hơn điều này. Các JVM không phải lúc nào cũng biên dịch thành mã gốc, và khi chúng thực hiện, chúng thường trì hoãn việc biên dịch JIT cho đến khi chúng thấy nó đáng làm. Trước đó, chúng thực thi trực tiếp các bytecode.

+2

Nhìn vào mã nguồn cho Zend cho thấy rằng nó thực sự giải thích bytecode trực tiếp, thay vì chuyển đổi nó thành native. Và mã cũng không đẹp ... – siride

+1

Tôi đã có nhiều "những gì các bleep" -moments khi bước qua mã nguồn php nhưng thẳng thắn các yếu tố vm của động cơ zend không nằm trong số đó. So với các ngôn ngữ khác ... tốt, hầu hết trong số họ là như thế này. – VolkerK

0

Có, nhưng chỉ gần đây nó khá giống với JVM cho Java. Nó được phát minh bởi facebook và được công bố tại hội nghị OSCON tuần khác (tháng 7 năm 2013).

Báo cáo tin tức trên máy ảo PHP mới có thể đọc được here và mã và thông tin khác có thể được tìm thấy trên github.

Các vấn đề liên quan