← กลับไปยังบทความทั้งหมด

ทำความรู้จัก PureScript ภาษาโปรแกรมเชิงฟังก์ชันที่ทรงพลัง

สรุปใจความสำคัญ

  • เป็นภาษาโปรแกรมเชิงฟังก์ชันที่แปลงเป็น JavaScript และภาษาอื่นๆ ได้
  • ใช้กลยุทธ์การประเมินผลแบบ Strict Evaluation ซึ่งต่างจาก Haskell
  • รองรับ Type-Driven Development ผ่านฟีเจอร์ Typed Holes
  • เป็นซอฟต์แวร์โอเพนซอร์สภายใต้ใบอนุญาต BSD 3-clause

PureScript คือภาษาโปรแกรมเชิงฟังก์ชัน (Purely Functional Programming Language) ที่มีการกำหนดชนิดข้อมูลอย่างเข้มงวด (Strongly Typed) โดยมีความสามารถในการแปลงรหัส (Transpile) ไปเป็น JavaScript และยังสามารถแปลงเป็น C++11, Erlang และ Go ได้ผ่านทาง Backend อื่นๆ

คุณสมบัติเด่นของ PureScript

PureScript ถูกออกแบบมาเพื่อให้นักพัฒนาสามารถสร้างแอปพลิเคชันเว็บ, แอปพลิเคชันฝั่งเซิร์ฟเวอร์ และแอปพลิเคชันเดสก์ท็อป (ผ่าน Electron หรือคอมไพเลอร์ C++11 และ Go) โดยมีไวยากรณ์ที่คล้ายคลึงกับภาษา Haskell อย่างมาก

จุดเด่นทางเทคนิค

  • การประเมินผลแบบเข้มงวด (Strict Evaluation): ต่างจาก Haskell ที่ใช้การประเมินผลแบบ Lazy, PureScript ใช้กลยุทธ์การประเมินผลแบบ Strict ซึ่งทำให้การคาดเดาประสิทธิภาพและการทำงานของโปรแกรมทำได้ง่ายขึ้น
  • Row Polymorphism และ Extensible Records: เพิ่มความยืดหยุ่นในการจัดการข้อมูลแบบโครงสร้าง
  • ระบบชนิดข้อมูล (Type System): รองรับ Algebraic Data Types, Pattern Matching, Higher Kinded Types, Type Classes และ Higher-Rank Polymorphism
  • การอนุมานชนิดข้อมูล (Type Inference): ช่วยให้เขียนโค้ดได้กระชับโดยที่ยังคงความปลอดภัยของชนิดข้อมูล

ประวัติความเป็นมา

PureScript ถูกออกแบบครั้งแรกโดย Phil Freeman ในปี 2013 เนื่องจากเขาไม่พอใจกับความพยายามในการแปลง Haskell ไปเป็น JavaScript ในยุคนั้น (เช่น Fay, Haste หรือ GHCJS) ต่อมา PureScript ได้รับการยอมรับจากชุมชนนักพัฒนาและมีการพัฒนาอย่างต่อเนื่องบน GitHub

เครื่องมือสำคัญที่พัฒนาโดยชุมชน ได้แก่ Pulp (เครื่องมือสำหรับ Build), Pursuit (เครื่องมือสำหรับจัดการเอกสาร) และ Spago (ตัวจัดการแพ็กเกจ)

การพัฒนาและเครื่องมือสนับสนุน

PureScript ให้ความสำคัญกับการสร้างโค้ดที่อ่านง่าย และมี Foreign Function Interface (FFI) ที่ช่วยให้สามารถนำโค้ดเดิมใน JavaScript, C++11 และ Go มาใช้งานร่วมกันได้

นอกจากนี้ยังรองรับ Incremental Compilation และมีปลั๊กอินสำหรับโปรแกรมแก้ไขข้อความยอดนิยม เช่น Vim, Emacs, Sublime Text, Atom และ Visual Studio Code เพื่อช่วยให้การพัฒนารวดเร็วและมีประสิทธิภาพยิ่งขึ้น

การพัฒนาโดยใช้ชนิดข้อมูลนำทาง (Type-Driven Development)

ฟีเจอร์ Typed Holes ช่วยให้นักพัฒนาสามารถสร้างโปรแกรมโดยเว้นช่องว่างในส่วนที่ยังเขียนไม่เสร็จไว้ได้ จากนั้นคอมไพเลอร์จะช่วยอนุมานชนิดข้อมูลของส่วนที่ขาดหายไปและแจ้งให้ผู้ใช้ทราบ ซึ่งฟีเจอร์นี้เป็นแรงบันดาลใจให้กับ Glasgow Haskell Compiler (GHC) ในเวลาต่อมา

คำถามที่พบบ่อย

PureScript ต่างจาก Haskell อย่างไร?

แม้ว่าจะมีไวยากรณ์คล้ายกัน แต่ PureScript ใช้การประเมินผลแบบ Strict (เข้มงวด) ในขณะที่ Haskell ใช้การประเมินผลแบบ Lazy (ขี้เกียจ) และ PureScript ถูกออกแบบมาเพื่อแปลงเป็น JavaScript เป็นหลัก

PureScript สามารถนำไปใช้พัฒนาอะไรได้บ้าง?

สามารถใช้พัฒนาเว็บแอปพลิเคชัน, แอปพลิเคชันฝั่งเซิร์ฟเวอร์ และแอปพลิเคชันเดสก์ท็อป (ผ่าน Electron หรือ C++11/Go)

PureScript มีเครื่องมือจัดการแพ็กเกจชื่อว่าอะไร?

ตัวจัดการแพ็กเกจของ PureScript คือ Spago