หน้าแรก ดูโปรเจกต์ทั้งหมด
Easy

โปรเจกต์ Juniper: Functional Reactive Programming Language

Juniper คือ Functional Reactive Programming Language ใหม่สำหรับ Arduino ซึ่งช่วยให้การ coding ง่ายขึ้นอย่างมาก

โปรเจกต์ Juniper: Functional Reactive Programming Language

วิดีโอสาธิต

Video

▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์

PS

Project Supporter Team

โพสต์โดย

Louis Ades (Contributor), Samuel Z. Guyer (Contributor)
6,994 ถูกใจ

รายการอุปกรณ์และเครื่องมือ

รายละเอียดและวิธีทำ

Introduction

http://www.juniper-lang.org/

Juniper เป็นภาษาเขียนโปรแกรมเชิงฟังก์ชันแบบตอบสนอง (Functional Reactive Programming) ที่พัฒนาขึ้นที่มหาวิทยาลัย Tufts โดย Caleb Helbling และ Louis Ades โปรเจกต์นี้ได้รับการพัฒนาขึ้นสำหรับวิชา Senior Design ภาควิชาวิทยาการคอมพิวเตอร์ ระยะเวลา 1 ปี โดยมี ดร. Samuel Guyer เป็นที่ปรึกษาและเมนเทอร์ งานนำเสนอของเขาในปี 2015 เป็นจุดเริ่มต้นของโปรเจกต์นี้:

Juniper เป็นภาษาเขียนโปรแกรมเชิงฟังก์ชันแบบตอบสนอง (FRP) ที่มุ่งเป้าไปที่ Arduino และระบบ Microcontroller ที่เกี่ยวข้อง Juniper มีคุณสมบัติระดับสูงมากมาย รวมถึง Parametric Polymorphic Functions, Anonymous Functions, การจัดการหน่วยความจำอัตโนมัติ (Automatic Memory Management) และโครงสร้างข้อมูลแบบแก้ไขไม่ได้ (Immutable Data Structures) นอกจากนี้ยังมี Standard Library ที่มีฟังก์ชันการประมวลผลสัญญาณ (Signal Processing) ของ FRP ที่เป็นประโยชน์มากมาย Juniper จะถูกแปลงเป็นภาษา C++ มาตรฐาน และถูกคอมไพล์ด้วยเครื่องมือพัฒนาของ Arduino ที่มีอยู่เดิม ทำให้โปรแกรมของ Juniper สามารถทำงานบนอุปกรณ์ที่มีทรัพยากรจำกัด (Resource-constrained devices) ได้ และช่วยให้ทำงานร่วมกับไลบรารี C++ เดิมสำหรับอุปกรณ์เหล่านี้ได้อย่างไร้รอยต่อ

บทความวิจัยเกี่ยวกับภาษา Juniper ได้รับการตีพิมพ์ในงาน ACM SIGPLAN International Workshop on Functional Art, Music, Modelling and Design (FARM) และมีการนำเสนองานในเดือนกันยายนที่งาน International Conference on Functional Programming (ICFP) ในเมืองนารา ประเทศญี่ปุ่น ปัจจุบันบทความวิจัยและคำบรรยายมีอยู่บนเว็บไซต์ของ Juniper แล้ว:

http://www.juniper-lang.org/publications/juniper_farm_preprint.pdf

Video

บทความวิจัยและงานนำเสนอนี้ได้ให้ข้อสังเกตที่สำคัญเกี่ยวกับสถานะปัจจุบันของการเขียนโปรแกรม Arduino ไว้ดังนี้:

  • ฟังก์ชันที่ใช้ delay() ไม่สามารถนำมาประกอบกัน (Compose) ได้
  • การรวมกิจกรรมที่ทำงานพร้อมกัน (Concurrent activities) ด้วยสไตล์การเขียนโค้ด Arduino ในปัจจุบันจำเป็นต้องมีการจัดการตารางเวลา (Scheduling) ที่ชัดเจน ซึ่งส่งผลให้เกิดภาระทางความคิดอย่างมาก (Cognitive overhead) สำหรับโปรแกรมเมอร์
  • โปรแกรมที่มีความซับซ้อนพอสมควรสำหรับ Arduino จะประกอบด้วยตัวจัดการเหตุการณ์แบบเฉพาะหน้า (Ad hoc event scheduler) และ Finite State Machine(s)
  • สไตล์การเขียนโปรแกรม Arduino ในปัจจุบันทำให้ยากต่อการแยกตรรกะด้านเวลา (Event scheduler logic) ออกจากโค้ดส่วนที่เหลือ ซึ่งนำไปสู่ปัญหาที่เลวร้ายอย่าง "Spaghetti code" ได้อย่างรวดเร็ว

นี่คือส่วนหนึ่งที่น่าสนใจจากบทความวิจัย:

ในบทความนี้เราขอนำเสนอภาษาใหม่ชื่อว่า Juniper สำหรับการเขียนโปรแกรม Arduino และ Microcontroller ที่คล้ายกัน เราใช้ข้อสังเกตที่ว่าโปรแกรม Arduino จำนวนมากเป็นแบบตอบสนอง (Reactive): คือมีการตอบสนองต่อสัญญาณที่เข้ามา ประมวลผลสัญญาณเหล่านั้น และสร้างสัญญาณเอาต์พุตใหม่ออกมา การใช้สภาพแวดล้อม C++ ที่มีอยู่ทำให้โปรแกรมเหล่านี้กลายเป็นโค้ดแบบ “Spaghetti” ได้อย่างรวดเร็ว ซึ่งขาดความเป็นโมดูล (Modularity) และทำความเข้าใจได้ยาก Juniper แก้ปัญหานี้โดยใช้ Functional Reactive Programming (FRP) ใน FRP โปรแกรมจะตอบสนองต่อเหตุการณ์โดยการส่งต่อค่าไปตามสัญญาณ (Signals) หรือพฤติกรรม (Behaviors) ในกราฟแบบระบุทิศทาง (Directed graph) สัญญาณและพฤติกรรมสามารถมองได้ว่าเป็นค่าที่เปลี่ยนแปลงตามเวลาในโปรแกรม โหนด (Nodes) ในกราฟระบุทิศทางจะแทนฟังก์ชันที่จับคู่สัญญาณเข้ากับสัญญาณใหม่ ส่วนต่างๆ ของกราฟสัญญาณที่เป็นอิสระต่อกันสามารถทำงานแบบอะซิงโครนัส (Asynchronously) ได้ ซึ่งช่วยให้เกิดการทำงานแบบขนาน (Concurrency) ได้โดยไม่ต้องมีภาระงานเพิ่มเติมสำหรับโปรแกรมเมอร์ ฟังก์ชันลำดับสูง (Higher-order functions) เช่น map, fold และ filter ช่วยเพิ่มพลังในการแสดงผล (Expressive power) และการนำกลับมาใช้ใหม่ได้อีกระดับ

Conclusions

คอมไพล์เลอร์ (Compiler) และเอกสารการใช้งาน (Documentation) มีให้บริการแล้วบนเว็บไซต์ของ Juniper: http://www.juniper-lang.org/

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: juniper-a-functional-reactive-programming-language-7edff1
99 บาท
PromptPay QR Code

Verified user reviews

รีวิวและความคิดเห็นจากผู้ใช้จริง

ล็อกอินด้วยบัญชีบนเว็บนี้แล้วให้คะแนนหรือคอมเมนต์ได้เลย ระบบเก็บผ่าน Supabase ไม่ต้องใช้ GitHub แล้ว

กำลังโหลดรีวิว...