5/2/2009
คอมไพล์เลอร์คือตัวแปลงภาษา ซึ่งโดยทั่วไปหมายถึงการแปลภาษาระดับสูงไปเป็นภาษาระดับต่ำ
โดยที่ในระหว่างขบวนการนี้เอง สิ่งที่เกิดจริงๆคือการละทิ้งข้อมูลระดับ Abstraction ตัวอย่างเช่นคำสั่ง
for, while หรือแม้แค่เงื่อนไข if then else ก็จะไม่มีอีกต่อไปในภาษาระดับต่ำ
คำถามมีอยู่ว่าเป็นไปได้หรือไม่ที่จะสร้างกระบวนการย้อนกลับ ผมจะไม่ใช้คำว่า Decompiler เนื่องจาก
โดยทั่วไปหมายถึงการแปลงภาษาเครื่องให้กลับเป็นภาษาระดับสูง แต่ information หรือ abstraction บางอย่างจะหายไป
โดยที่เราไม่สามารถกู้คืนมาได้โดยง่าย
ยกตัวอย่างเช่นการคอมไพล์โค้ดของฟังก์ชันคำนวณภาษีมูลค่าเพิ่ม 7% เมื่อถูกแปลงเป็นภาษาเครื่อง
ในมุมมองของเรา “มนุษย์” เรามีบริบทแวดล้อมที่สามารถบอกเราได้ว่าลักษณะโครงสร้างแบบนี้มีไว้
เพื่อคำนวณอัตราส่วนร้อยละ และ 7 อาจจะหมายถึง 7% ซึ่งเมื่อรวมเข้ากับความรู้ที่ว่าโค้ดนี้เป็นผลลัพธ์ของ
การคอมไพล์ตัวคำนวณภาษี เราสามารถรู้ได้ว่าจริงๆแล้ว “abstraction” ของชุด instruction นี้มีไว้คำนวณภาษี
แต่การทำแบบนี้ด้วยโปรแกรมนั้น ไม่ง่าย คำถามมีอยู่ว่าเป็นไปได้หรือไม่ที่จากสร้างกระบวนการที่เปลง concrete instruction
ให้กลับเป็น abstraction เหมือนเดิมและสามารถให้เหตุผลกับ abstraction นั้นได้อย่างถูกต้อง โดยกำหนด
บริบทเริ่มต้นให้ เช่น โปรแกรมอะไร มีอินพุทอะไร เอาพุทอะไร
ซึ่งถ้าเราสามารถทำได้ดังนี้ความสามารถในการเข้าใจตัวเองของคอมพิวเตอร์ก็จะไม่ถูกกำจัดอีกต่อไป…