Swift Interpreter ของ Bitrig ก่อให้เกิดคำถามเกี่ยวกับนโยบาย App Store แม้จะได้รับการอนุมัติแล้ว

ทีมชุมชน BigGo
Swift Interpreter ของ Bitrig ก่อให้เกิดคำถามเกี่ยวกับนโยบาย App Store แม้จะได้รับการอนุมัติแล้ว

Bitrig แอปพลิเคชัน iOS ที่สร้างและรันแอปพลิเคชัน Swift แบบไดนามิกบน iPhone ได้จุดประกายการอภิปรายอย่างมากเกี่ยวกับนโยบาย App Store ของ Apple และขอบเขตของสิ่งที่เป็นไปได้ทางเทคนิคบนอุปกรณ์ iOS แอปนี้ใช้ Swift interpreter ที่เป็นนวัตกรรมใหม่ที่ช่วยให้ผู้ใช้สามารถรันโค้ดที่สร้างแบบไดนามิกได้โดยไม่ต้องผ่านการคอมไพล์แบบดั้งเดิม ทำให้เกิดคำถามเกี่ยวกับจุดยืนที่เข้มงวดในอดีตของ Apple เรื่องโค้ดที่สามารถเรียกใช้งานได้

ความกังวลเรื่องนโยบาย App Store ขับเคลื่อนการอภิปรายในชุมชน

การอภิปรายที่ร้อนแรงที่สุดมุ่งเน้นไปที่แนวทางของ App Store ของ Apple โดยเฉพาะมาตรา 2.5.2 ซึ่งในอดีตห้ามไม่ให้แอปดาวน์โหลดหรือเรียกใช้โค้ดที่เปลี่ยนแปลงการทำงาน สมาชิกในชุมชนแสดงความประหลาดใจที่ Bitrig ได้รับการอนุมัติ เนื่องจากข้อจำกัดเหล่านี้ การอภิปรายเผยให้เห็นว่านโยบายของ Apple ได้พัฒนาไปอย่างไรนับตั้งแต่ Swift Playgrounds เปิดตัว โดยบริษัทตอนนี้อนุญาตให้เครื่องมือการศึกษาและการพัฒนามีความยืดหยุ่นมากขึ้น

แน่นอนว่ามีการไปมาอย่างแน่นอนก่อนที่เราจะได้รับการอนุมัติในที่สุด ในแง่หนึ่ง สิ่งนี้ไม่ได้แตกต่างจากสิ่งที่ React Native ทำมากนัก (รันโค้ดที่แปลความหมายแล้วเรียกใช้โค้ดดั้งเดิม) แค่ใช้ Swift แทน JavaScript

การอนุมัติแสดงให้เห็นว่า Apple กำลังผ่อนปรนมากขึ้นกับเครื่องมือการพัฒนา ดังที่เห็นได้จากแอปเขียนโค้ดอื่นๆ เช่น Python IDEs และ Jupyter Notebooks ที่ตอนนี้มีใน App Store อย่างไรก็ตาม สมาชิกในชุมชนสังเกตว่าข้อยกเว้นนี้ใช้กับเครื่องมือการพัฒนาโดยเฉพาะ ไม่ใช่แอปผู้บริโภคทั่วไป

การอ้างอิงนโยบาย App Store

  • มาตรา 2.5.2 ของ App Review Guidelines โดยปกติจะห้ามการดาวน์โหลดหรือการรันโค้ดที่เปลี่ยนแปลงฟังก์ชันการทำงานของแอป
  • แอปเพื่อการศึกษาและการพัฒนามีข้อยกเว้นจำกัดสำหรับโค้ดที่สามารถรันได้
  • การอนุมัติล่าสุดรวมถึง Python IDEs , Jupyter Notebooks และสภาพแวดล้อมการเขียนโค้ดอื่น ๆ

การใช้งานทางเทคนิคจุดประกายการอภิปราย

แนวทางที่ผิดปกติของ interpreter - การแปลความหมาย Swift เป็น Swift แทนที่จะเป็นโค้ดเครื่อง - ได้สร้างการอภิปรายทางเทคนิคเกี่ยวกับสิ่งที่ถือเป็นการแปลความหมายที่แท้จริงเมื่อเทียบกับการคอมไพล์ นักพัฒนาบางคนชี้ให้เห็นว่า Swift มีความสามารถ REPL (Read-Eval-Print Loop) อยู่แล้วผ่านเครื่องมือบรรทัดคำสั่ง โดยตั้งคำถามว่าสิ่งนี้เป็นการพัฒนาที่แท้จริงในการแปลความหมาย Swift หรือไม่

