[WWDC20] Swift มีอะไรใหม่ที่น่าสนใจบ้าง? (Part1)

Suchai Fooanant
CREATIVE ME
Published in
3 min readJun 28, 2020

หลังจากได้เริ่มดู WWDC20 ของปีนี้ บอกเลยว่า ว้าว! ทั้ง วิดีโอแบบใหม่ ที่สั้นกระชับ ทั้งเรื่อง production สวยงามมากๆ ดูแล้วเพลิน แต่ด้วยมันเยอะมาก เป็น 100+ sessions ครั้งนี้ก็เลย อยากมาสรุปให้เพื่อนๆ รวมถึงตัวเองเข้าใจให้มากขึ้น ในบางตัวที่น่าสนใจ 🤓

รอบนี้เป็นการสรุปจาก What’s new in Swift และบาง session มารวมกันบ้าง ขาดตกตรงไหน เพื่อนๆคนไหน ว่างๆ เรามาช่วยกันสรุปให้ community ไทยเราโต
สู้ต่างประเทศเค้าด้วยกันนะ 🙋🏼‍♂️🌟

โอเคมาเริ่มกันกันเลย ว่ามีอะไรกันบ้างที่น่าสนใจ ขอแบ่งเป็น 2 Part เพื่อให้สั้นๆ กระชับ อ่านแล้วใช้เวลาไม่เยอะ 😅

Reduce Code Size

Apple ได้มีการ Optimize เรื่องขนาดของแอพอยู่ ในทุกๆ release อยู่แล้ว
แน่นอนครั้งนี้ก็มีการปรับปรุงให้ ขนาดของ binary เล็กลงไปอีก!

จาก Benchmark ทาง Apple ได้ทำมา เริ่มด้วย Swift 4.0 ขนาดของ Code Size
เมื่อเทียบกับ Objective-C จะอยู่ที่ประมาณ 2.3 เท่า แต่ล่าสุดปัจจุบัน Swift 5.3 ความต่างจะลดเหลือแค่ 1.5 เท่า ! ซึ่งก็ได้มีการลดขนาดไปได้เยอะกว่าเดิมมาก

ด้านของ SwiftUI

ทีนี้มาดูกันที่ SwiftUI กันบ้าง ด้านนี้จะมีการ Optimize ที่ไม่น้อยหน้ากันเลยแหล่ะ
ยกตัวอย่างจาก MovieSwiftUI ที่ Xcode 12 สามารถลดขนาดลงไปได้ถึง 43% !!

Dirty memory usage improved

หัวข้อนี้ค่อนข้างลง Deep down ลงไปในการทำงานภายในของ Swift ผมขอสรุปสั้นๆละกันเนอะ

ยกตัวอย่างด้วย Model ที่ถูกสร้างด้วย Struct ซึ่งเป็นการใช้ value type เก็บไว้ใน Array สักหนึ่งตัว ถ้าเป็น reference type ทั่วไป ในตัว Array เองจะต้องเก็บ Reference Pointer เพื่อชี้ไปยัง model object นั้นๆ อีกที

ถ้าเราใช้ Struct ตัว Array จะสามารถ allocate ไว้ในตัวมันเองได้เลย ทำให้ได้ผลลัพธ์ทางด้าน Memory ที่ดีกว่านั้นเอง

ยกตัวอย่าง ถ้าเป็น Objective-C ในการสร้าง 400 model objects จะต้องใช้ 35kB แต่ถ้าเปลี่ยนเป็น Struct เราจะสามารถลดได้เหลือเพียง 20kB เท่านั้น!

ที่พูดมาทั้งหมด ไม่ได้เกี่ยวอะไรกับ Swift 5.3 นะ เป็นแค่การเปรียบเทียบของ Use case ที่ใช้งานเฉยๆ

ส่วนที่มัน improve ขึ้นมาจริงๆ คือ Runtime Overhead ที่ลดไปมหาศาลตะหาก (ก็ใน Session เค้าเล่ามายาว ขอเล่าไปด้วยละกัน ได้ทวนความเข้าใจด้วย 🤣)

