6 คะแนน โดย GN⁺ 2024-03-28 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • Swift เหมาะกับการสร้างส่วนติดต่อผู้ใช้ด้วยไวยากรณ์ที่สะอาด การพิมพ์แบบสแตติก และฟีเจอร์พิเศษที่ช่วยให้เขียนโค้ดได้ง่าย
  • Adwaita for Swift ใช้ประโยชน์จากความสามารถเหล่านี้ของ Swift เพื่อมอบอินเทอร์เฟซที่ใช้งานเข้าใจง่ายสำหรับการพัฒนาแอปพลิเคชันบนแพลตฟอร์ม GNOME
  • GNOME เป็นเดสก์ท็อปโอเพนซอร์สยอดนิยมสำหรับลินุกซ์ โดยเน้นความเรียบง่ายและการเข้าถึง

ตัวอย่างโค้ด

  • ในตัวอย่างโค้ดที่ใช้ Adwaita for Swift มีการกำหนดวิวชื่อ Counter เพื่อแสดงส่วนติดต่อผู้ใช้ภายในหน้าต่าง
  • วิวสามารถซ้อนอยู่ภายในวิวอื่น หรือถูกเพิ่มเป็นลูกของหน้าต่างได้ และสามารถแก้ไขเนื้อหาจากภายนอกได้ตามตำแหน่งของมันในลำดับชั้นของวิว
  • สิ่งนี้ทำให้การนำวิวต่าง ๆ มาประกอบกันเพื่อสร้างผลลัพธ์ที่หลากหลายทำได้ง่ายขึ้น

แรงจูงใจ

  • เพื่อให้สามารถเขียนแอป GNOME ด้วย Swift ได้
  • binding ของ libadwaita และ GTK แบบเดิมใช้รูปแบบการเขียนโค้ดเชิงคำสั่งที่สร้างส่วนติดต่อผู้ใช้ด้วยชุดคำสั่ง
  • Adwaita for Swift สร้างขึ้นโดยยึดข้อมูลเป็นศูนย์กลาง ดังนั้นเมื่อกดปุ่มแล้วเปลี่ยนตัวแปร count ส่วนติดต่อผู้ใช้จะอัปเดตโดยอัตโนมัติ

ความง่ายในการใช้งาน

  • binding แบบดั้งเดิมต้องเรียกฟังก์ชันบนออบเจ็กต์เพื่อให้วิดเจ็ตอัปเดตเนื้อหา ทุกครั้งที่ค่ามีการเปลี่ยนแปลง
  • Adwaita for Swift เพียงแค่เพิ่มตัวระบุเฉพาะให้กับตัวแปรที่ต้องการเก็บไว้ ที่เหลือระบบจะจัดการให้

ความสามารถในการอ่าน

  • แนวทางที่ยึดข้อมูลเป็นศูนย์กลางส่งผลดีต่อความสามารถในการอ่านโค้ด
  • ด้วยการกำหนดส่วนติดต่อผู้ใช้แบบประกาศตัวเอง ทำให้สามารถโฟกัสที่รูปลักษณ์และพฤติกรรมของแอปได้มากกว่าวิธีการที่ใช้เพื่อให้ได้ผลลัพธ์

การพัฒนาแอปข้ามแพลตฟอร์ม

  • Adwaita for Swift ช่วยให้เขียนแอปที่ทำงานได้บน Linux, macOS และ Windows จาก codebase เดียว
  • สามารถแชร์โค้ด Swift ฝั่งแบ็กเอนด์ระหว่างแอป SwiftUI และแอป GNOME ได้
  • คุณสามารถสร้างแอป GNOME ใหม่ด้วย Swift พร้อมทั้งได้ความสามารถในการอ่านโค้ดที่ยอดเยี่ยมและความปลอดภัยด้านหน่วยความจำ

การเปิดตัวแอป

  • Adwaita for Swift ทำงานร่วมกับ Flathub ได้ดี ช่วยให้การติดตั้งและการเผยแพร่แอปสำหรับเดสก์ท็อปลินุกซ์ง่ายขึ้น
  • มีส่วนขยาย Freedesktop SDK สำหรับ Swift 5 และมีเครื่องมือสำหรับแปลง dependency ของ Swift Package Manager ให้เป็นแหล่งที่มาของ Flatpak