ความแตกต่างที่สำคัญอยู่ที่แพลตฟอร์มเป้าหมาย ในขณะที่ Swift บนเดสก์ท็อปสามารถใช้การคอมไพล์ Just-In-Time ข้อจำกัดด้านความปลอดภัยของ iOS ป้องกันการสร้างโค้ดที่เรียกใช้งานได้แบบกำหนดเอง Bitrig แก้ปัญหานี้โดยการแยกวิเคราะห์ไวยากรณ์ Swift และแมปไปยังการเรียกใช้เฟรมเวิร์กระบบที่คอมไพล์ไว้แล้ว โดยทำหน้าที่เป็นอินเทอร์เฟซที่ซับซ้อนระหว่างโค้ดไดนามิกและไลบรารีที่คอมไพล์แล้ว

ภาพรวมสถาปัตยกรรมทางเทคนิค

  • ใช้ SwiftSyntax ในการแยกวิเคราะห์โค้ด Swift เป็น abstract syntax trees
  • จับคู่การเรียกใช้ Swift แบบไดนามิกกับฟังก์ชันเฟรมเวิร์กที่คอมไพล์แล้ว
  • รองรับทั้ง SwiftUI และ UIKit ผ่านการแยกวิเคราะห์ไฟล์ .swiftinterface
  • ทำหน้าที่เป็น "foreign function interface ที่ปรับปรุงแล้ว" จาก Swift แบบไดนามิกไปยัง Swift ที่คอมไพล์แล้ว

ประสิทธิภาพและการประยุกต์ใช้งานจริง

ความสนใจของชุมชนขยายไปเกินกว่าความแปลกใหม่ทางเทคนิคไปสู่การประยุกต์ใช้งานจริง นักพัฒนาตื่นเต้นเป็นพิเศษเกี่ยวกับการใช้งานที่เป็นไปได้สำหรับ hot module replacement - การอัปเดต SwiftUI views ในแอปที่ทำงานอยู่โดยไม่ต้องรีสตาร์ท สิ่งนี้อาจปรับปรุงประสบการณ์การพัฒนาสำหรับแอป iOS ได้อย่างมาก

การอภิปรายเรื่องประสิทธิภาพเผยให้เห็นข้อจำกัดและจุดแข็งของ interpreter แม้ว่าจะมี overhead จาก type erasure และ indirection แต่โค้ด UI ส่วนใหญ่เพียงแค่เรียกใช้เฟรมเวิร์ก OS ที่คอมไพล์แล้ว ดังนั้นผลกระทบต่อประสิทธิภาพจึงยังคงน้อยสำหรับแอปพลิเคชันทั่วไป ปัญหาเกิดขึ้นเป็นหลักกับลูปที่ใช้การคำนวณมากภายในโค้ดที่แปลความหมายเอง

ลักษณะด้านประสิทธิภาพ

  • โอเวอร์เฮดจาก type erasure และการเพิ่ม indirection
  • ผลกระทบน้อยมากสำหรับโค้ด UI ทั่วไปที่เรียกใช้ framework ของ OS ที่คอมไพล์แล้ว
  • ปัญหาประสิทธิภาพส่วนใหญ่เกิดขึ้นกับลูปที่ใช้การคำนวณมากในโค้ดที่ตีความ
  • งานหนักส่วนใหญ่ทำโดย system framework ที่คอมไพล์แล้ว

การขยายแพลตฟอร์มและการพัฒนาในอนาคต

ชุมชนแสดงความสนใจอย่างมากในการรองรับ iPad และความพร้อมใช้งานของแพลตฟอร์มที่กว้างขึ้น ทีมงานที่อยู่เบื้องหลัง Bitrig ดูเหมือนจะตอบสนองต่อข้อเสนอแนะ โดยมีการแก้ไขปัญหาความเข้ากันได้ของเบราว์เซอร์อย่างรวดเร็วและเปิดกว้างต่อการสำรวจฟีเจอร์เพิ่มเติม เช่น การรวม Jupyter kernel

โปรเจกต์นี้แสดงให้เห็นจุดตัดที่น่าสนใจของทฤษฎีภาษา ข้อจำกัดของแพลตฟอร์มมือถือ และเครื่องมือนักพัฒนา แม้ว่าอาจจะไม่ปฏิวัติการพัฒนา iOS ในชั่วข้ามคืน แต่ก็แสดงให้เห็นถึงโซลูชันที่สร้างสรรค์สำหรับข้อจำกัดของแพลตฟอร์มและบ่งบอกถึงความเป็นไปได้ที่พัฒนาไปสำหรับการเรียกใช้โค้ดไดนามิกบนแพลตฟอร์มที่มีข้อจำกัดแบบดั้งเดิม

อ้างอิง: How we built an interpreter for Swift (a compiled language)