- Dada เป็นการทดลองทางความคิด (thought experiment) ที่มีเป้าหมายจะสร้างภาษาแบบเดียวกับ Rust แต่ให้ความรู้สึกเหมือน Java หรือ JavaScript และมีความซับซ้อนน้อยกว่า C++
- หากจินตนาการถึงภาษาที่ไม่ได้มุ่งเป้าไปใช้กับเคอร์เนลหรืออุปกรณ์ฝังตัวขนาดเล็ก แต่ต้องการรันไทม์เพียงเล็กน้อย มันจะมีหน้าตาเป็นอย่างไร?
- Dada เป็นภาษาที่อิงกับ ownership และมีความคล้ายกับ Rust อยู่หลายจุด:
- เช่นเดียวกับ Rust, Dada ไม่ต้องใช้ garbage collector
- เช่นเดียวกับ Rust, Dada รับประกัน memory safety และการไม่มี data race
- เช่นเดียวกับ Rust, โครงสร้างข้อมูลของ Dada ถูกจัดสรรบนสแตกและใช้ flat memory layout
- แต่ Dada ก็มีความแตกต่างอยู่มากเช่นกัน:
- เช่นเดียวกับ TypeScript, Dada เป็นภาษาแบบ ค่อยเป็นค่อยไปทางด้านการกำหนดชนิดข้อมูล:
- สามารถใช้ Dada ในอินเทอร์พรีเตอร์โดยไม่ต้องใส่ type annotation เพื่อทำความเข้าใจวิธีการทำงานของภาษาได้
- เมื่อคุ้นเคยแล้ว ก็สามารถเพิ่ม type annotation และใช้คอมไพเลอร์ที่ให้ประสิทธิภาพใกล้เคียง Rust ได้
- Dada มุ่งเป้าไปที่ WebAssembly เป็นหลัก:
- แม้จะสามารถบิลด์ Dada ไปยัง native target ได้ แต่ระบบ FFI นั้นอิงกับ WebAssembly interface types
- Dada มีความเป็นเชิงวัตถุ แต่ไม่ใช่ในรูปแบบบริสุทธิ์:
- Dada ผสานแนวคิด OO เข้ากับฟีเจอร์ที่ดีอย่าง pattern matching โดยได้แรงบันดาลใจจากภาษาอย่าง Scala
- เมื่อเทียบกับ Rust, Dada มีข้อจำกัดบางประการ:
- Dada มีรันไทม์ที่จำเป็นต้องใช้ และไม่ได้มุ่งเป้าไปที่ "ระบบ bare metal" หรือเคอร์เนล
- Dada ไม่รองรับ inline assembly หรือโค้ด unsafe ตามอำเภอใจ
สถานะปัจจุบันของ Dada คืออะไร?
- ตอนนี้ Dada ยังไม่มีอยู่จริง และมีเพียงต้นแบบเชิงทดลองบางส่วน:
- สามารถดู operational semantics เชิงทดลองที่เขียนด้วย PLT Redex ได้ใน dada-lang/dada-model
- อินเทอร์พรีเตอร์ที่เขียนด้วย Rust สามารถดูได้ในรีโพซิทอรี dada-lang/dada และสามารถลองบิลด์ที่อิง WebAssembly ได้ใน Dada playground
ความเห็นของ GN⁺
- Dada สะท้อนเทรนด์ของภาษาโปรแกรมยุคใหม่ โดยยังคงคุณสมบัติแกนหลักของ Rust เช่น memory safety และการป้องกัน data race ขณะเดียวกันก็พยายามเป็นภาษาที่เป็นมิตรกับนักพัฒนามากขึ้นผ่านการกำหนดชนิดข้อมูลแบบค่อยเป็นค่อยไปและแนวทางเชิงวัตถุ
- การเลือก WebAssembly เป็นเป้าหมายหลักแสดงให้เห็นถึงศักยภาพของ Dada ในการพัฒนาแอปพลิเคชันบนเว็บ ซึ่งสอดคล้องกับเทรนด์เว็บยุคใหม่ที่ให้ความสำคัญกับความเข้ากันได้กับเบราว์เซอร์และความเป็นอิสระจากแพลตฟอร์ม
- หาก Dada ถูกพัฒนาจริงและถูกใช้งานอย่างแพร่หลาย ก็อาจมอบ abstraction ระดับสูงและความสะดวกมากขึ้นให้กับนักพัฒนา Rust เดิม และช่วยให้นักพัฒนา Java หรือ JavaScript เปลี่ยนผ่านสู่ภาษาสำหรับ system programming ได้ง่ายขึ้น
- อย่างไรก็ตาม เนื่องจาก Dada ยังอยู่ในระยะเริ่มต้นและยังไม่ได้รับการพิสูจน์ด้านประสิทธิภาพและเสถียรภาพในสภาพแวดล้อม production จริง องค์กรและนักพัฒนาจึงควรใช้ความระมัดระวังก่อนนำไปใช้งาน
- ภาษาอื่นที่มีเป้าหมายคล้ายกับ Dada ได้แก่ Kotlin หรือ Swift ซึ่งถูกใช้งานอย่างแพร่หลายอยู่แล้วและอาจเป็นทางเลือกที่ดีสำหรับนักพัฒนา
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ชอบแนวคิดของ “ภาษาเพื่อการทดลองทางความคิด”
คำถามเกี่ยวกับตัวอย่าง “Hello, Dada!”
awaitเมื่อต้องการเพียงพิมพ์ข้อความออกคอนโซลความต้องการภาษาที่อยู่คนละขั้ว
ความเห็นคัดค้านเกี่ยวกับ "async/await"
ความเห็นเรื่องความรู้สึกคล้าย Java และ JavaScript
การไม่มี GC ทำให้ Rust เป็นประสบการณ์ที่น่าใช้ในระบบฝังตัว
ความรู้สึกปนกันเกี่ยวกับประสบการณ์ใช้ Rust
สนใจคำกล่าวอ้างที่ว่าถ้าเพิ่ม type annotation ก็จะได้ประสิทธิภาพใกล้เคียง Rust
ความสับสนเกี่ยวกับเมธอด
print_pointในบทสอนasyncและawaitasync/awaitทำหน้าที่คล้ายค่าที่ถูกคำนวณแบบ lazy หรือไม่ และการผสมรูปแบบต่าง ๆ จะทำให้เกิด type error หรือไม่ความไม่พอใจในการหาตัวอย่างไวยากรณ์ของภาษาโปรแกรมใหม่