ความเห็นของ GN⁺

  • การผสาน Swift กับ GNOME เปิดโอกาสให้นักพัฒนาสร้างแอปบนแพลตฟอร์มใหม่ โดยเฉพาะเมื่อความสามารถอันแข็งแกร่งของภาษา Swift มารวมกับสภาพแวดล้อมที่เป็นมิตรต่อผู้ใช้ของ GNOME จึงเอื้อต่อประสบการณ์การพัฒนาที่มีประสิทธิภาพ
  • บทความนี้นำเสนอแนวทางใหม่ต่อสภาพแวดล้อมเดสก์ท็อปลินุกซ์ และเน้นย้ำความสะดวกและความสามารถในการอ่านที่ได้จากการพัฒนาในสไตล์เชิงประกาศเมื่อเทียบกับวิธีเดิม
  • เน้นข้อดีของการพัฒนาข้ามแพลตฟอร์ม และชี้ให้เห็นความสำคัญของการมอบประสบการณ์ผู้ใช้แบบเดียวกันบนระบบปฏิบัติการที่หลากหลาย
  • ในแง่พื้นฐานทางเทคนิค การพิมพ์แบบสแตติกและความปลอดภัยด้านหน่วยความจำของ Swift สามารถช่วยยกระดับประสิทธิภาพและความเสถียรของแอปได้
  • ในมุมมองเชิงวิพากษ์ ควรคำนึงถึงความเป็นไปได้ของปัญหาความเข้ากันได้หรือประเด็นด้านประสิทธิภาพในเดสก์ท็อปสภาพแวดล้อมอื่นที่ไม่ใช่ GNOME

3 ความคิดเห็น

 
bbulbum 2024-03-30

https://stuff.mit.edu/afs/athena/…

การออกเสียงอย่างเป็นทางการของ GNOME ไม่ใช่ โนม แต่เป็น กะนอม

 
neoroman 2024-03-29

