สรุปได้ดังนี้

  • ตั้งแต่ Xcode 10 เป็นต้นมา incremental build ทำงานในระดับไฟล์โดยอิงตาม llbuild

  • ใน build log ของ Xcode อาจดูเหมือนไม่มีความแตกต่าง แต่ระบบจะวิเคราะห์ dependency เปรียบเทียบค่า interface hash และสร้างไฟล์ออบเจ็กต์ .o ขึ้นมา แน่นอนว่าหากส่วน implementation เปลี่ยนก็จะสร้างใหม่

  • หากค่า interface hash ของซอร์สไฟล์อื่นที่มี dependency เท่ากัน ไฟล์ออบเจ็กต์จะไม่ถูกสร้าง

  • สามารถตรวจสอบข้อมูล dependency ของไฟล์ Swift ได้จากไฟล์ .swiftdeps

  • ระบบจะสร้าง partial ของ swiftmodule แยกตามระดับไฟล์ไว้ก่อน แล้วตอนลิงก์จึงรวมทั้งโมดูลเข้าด้วยกัน

  • ไม่เหมือนกับกรณี Java Gradle build ที่แม้จะแยกด้วย ISP ก็ไม่ได้หมายความว่าจะแยกเป็น interface และ build เฉพาะไฟล์ที่มีการเปลี่ยนแปลงเท่านั้น

  • ตอนคอมไพล์ซอร์สไฟล์ Swift ไฟล์ที่ส่วน implementation เปลี่ยนจะถูกคอมไพล์ใหม่ แต่เนื่องจากการตรวจสอบ dependency จะเน้นที่ส่วน declaration จึงจะ build ใหม่เฉพาะกรณีที่มีการพึ่งพาไฟล์ซึ่ง declaration เปลี่ยนเท่านั้น

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น