Overhead ที่ลดลงมาแบบมหาศาล แซงหน้า Objective-C ไปเลย

New diagnostics subsystem in the Swift compiler

มีการพัฒนาให้สามารถเจาะจง Error และบอกวิธีการแก้ไขได้แม่นยำมากขึ้น โดยรายละเอียดเพิ่มเติมทั้งหมดดูได้จาก https://swift.org/blog/new-diagnostic-arch-overview/ ไว้จะมาสรุปให้อีกทีนะ ยาวมาก 😅

แต่โดยรวม ก็คือการเพิ่มความสามารถให้ Compiler สามารถแสดง Error และวิธีการแก้ไข ได้อย่างแม่นยำมากขึ้น :)

Code Completion Improvement

ในที่สุดดดดดดดด เป็น pain in the ass มากๆ สำหรับ Swift developer ทุกคนที่ใช้ Xcode คือมันจะช้าไปไหน ยิ่งโปรเจ็คใหญ่ๆ มัน suggestion มาไม่ทันที่มือเราพิมพ์ด้วยซ้ำ 😣

Improved type-checking inference

เพิ่มความสามารถในการ suggest ค่าใน dictionary และ ternary operator ได้ดีมากขึ้น ยกตัวอย่างเช่น

Suggestion แบบนี้จะเวิร์คแล้ว หลังจาก Swift 5.3 เป็นต้นไป

15x Code Completion Speed Improvement !!

ไม่อยากจะเชื่อ ฉันฝันไปรึเปล่า​ ฮ่าๆๆๆๆๆ เมื่อเทียบกับ Xcode 11.5 สามารถแสดง Code Completion ได้เร็วขึ้นถึง 15 เท่า เจอข้อนี้ไป ทุกคนแทบอยากจะอัพเลยใช่มั้ยล่ะ ?

Code Indentation

อ่าห์ ปัญหาการจัด Indent ที่มันดูขัดๆตา จาก Chaining จาก if, guard และอื่นๆ ก็ได้มีการพัฒนาให้มันสามารถ จัดบรรทัดได้สวยงามแล้วนะ

Cross Platform Support

ต่อไปเราเขียน Swift ก็จะไปได้ในทุกๆ Platform แล้วนะ ตอนนี้ล่าสุด Official Support ได้แก่

  • Apple platforms (iOS, macOS, iPadOS, อื่นๆ)
  • Ubuntu 16.04, 18.04, 20.04
  • CentOS 8
  • Amazon Linux 2
  • Windows (กำลังตามมา !)

ที่น่าสนใจเพิ่มขึ้นมาอีกคือ Support กับ AWS Lambda (Serverless) อันนี้คือดีงาม ทำให้เราสามารถ deploy ขึ้นไปอยู่บน Serverless ได้ โดยใช้ Swift AWS Lambda Runtime ซึ่งเป็น 100% Open Source ใช้งานง่ายมากๆ !

Language & Libraries

มีการอัพเดททั้งตัวภาษาเองและ Libraries ที่มาใช้งานเพิ่ม เพียบ ซึ่งแต่ละตัว เด็ดๆทั้งนั้น

รายชื่อ Feature ที่อัพเดทเข้ามาใน Swift 5.3

พวกนี้ จะช่วยให้การเขียน Swift ของเรา สนุกขึ้นอีกเยอะ รวมถึงเพิ่มความสามารถของภาษาเอง ให้ไม่น้อยหน้าชาว Modern programming language อื่นๆ อย่าง Kotlin หรืออื่นๆ กันเลย (ทั้งที่ Kotlin ก็เหมือนจะเลียนแบบ Swift มาแท้ๆ 🤣)

ไว้เดี๋ยว Part 2 จะมาเล่าว่า แต่ละ feature มีอะไรบ้าง แล้วเข้ามาช่วยแก้ไขปัญหา รวมถึง ช่วยเรา ทำให้เขียนโปรแกรมได้ดีขึ้นยังไงได้บ้าง ไว้เจอกันครับผม 🎉

ปล. ถ้ามี comment หรือผิดพลาดตรงไหน บอกได้เลยน้า อยากได้ๆ 🥰

--

--