8 คะแนน โดย GN⁺ 2024-03-07 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 2024-03-07
ความคิดเห็นบน Hacker News
  • ชอบแนวคิดของ “ภาษาเพื่อการทดลองทางความคิด”

    • การสร้างภาษาจริงขึ้นมานั้นเป็นภาระใหญ่ และการจินตนาการว่าภาษาในอุดมคติจะหน้าตาเป็นอย่างไรก็สนุกดี
    • มีจินตนาการหลากหลายเกี่ยวกับ “Rust ระดับสูง” และโดยส่วนตัวชอบรันไทม์แบบไดนามิกกับชนิดข้อมูลที่เรียบง่าย แต่คนอื่นก็มีความต้องการต่างกัน
    • ฟีเจอร์เสริมอย่างระบบชนิดข้อมูลแบบค่อยเป็นค่อยไปอาจเหมาะกับบางภาษา แต่ก็ชอบการรับประกันของโค้ดเบสที่เป็น static type อย่างสมบูรณ์ตั้งแต่แรกมากกว่า
  • คำถามเกี่ยวกับตัวอย่าง “Hello, Dada!”

    • ในฐานะผู้ใช้ Python สงสัยว่าทำไมต้องใส่ใจกับ await เมื่อต้องการเพียงพิมพ์ข้อความออกคอนโซล
    • ดูเหมือนว่าความซับซ้อนและภาระในการทำความเข้าใจก็เริ่มขึ้นตั้งแต่ตรงนี้แล้ว
  • ความต้องการภาษาที่อยู่คนละขั้ว

    • ต้องการภาษาที่มีระบบชนิดข้อมูลและไวยากรณ์ที่แสดงพลังแบบ Rust แต่มี garbage collector และรันไทม์เข้ามาด้วย
    • ไม่อยากจ่ายต้นทุนด้านประสิทธิภาพ และชอบภาษาที่เหมือน Go แต่มีระบบชนิดข้อมูลแบบ Rust
  • ความเห็นคัดค้านเกี่ยวกับ "async/await"

    • มองว่าในภาษาระดับสูง green thread แบบ Go น่าจะเหมาะกว่า
    • gradual typing น่าสนใจ แต่ไม่ถึงกับจำเป็น static typing ไม่ได้เป็นภาระ และแบบแรกอาจทำให้การคาดเดาเรื่องประสิทธิภาพยากขึ้น
    • คิดว่าการอนุมานชนิดข้อมูลน่าจะดีกว่า gradual typing
  • ความเห็นเรื่องความรู้สึกคล้าย Java และ JavaScript

    • ชี้ว่า Java กับ JavaScript ให้ความรู้สึกต่างกันมาก
  • การไม่มี GC ทำให้ Rust เป็นประสบการณ์ที่น่าใช้ในระบบฝังตัว

    • เชื่อมต่อกับโปรแกรมอื่นได้ง่าย และการเริ่มทำงานได้รวดเร็วของโปรแกรมเป็นหนึ่งในข้อดีสำคัญของ Rust
    • ถ้า Rust ใส่ garbage collection เข้ามา ก็อาจเท่ากับต้องยอมทิ้งข้อดีนี้ไป
  • ความรู้สึกปนกันเกี่ยวกับประสบการณ์ใช้ Rust

    • ชอบแพตเทิร์นด้าน memory safety แต่รู้สึกว่าไวยากรณ์อ่านยากกว่า C++
    • รู้สึกว่าอ่านโค้ดในหัวตามได้ยาก
    • ถ้ามีเวทมนตร์แบบ decorator และไวยากรณ์ที่อิงสัญลักษณ์น้อยลง มือใหม่ก็น่าจะเข้าใจได้ง่ายขึ้น
  • สนใจคำกล่าวอ้างที่ว่าถ้าเพิ่ม type annotation ก็จะได้ประสิทธิภาพใกล้เคียง Rust

    • อยากได้ภาษาที่เขียนง่ายเหมือน JavaScript และเร็วได้เท่า Rust เมื่อมีเหตุผลมากพอให้คุ้มกับการลงแรงเพิ่ม
  • ความสับสนเกี่ยวกับเมธอด print_point ในบทสอน

    • ต้องการคำอธิบายเพิ่มเติมเกี่ยวกับความหมายของ async และ await
    • ตั้งคำถามว่า async/await ทำหน้าที่คล้ายค่าที่ถูกคำนวณแบบ lazy หรือไม่ และการผสมรูปแบบต่าง ๆ จะทำให้เกิด type error หรือไม่
  • ความไม่พอใจในการหาตัวอย่างไวยากรณ์ของภาษาโปรแกรมใหม่

    • ขอให้เมื่อสร้างภาษาโปรแกรมใหม่ ควรใส่ตัวอย่างไวยากรณ์แบบ “Hello World” ไว้บนหน้าแรกทันที