ยอดเยี่ยมมากครับ

 
GN⁺ 2024-03-28
ความคิดเห็นจาก Hacker News
  • การพูดคุยเกี่ยวกับแรปเปอร์ที่คล้าย SwiftUI

    • มีการกล่าวถึงแนวทางที่ให้แรปเปอร์เชิงประกาศซึ่งคล้ายกับ SwiftUI โดยมีสมมติฐานหลักคืออยากมีแรปเปอร์สไตล์ SwiftUI สำหรับความสามารถของ GNOME
    • ตัว SwiftUI เองก็ยังเผชิญกับปัญหาในช่วงเติบโต โดยเฉพาะเรื่องการประมวลผล/อัปเดตบนเธรดที่เหมาะสมและการทำ data binding ให้ถูกต้อง
    • บทความใน swift.org หรือบล็อกของ Apple โดยมากเป็นเพียงเดโมเล็ก ๆ ที่แสดงเส้นทางที่พอทำงานได้เท่านั้น เมื่อพูดถึงเฟรมเวิร์กหรือแพลตฟอร์มใหม่ ๆ ก็อยากเห็นหลักฐานมากกว่านี้ว่าผู้เขียนเข้าใจปัญหาหลัก แก้ไขได้ และจะพัฒนาต่อเนื่อง
    • เฟรมเวิร์ก UI แบบข้ามแพลตฟอร์มมักซับซ้อนขึ้นอย่างรวดเร็ว และมีปัญหาระยะยาวแบบเดียวกับ Flutter หรือ Java/Eclipse ที่อาจกลายเป็นอุปสรรคต่อผู้ใช้หรือลูกค้าได้
    • ในกรณีของ Swift สถานการณ์ยิ่งไม่ค่อยช่วย เพราะมีโมเดล concurrency หลายแบบ และพฤติกรรมบนแพลตฟอร์ม Apple กับ Linux ก็แตกต่างกันด้วย (โดยทางการแล้ว UI ยังไม่ได้รับการทดสอบ)
  • การกล่าวถึงโปรเจกต์และเครื่องมืออื่น ๆ

    • มีการให้ลิงก์ไปยังแรปเปอร์ที่คล้าย SwiftUI, Tokamak และ FlutterSwift สำหรับกรณีใช้งานแบบ embedded
  • การแบ่งปันประสบการณ์โปรเจกต์ส่วนตัว

    • มีการเล่าประสบการณ์ที่เคยเขียนโปรเจกต์เล็ก ๆ ส่วนตัวด้วย Vala และ gtk4
    • ชอบฟอร์แมตของ Blueprint แต่ติดปัญหาเพราะเอกสารเกี่ยวกับวิธีทำฟีเจอร์ที่ซับซ้อนกว่านี้มีไม่เพียงพอ
    • ชอบภาษา Vala มาก แต่คิดว่าทางเลือกที่ดีคือเขียนลอจิกและโมเดลทั้งหมดด้วย Vala แล้วใช้ไลบรารี Swift นี้กับส่วน UI
  • การเปรียบเทียบกับประสบการณ์ในอดีต

    • ให้ความรู้สึกคล้ายกับตอนเมื่อราว 20 ปีก่อนที่เคยเขียนแอป Gnome ด้วย C# โดยใช้ Mono
  • ปัญหาในการรันบน Mac

    • ลองรันบน Mac แล้วพบปัญหาว่า adwaita.h หายไป
  • ความเห็นเกี่ยวกับ "เฟรมเวิร์กในฝัน" ส่วนตัว

    • การที่มันเป็นโอเพนซอร์ส คล้าย SwiftUI และมุ่งเป้าไปที่ GTK4 ทำให้มันใกล้เคียงกับเฟรมเวิร์ก UI เดสก์ท็อปข้ามแพลตฟอร์มในฝันมาก
    • ไวยากรณ์ของ Swift อาจต้องใช้เวลาทำความคุ้นเคย แต่เมื่อเข้าใจทุกแนวคิดแล้วก็เป็นภาษาที่ใช้งานได้ดีมาก
    • เหตุผลเดียวที่ยังไม่ใช้ Swift คือการรองรับบน Linux ยังดีไม่เท่ากับบนแพลตฟอร์มของ Apple
  • คำถามเกี่ยวกับการรองรับ 3D ใน gtk4

    • มีการตั้งคำถามว่าเมื่อใช้ 3D ใน gtk4 ยังถูกจำกัดให้อยู่กับ OpenGL context เหมือนเดิมหรือไม่
  • ความเห็นเกี่ยวกับการใช้คีย์ในพารามิเตอร์ของฟังก์ชัน

    • มองว่าการนำคีย์มาใช้ในพารามิเตอร์ของฟังก์ชันเป็นความผิดพลาด
  • การพูดคุยเกี่ยวกับการทดสอบโค้ดเบส Swift

    • มีการพูดคุยถึงวิธีทดสอบโค้ดเบส Swift โดยชี้ว่าเอกสารเรื่องการทดสอบยังไม่เพียงพอ และไม่มีแนวทางสำหรับ mock, stub, reporting, code coverage เป็นต้น
    • สำหรับแอปที่ใช้ network extension จำเป็นต้องทดสอบบนอุปกรณ์จริงเท่านั้น เพราะมีข้อจำกัดด้านการเซ็นลายเซ็น
    • มีการถามว่ามีใครรู้จักบริการ CI บนอุปกรณ์จริงที่ดีและรองรับทั้งอุปกรณ์ iOS และ macOS หรือไม่
  • พบว่า Swift กำลังกลายเป็นตัวเลือกที่น่าสนใจสำหรับการพัฒนาเดสก์ท็อป

    • เพิ่งค้นพบเมื่อไม่นานมานี้ว่า Swift กำลังกลายเป็นตัวเลือกที่น่าสนใจสำหรับการพัฒนาเดสก์ท็อป นอกเหนือจากตัวอย่างนี้แล้ว ยังเพิ่ม Arc สำหรับ macOS และ Windows ด้วย