โปรเจกต์ bytecode compiler และ virtual machine ล่าสุดที่อ้างว่าพัฒนาภาษาคล้าย Forth ได้จุดประกายการอภิปรายอย่างเข้มข้นในชุมชนโปรแกรมเมอร์เกี่ยวกับสิ่งที่กำหนดแก่นแท้ของ Forth อย่างแท้จริง แม้ว่าการพัฒนาทางเทคนิคจะแสดงให้เห็นหลักการวิศวกรรมที่มั่นคง แต่นักพัฒนา Forth ที่มีประสบการณ์กำลังแสดงความกังวลเกี่ยวกับองค์ประกอบพื้นฐานที่หายไปซึ่งทำให้ Forth มีเอกลักษณ์เฉพาะตัวในหมู่ภาษาโปรแกรมมิ่ง
สภาพแวดล้อมแบบอินเทอร์แอคทีฟหายไปจากการออกแบบหลัก
การวิพากษ์วิจารณ์ที่สำคัญที่สุดมุ่งเน้นไปที่แนวทาง ahead-of-time compilation ของโปรเจกต์ ซึ่งแตกต่างจากลักษณะแบบอินเทอร์แอคทีฟแบบดั้งเดิมของ Forth อย่างพื้นฐาน สมาชิกชุมชนเน้นย้ำว่าจุดแข็งของ Forth ไม่ได้อยู่ที่ syntax หรือการดำเนินการแบบ stack-oriented แต่อยู่ที่สภาพแวดล้อมการพัฒนาแบบทันทีและอินเทอร์แอคทีฟที่โค้ดสามารถเขียน ทดสอบ และแก้ไขได้แบบเรียลไทม์
เวิร์กโฟลว์แบบอินเทอร์แอคทีฟช่วยให้นักพัฒนาสามารถทดสอบ words (ฟังก์ชัน) แต่ละตัวขณะที่เขียนมัน ทำให้การดีบักและการพัฒนามีความคล่องตัวมากขึ้น ความสามารถนี้มีค่าเป็นพิเศษในสภาพแวดล้อมที่มีทรัพยากรจำกัด ซึ่ง toolchain การพัฒนาทั้งหมดต้องพอดีกับข้อจำกัดของหน่วยความจำที่เข้มงวด
แนวทางการ Tokenization ถูกตั้งคำถาม
ผู้เชี่ยวชาญด้านเทคนิคได้ระบุปัญหาเกี่ยวกับกลยุทธ์การ tokenization ของโปรเจกต์ โดยสังเกตว่ามันพลาดวิธีที่ Forth ประมวลผล input จริงๆ ในการพัฒนา Forth แบบแท้จริง การ tokenization ถูกขับเคลื่อนโดย words เอง มากกว่า parser ที่คงที่ ตอนอย่าง เมื่อ Forth พบ word เช่น .
(ที่พิมพ์ string) word นั้นเองจะกำหนดวิธีการ parse ข้อความที่ตามมาจนกว่าจะพบ quote ปิด
ความสามารถในการ parse แบบไดนามิกนี้มีความสำคัญต่อการขยายตัวของ Forth ช่วยให้นักพัฒนาสามารถสร้าง syntax และ control structures ใหม่ที่ผสานรวมกับกลไก parsing ของภาษาได้อย่างลงตัว
ความกังวลเรื่อง Bootstrapping และการขยายตัว
อีกแง่มุมสำคัญของปรัชญา Forth ที่การพัฒนานี้มองข้ามคือแนวคิดของ bootstrapping ระบบ Forth แบบดั้งเดิมเริ่มต้นด้วยแกนหลักขั้นต่ำที่เขียนด้วยภาษา assembly แล้วสร้างทุกอย่างอื่นโดยใช้ Forth เอง แนวทางนี้ทำให้ระบบทั้งหมดโปร่งใสและสามารถแก้ไขได้โดยผู้ใช้
ระบบควรจะ bootstrap อย่างสมบูรณ์ โดยมีแกนหลักขนาดเล็กมากของ words ที่เขียนด้วย Assembly และจากนั้นทุกอย่างอื่นจะ bootstrap อย่างสมบูรณ์ใน Forth และพร้อมสำหรับการปรับแต่ง
แนวทางการคอมไพล์แบบคงที่ในการพัฒนาที่กล่าวถึงป้องกันการขยายตัวแบบ runtime ประเภทนี้ จำกัดผู้ใช้ให้ใช้ชุดฟีเจอร์ภาษาที่กำหนดไว้ล่วงหน้า แทนที่จะอนุญาตให้พวกเขาขยายและแก้ไขภาษาเอง
คุณสมบัติสำคัญของ Forth ที่ขาดหายไปจากการใช้งาน:
- สภาพแวดล้อมการพัฒนาแบบโต้ตอบ
- การแบ่งโทเค็นแบบขับเคลื่อนด้วยคำแบบไดนามิก
- ความสามารถในการขยายและการบูตสแตรปในขณะรันไทม์
- การดำเนินการในโหมดทันที
- การกำหนดคำตามพจนานุกรม
คุณค่าทางการศึกษาแม้จะมีข้อจำกัด
แม้ว่าการพัฒนานี้อาจไม่ได้จับจิตวิญญาณที่แท้จริงของ Forth แต่สมาชิกชุมชนยอมรับคุณค่าทางการศึกษาสำหรับการทำความเข้าใจการเขียนโปรแกรมแบบ stack-oriented และการออกแบบ virtual machine โปรเจกต์นี้แสดงให้เห็นการสร้าง bytecode การจัดการ stack และแนวคิด control flow พื้นฐานที่เป็นรากฐานของการพัฒนาภาษาโปรแกรมมิ่งหลายภาษา
ฟีเจอร์การแสดงภาพที่รวมอยู่ในโปรเจกต์ยังให้ข้อมูลเชิงลึกที่เป็นประโยชน์เกี่ยวกับวิธีการทำงานของภาษาแบบ stack-based ทำให้แนวคิดที่เป็นนามธรรมเป็นรูปธรรมมากขึ้นสำหรับผู้เรียน
การดำเนินการ Bytecode ที่ได้รับการพัฒนา:
lit
- ผลักค่าตัวอักษรเข้าสู่ stackload
/store
- การดำเนินการหน่วยความจำadd
/mul
/div
- การดำเนินการทางคณิตศาสตร์jump
/jumpe
- การควบคุมการไหลของโปรแกรมreturn
- การดำเนินการ return stackprint
- การดำเนินการแสดงผล
บทสรุป
การถกเถียงนี้เน้นให้เห็นความแตกต่างที่สำคัญระหว่างการพัฒนาฟีเจอร์พื้นผิวของ Forth และการจับปรัชญาพื้นฐานของมัน แม้ว่าการดำเนินการทางเทคนิคของ bytecode compiler จะแสดงทักษะการเขียนโปรแกรมที่มีความสามารถ แต่มันทำหน้าที่เป็นภาษาแบบ stack-based ที่ได้แรงบันดาลใจจาก Forth มากกว่าการพัฒนา Forth ที่แท้จริง สำหรับนักพัฒนาที่สนใจเข้าใจหลักการ Forth ที่แท้จริง ชุมชนแนะนำให้ศึกษาการพัฒนาแบบอินเทอร์แอคทีฟที่รักษาลักษณะไดนามิกและขยายตัวได้ของภาษา
อ้างอิง: Compiling a Forth