ทำไมเรา port Ash Framework สู่ 14 ภาษา
Ash Framework เป็น declarative application framework ของ Elixir ที่ให้คุณนิยาม resource ครั้งเดียว แล้วได้ actions, filtering, authorization, multitenancy, JSON:API และ GraphQL ตามมาโดยอัตโนมัติ เราที่ Anndream ใช้ Ash มาหลายปี และพบว่ามันเปลี่ยนวิธีที่เราคิดเรื่อง data layer ไปเลย
คำถามที่ตามมาคือ: ถ้า Ash ดีขนาดนี้ ทำไมภาษาอื่นจะไม่ได้ประโยชน์แบบเดียวกัน? คำตอบของเราคือ — ลองพอร์ตมันดู สิ่งที่เกิดขึ้นคือชุดโปรเจกต์Ashlar ที่ตอนนี้มี 14 ภาษาโปรแกรมมิ่ง
ทำไมต้องพอร์ต ไม่ใช่แค่เขียนใหม่
ทางเลือกแรกคือเขียน framework ของตัวเองตั้งแต่ศูนย์ แต่นั่นหมายถึงต้องตอบคำถาม เดิมทั้งหมดอีกครั้ง — validation, changesets, authorization, data layer Ash ใช้เวลาหลายปีในการตกผลึกคำตอบเหล่านั้น การพอร์ตช่วยให้เราสืบทอดการออกแบบที่พิสูจน์แล้ว และโฟกัสที่ความท้าทายที่แท้จริง: ทำอย่างไรให้แนวคิดแบบ declarative ทำงานได้ดีในภาษาเป้าหมาย
- โครงสร้างโมดูล map กับ
lib/ashของ Elixir แบบ 1:1 - เอกสาร spec แยกเป็นโฟลเดอร์ของตัวเองในทุก repo
- ตัวอย่างแอปจริง (blog, todo) ให้เห็นภาพการใช้งาน
ภาษาที่รองรับ
ตอนนี้ Ashlar ครอบคลุมตั้งแต่ระบบ language ยอดนิยมไปจนถึงภาษาที่กำลังเติบโต: Rust, Go, Python, TypeScript, Kotlin, C#, PHP (Laravel), Clojure, Crystal, Swift, Nim, Zig, Gleam และ F#
แต่ละ repo มีลักษณะเฉพาะของตัวเอง — Rust ใช้ Cargo workspace, Kotlin เป็น Gradle multi-module, Laravel เป็น composer package, TypeScript เป็น pnpm monorepo — แต่แกนกลางคือการออกแบบเดียวกัน
บทเรียนที่ได้
สิ่งที่น่าสนใจที่สุดคือภาษาแต่ละภาษาบังคับให้เราคิดต่างกัน Rust สอนเราเรื่อง ownership กับ error handling, Go สอนเรื่อง simplicity, ส่วน Clojure สอนเรื่อง data-first design การพอร์ต 14 ครั้งทำให้เราเห็นชัดว่าแนวคิดใดของ Ash เป็นแก่นจริง และแนวคิดใดเป็นแค่ artifact ของ Elixir
Declarative resource model ไม่ใช่ฟีเจอร์ของภาษา — มันคือวิธีคิด ที่ควรมีในทุกภาษา
ทุก repo เป็น open source และเอกสาร spec ของแต่ละภาษาอยู่ในโฟลเดอร์*-docs ของ repo นั้น ดูรายละเอียดได้ที่หน้าOpen Source บนเว็บนี้