ข่าวนี้เหมาะมากสำหรับคนที่สนใจเรื่องการออกแบบคอมไพเลอร์นะครับ (มีหรือเปล่าหว่า?)
ย้อนความกันหน่อยว่า เว็บไซต์ขนาดมหึมาอย่าง Facebook ถูกเขียนขึ้นมาด้วย PHP แต่จำนวนผู้ใช้ระดับนี้ ต้องการประสิทธิภาพที่สูงกว่า PHP ทั่วไป และแนวทางมาตรฐานของวงการคือแปลงฟังก์ชันบางส่วนเป็น C++ เพื่อรีดประสิทธิภาพให้ดียิ่งขึ้น
อย่างไรก็ตาม การแปลบางส่วนของโค้ด PHP เป็น C++ จะมีปัญหาเรื่องการดูแลรักษาโค้ดในระยะยาว (โดยเฉพาะโค้ดที่ซับซ้อนระดับของ Facebook) ซึ่งทางแก้ของบริษัทก็คือพัฒนา HipHop for PHP เป็นตัวช่วยแปล PHP เป็น C++ โดยอัตโนมัติ นั่นคือตอนโปรแกรมเมอร์เขียนก็เป็นเป็น PHP แต่ตอนใช้งานจริงก็ใช้ HipHop ช่วยแปลเป็น C++ ให้ แล้วนำไปคอมไพล์ตามปกติอีกครั้ง (รายละเอียดอ่านในข่าวเก่า)
อธิบายอีกครั้งคือ กระบวนการแปลโค้ดของ Facebook จะเป็น 2 ขั้นดังนี้
แต่ในการใช้งานจริง Facebook แบ่ง HipHop for PHP ออกเป็น 2 โหมดสำหรับ 2 งาน
ปัญหาที่ Facebook พบกับ HipHop มีสองประการ
ทางออกของ Facebook ในการแก้ปัญหาทั้งสองอย่างคือเปลี่ยนมาใช้การแปลโค้ดแบบ dynamic translation ที่มีประสิทธิภาพมากขึ้น และสร้าง "ไบต์โค้ด" กลางที่ใช้ร่วมกันระหว่างโหมด interpreter/compiler จะได้ดูแลง่ายขึ้น
ชื่อของมันคือ HipHop Virtual Machine (hhvm) ส่วนภาษาไบต์โค้ดใหม่เรียกว่า HipHop bytecode (HHBC)
hhvm/hhbc ใช้เทคนิคการแปลโค้ดที่ต่างไปจาก virtual machine อื่นๆ ในท้องตลาด (Java และ C# ใช้ JIT ส่วนเอนจินจาวาสคริปต์อย่าง TraceMonkey ใช้วิธี trace) เทคนิคของ hhvm จะเรียบง่ายกว่า โดยเรียกว่า "tracelet" (รายละเอียดผมคงไม่ลงลึก ใครอยากรู้ก็ตามไปอ่านกันต่อเองครับ)
ตอนนี้ Facebook พัฒนา hhvm ให้มีประสิทธิภาพดีกว่า hphpi ได้แล้ว (เร็วกว่า 1.6 เท่า) แต่ยังไม่เร็วเท่ากับ hphpc (ทำงานได้ 0.6 เท่าของ hphpc) อย่างไรก็ตาม Facebook คาดว่าจะพัฒนา hhvm ให้แซง hphpc ได้ในท้ายที่สุด
นักพัฒนาของ Facebook เปลี่ยนจาก hphpi มาเป็น hhvm สำหรับงานพัฒนาภายในองค์กรกันแล้ว ซึ่ง Facebook ให้เหตุผลว่ากระบวนการแปลโค้ดที่เร็วขึ้นจากเดิม 3 วินาทีก็มีความหมายกับโปรแกรมเมอร์ของบริษัทเป็นอย่างมาก
โค้ดของ hhvm ถูกปล่อยออกมาแล้วใน GitHub ของ HipHop ใครสนใจก็ตามไปดูกันเองนะครับ
ที่มา - Facebook Engineering's Notes
Comments
แปลง php เป็น c++ แล้วมันเอาไปใช้ยังไงอ่ะ ผมงงตรงนี้แหละ
https://github.com/facebook/hiphop-php/wiki/running-hiphop
ชัดเจนดีนะ
ได้เป็น binary แล้วก็เอาไปรันบนอยู่บน web server
ชอบประโยคนี้ครับ
"กระบวนการแปลโค้ดที่เร็วขึ้นจากเดิม 3 วินาทีก็มีความหมายกับโปรแกรมเมอร์ของบริษัทเป็นอย่างมาก"
ก็องค์กร ระดับนั้น.. คงไม่แปลกที่จะต้องใส่ใจเรื่องพวกนี้มาก (O_O)"
php ก๊องๆแก๊งๆ อย่างเรา... -__-"