แรงจูงใจเบื้องหลัง J2ObjC

J2ObjC เริ่มออกตัวด้วยความหงุดหงิด ทีมพัฒนาหลายทีมต้องพยายามปรับปรุงผลิตภัณฑ์บนเว็บและอุปกรณ์เคลื่อนที่อย่างรวดเร็วโดยที่ไม่แยกฟังก์ชันการทำงาน ผลิตภัณฑ์ไคลเอ็นต์หลายรายการของ Google สร้างขึ้นโดยใช้ GWT สำหรับเว็บแอป (ปัจจุบันคือ J2CL) และ Android API สำหรับอุปกรณ์เคลื่อนที่ Android วิธีนี้ทำให้แอป iPod/iPad ใช้งานได้ ซึ่งต้องเป็นเว็บแอป JavaScript หรือเขียนด้วยลายมือใน Objective-C แม้ว่าแอป GWT และแอป Android จะแชร์โค้ดตรรกะทางธุรกิจ (ไม่ใช่ UI) ได้ แต่การแชร์โค้ดดังกล่าวกับแอป iOS นั้นไม่มีวิธีแก้ปัญหาใดๆ

เราได้ดำเนินการตรวจสอบหลายวิธีเพื่อแก้ไขปัญหานี้ XMLVM ดูน่าสนใจมาก แต่ในช่วงเวลาหน้านักแปล iOS ระบุว่าโปรเจ็กต์ถูกระงับ (ตอนนี้ใช้งานได้อีกครั้งและเป็นทางเลือกที่ดีสำหรับโปรเจ็กต์นี้) เครื่องมือแปลอื่นๆ ทำการแปลงโค้ดแบบครั้งเดียว ซึ่งจำเป็นต้องมีการแก้ไขเพิ่มเติมก่อนที่เอาต์พุตจะสร้างและเรียกใช้ได้สำเร็จแล้ว

เกิดโครงการใหม่

ในตอนแรก วิศวกรหลายคนคิดว่านักแปลอย่าง J2ObjC เป็นไปไม่ได้ การสร้างเครื่องมือที่สามารถแปลโค้ดของแอปพลิเคชัน Java ทั้งหมดเป็น iOS ได้อย่างถูกต้องแม่นยำ รวมทั้งยังคงรักษาอรรถรสของมันไว้ได้อย่างสมบูรณ์นั้นเป็นเรื่องที่เป็นไปไม่ได้เลยจริงๆ นั่นเป็นเพราะ iOS มีมาตรฐานการออกแบบอินเทอร์เฟซผู้ใช้ที่เข้มงวด และผู้ใช้จึงตระหนักดีว่าแอปไม่เป็นไปตามหลักเกณฑ์นี้ ในความคิดของเรา วิธีเดียวที่จะได้รับ UI ของ iOS ที่รวดเร็วระดับโลกคือการเขียนใน Objective-C โดยใช้เฟรมเวิร์ก iOS SDK ของ Apple

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

  • รองรับเฉพาะการพัฒนาฝั่งไคลเอ็นต์ สามารถแปลเครื่องมือบรรทัดคำสั่งและโค้ดเซิร์ฟเวอร์ในทฤษฎีได้ แต่กรณีการใช้งานดังกล่าวน่าจะมีปัญหาที่ไม่ได้แก้ไขโดย J2ObjC
  • รองรับเฉพาะโค้ดตรรกะทางธุรกิจและอยู่ห่างไกลจาก API อินเทอร์เฟซผู้ใช้ (เช่นที่แผนที่เก่าๆ เคยมีในมุมรอบด้าน "ที่นี่มีสัตว์ประหลาด")
  • ต้องใช้เฟรมเวิร์ก พื้นฐาน iOS ไม่ใช่พื้นฐานทั่วไป
  • ใช้เครื่องมือของ Xcode เพื่อตรวจสอบประสิทธิภาพและการใช้หน่วยความจำที่ยอมรับได้ หลังจากนำแนวทางปฏิบัติที่ดีที่สุดของ Apple มาใช้ในการจัดการหน่วยความจำ
  • มุ่งเน้นเฉพาะสิ่งที่นักพัฒนาแอปพลิเคชัน ต้องการมากกว่าที่จำเป็นต่อความสมบูรณ์ ความต้องการของแอปพลิเคชันจริง ขับเคลื่อนข้อกำหนดของโปรเจ็กต์

เราคิดว่ามีประโยชน์ คุณอาจจะชอบเหมือนกัน

เราทำให้ J2ObjC เป็นโอเพนซอร์ส เนื่องจากโครงการภายในบางโครงการพบว่าสามารถแก้ปัญหาการแชร์ตรรกะทางธุรกิจของ Java กับแอป iOS ของตนได้ มีหลายทีมที่อาศัยนักแปลอยู่ในขณะนี้ และเรากำลังเพิ่มฟังก์ชันการทำงานใหม่ๆ และแก้ไขข้อบกพร่องจำนวนมาก เรายินดีต้อนรับทีมแอปบนอุปกรณ์เคลื่อนที่อื่นๆ มาลองใช้ และแจ้งให้เราทราบว่าสิ่งใดใช้ได้ผลและสิ่งใดควรปรับปรุง

เราถือว่าการทำโปรเจ็กต์นี้เป็นผลตอบแทนที่คุ้มค่า งานที่ยากที่สุด 2 อย่างสำหรับโปรแกรมแปลภาษา Java คือ 1) แยกวิเคราะห์อย่างถูกต้อง พิมพ์ ตรวจสอบและค้นหาแหล่งที่มาของ Java และ 2) จัดเตรียมสภาพแวดล้อมรันไทม์ของ Java ที่เป็นไปตามข้อกำหนด คอมไพเลอร์ Javac จัดการงานแรกได้ดีและสภาพแวดล้อมรันไทม์ (รวมถึงการทดสอบ 1 หน่วย) จะอิงตามไลบรารี Android libcore และปล่อยให้ความสนุกของเราเหลือแค่การเปลี่ยนโครงสร้างไวยากรณ์เชิงนามธรรมและสร้างเอาต์พุตของต้นฉบับที่แก้ไขข้อบกพร่องได้ง่าย หากคุณสนใจเครื่องมือหรือคอมไพเลอร์ Java เชิญเข้าร่วมกับเรา! เรายังมีสิ่งที่ต้องทำอีกมากมาย และเรายินดีอย่างยิ่งในความช่วยเหลือ