มีภาษาการเขียนโปรแกรม Dart 2.15 และเฟรมเวิร์ก Flutter 2.8

Google ได้เผยแพร่การเปิดตัวภาษาการเขียนโปรแกรม Dart 2.15 ซึ่งยังคงพัฒนาสาขาที่ออกแบบใหม่อย่างรุนแรงของ Dart 2 ซึ่งแตกต่างจากภาษา Dart เวอร์ชันดั้งเดิมโดยใช้การพิมพ์แบบคงที่ที่แข็งแกร่ง (ประเภทสามารถอนุมานได้โดยอัตโนมัติดังนั้น ไม่จำเป็นต้องระบุประเภท แต่การพิมพ์แบบไดนามิกจะไม่ถูกใช้อีกต่อไป และในขั้นต้นจะคำนวณประเภทที่กำหนดให้กับตัวแปร และใช้การตรวจสอบประเภทที่เข้มงวดในภายหลัง)

คุณสมบัติของภาษา Dart:

  • ไวยากรณ์ที่คุ้นเคยและเรียนรู้ได้ง่าย เป็นธรรมชาติสำหรับโปรแกรมเมอร์ JavaScript, C และ Java
  • รับประกันการเปิดใช้งานที่รวดเร็วและประสิทธิภาพสูงสำหรับเว็บเบราว์เซอร์สมัยใหม่และสภาพแวดล้อมประเภทต่างๆ ตั้งแต่อุปกรณ์พกพาไปจนถึงเซิร์ฟเวอร์ที่ทรงพลัง
  • ความสามารถในการกำหนดคลาสและอินเทอร์เฟซที่อนุญาตให้มีการห่อหุ้มและนำวิธีการและข้อมูลที่มีอยู่กลับมาใช้ใหม่
  • การระบุประเภทช่วยให้แก้ไขจุดบกพร่องและระบุข้อผิดพลาดได้ง่ายขึ้น ทำให้โค้ดชัดเจนขึ้นและอ่านง่ายขึ้น และทำให้การแก้ไขและการวิเคราะห์ง่ายขึ้นโดยนักพัฒนาบุคคลที่สาม
  • ประเภทที่รองรับ ได้แก่ แฮชประเภทต่างๆ อาร์เรย์และรายการ คิว ประเภทตัวเลขและสตริง ประเภทสำหรับกำหนดวันที่และเวลา นิพจน์ทั่วไป (RegExp) สามารถสร้างประเภทของคุณเองได้
  • ในการจัดระเบียบการดำเนินการแบบขนาน ขอเสนอให้ใช้คลาสที่มีแอตทริบิวต์ isolate ซึ่งโค้ดจะถูกดำเนินการทั้งหมดในพื้นที่แยกในพื้นที่หน่วยความจำแยกต่างหาก โดยโต้ตอบกับกระบวนการหลักโดยการส่งข้อความ
  • รองรับการใช้ไลบรารีที่ทำให้การสนับสนุนและการดีบักโครงการเว็บขนาดใหญ่ง่ายขึ้น การใช้งานฟังก์ชันของบุคคลที่สามสามารถรวมไว้ในรูปแบบของไลบรารีที่ใช้ร่วมกันได้ แอปพลิเคชันสามารถแบ่งออกเป็นส่วนๆ และมอบหมายให้ทีมโปรแกรมเมอร์แยกกันในการพัฒนาแต่ละส่วน
  • ชุดเครื่องมือสำเร็จรูปเพื่อรองรับการพัฒนาในภาษา Dart รวมถึงการใช้งานการพัฒนาแบบไดนามิกและเครื่องมือแก้ไขจุดบกพร่องพร้อมการแก้ไขโค้ดได้ทันที (“แก้ไขและดำเนินการต่อ”)
  • เพื่อให้การพัฒนาในภาษา Dart ง่ายขึ้น มันมาพร้อมกับ SDK, Pub Manager แพ็คเกจ, ตัววิเคราะห์โค้ดคงที่ dart_analyzer, ชุดไลบรารี, สภาพแวดล้อมการพัฒนาแบบรวม DartPad และปลั๊กอินที่เปิดใช้งาน Dart สำหรับ IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 และเป็นกลุ่ม
  • แพ็คเกจเพิ่มเติมพร้อมไลบรารีและยูทิลิตี้มีการแจกจ่ายผ่านพื้นที่เก็บข้อมูลผับซึ่งมีแพ็คเกจประมาณ 22 แพ็คเกจ

การเปลี่ยนแปลงที่สำคัญใน Dart 2.15:

  • จัดเตรียมเครื่องมือสำหรับการดำเนินงานแบบขนานอย่างรวดเร็วพร้อมการแยกตัวจัดการ บนระบบมัลติคอร์ รันไทม์ Dart จะรันโค้ดแอปพลิเคชันบน CPU คอร์หนึ่งตามค่าเริ่มต้น และใช้คอร์อื่นเพื่อดำเนินงานของระบบ เช่น I/O แบบอะซิงโครนัส การเขียนลงไฟล์ หรือการโทรผ่านเครือข่าย สำหรับแอปพลิเคชันที่ต้องการรันตัวจัดการในแบบคู่ขนาน เช่น เพื่อแสดงภาพเคลื่อนไหวในอินเทอร์เฟซ เป็นไปได้ที่จะเปิดบล็อกโค้ดแยกกัน (แยก) แยกออกจากกัน และดำเนินการบนคอร์ CPU อื่นๆ พร้อมกันกับเธรดแอปพลิเคชันหลัก . เพื่อป้องกันข้อผิดพลาดที่เกิดขึ้นเมื่อเรียกใช้โค้ดพร้อมกันซึ่งทำงานกับชุดข้อมูลเดียวกัน ห้ามแชร์อ็อบเจ็กต์ที่ไม่แน่นอนในบล็อกแยกที่แตกต่างกัน และใช้โมเดลการส่งข้อความเพื่อการโต้ตอบระหว่างตัวจัดการ

    Dart 2.15 แนะนำแนวคิดใหม่ - กลุ่มบล็อกแบบแยก (กลุ่มแยก) ซึ่งช่วยให้คุณสามารถจัดระเบียบการเข้าถึงร่วมกันไปยังโครงสร้างข้อมูลภายในต่างๆ ในบล็อกแยกที่เป็นส่วนหนึ่งของกลุ่มเดียวกัน ซึ่งสามารถลดค่าใช้จ่ายได้อย่างมากเมื่อโต้ตอบระหว่างตัวจัดการในกลุ่ม . ตัวอย่างเช่น การเปิดตัวบล็อกแยกเพิ่มเติมในกลุ่มที่มีอยู่จะเร็วขึ้น 100 เท่าและต้องใช้หน่วยความจำน้อยกว่าการเปิดตัวบล็อกแยกแยก 10-100 เท่า เนื่องจากไม่จำเป็นต้องเริ่มต้นโครงสร้างข้อมูลโปรแกรม

    แม้ว่าการแยกบล็อกในกลุ่มยังคงห้ามการเข้าถึงออบเจ็กต์ที่ไม่แน่นอนร่วมกัน แต่กลุ่มต่างๆ จะใช้หน่วยความจำฮีปที่ใช้ร่วมกัน ซึ่งสามารถเร่งความเร็วในการถ่ายโอนออบเจ็กต์จากบล็อกหนึ่งไปยังอีกบล็อกหนึ่งได้อย่างมาก โดยไม่จำเป็นต้องดำเนินการคัดลอกที่ต้องใช้ทรัพยากรมาก เวอร์ชันใหม่ยังช่วยให้คุณส่งผลลัพธ์ของตัวจัดการเมื่อเรียก Isolate.exit() เพื่อถ่ายโอนข้อมูลไปยังบล็อกแยกหลักโดยไม่ต้องทำการคัดลอก นอกจากนี้ กลไกการส่งข้อความยังได้รับการปรับให้เหมาะสม - ข้อความขนาดเล็กและขนาดกลางได้รับการประมวลผลเร็วขึ้นประมาณ 8 เท่า ออบเจ็กต์ที่สามารถส่งผ่านระหว่างไอโซเลทได้โดยใช้การเรียก SendPort.send() รวมถึงฟังก์ชันบางประเภท การปิด และการติดตามสแต็ก

  • ในเครื่องมือสำหรับการสร้างพอยน์เตอร์ไปยังแต่ละฟังก์ชันในออบเจ็กต์อื่น (การฉีกขาด) ข้อจำกัดในการสร้างพอยน์เตอร์ที่คล้ายกันในโค้ดคอนสตรัคเตอร์ได้ถูกลบออก ซึ่งจะเป็นประโยชน์เมื่อสร้างอินเทอร์เฟซตามไลบรารี Flutter ตัวอย่างเช่น หากต้องการสร้างวิดเจ็ตคอลัมน์ที่มีวิดเจ็ตข้อความหลายรายการ คุณสามารถเรียก ".map()" และส่งพอยน์เตอร์ไปยังตัวสร้าง Text.new ของออบเจ็กต์ข้อความ: คลาส FruitWidget ขยาย StatelessWidget { @override Widget build(BuildContext context) { คอลัมน์ส่งคืน ( ลูก ๆ: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • ความเป็นไปได้ที่เกี่ยวข้องกับการใช้พอยน์เตอร์ฟังก์ชันได้รับการขยายออกไป เพิ่มความสามารถในการใช้วิธีการทั่วไปและตัวชี้ฟังก์ชันเพื่อสร้างวิธีการและตัวชี้ที่ไม่ใช่แบบทั่วไป: T id (ค่า T) => ค่า; var intId = ไอดี ; // อนุญาตในเวอร์ชัน 2.15 แทน "int Function(int) intId = id;" const สำหรับ = id; // ตัวชี้ไปยังรหัสฟังก์ชัน const c1 = สำหรับ ;
  • ไลบรารี dart:core ได้ปรับปรุงการรองรับ enums เช่น ตอนนี้คุณสามารถส่งออกค่าสตริงจากค่า enum แต่ละค่าโดยใช้เมธอด ".name" เลือกค่าตามชื่อ หรือจับคู่คู่ของค่า: enum MyEnum { one , สอง, สาม } เป็นโมฆะ main() { พิมพ์ (MyEnum.one.name); // "หนึ่ง" จะถูกพิมพ์ พิมพ์ (MyEnum.values.byName('สอง') == MyEnum.two); // "จริง" จะถูกพิมพ์ แผนที่สุดท้าย = MyEnum.values.asNameMap(); พิมพ์ (แผนที่ ['สาม'] == MyEnum.three); // "จริง". }
  • เทคนิคการบีบอัดพอยน์เตอร์ถูกนำมาใช้ซึ่งช่วยให้สามารถใช้การแสดงพอยน์เตอร์ที่กะทัดรัดยิ่งขึ้นในสภาพแวดล้อม 64 บิต หากพื้นที่ที่อยู่ 32 บิตเพียงพอสำหรับการกำหนดแอดเดรส (ใช้หน่วยความจำไม่เกิน 4 GB) การทดสอบแสดงให้เห็นว่าการปรับให้เหมาะสมดังกล่าวทำให้สามารถลดขนาดฮีปได้ประมาณ 10% ใน Flutter SDK โหมดใหม่จะถูกเปิดใช้งานสำหรับ Android ตามค่าเริ่มต้นแล้ว และมีแผนที่จะเปิดใช้งานสำหรับ iOS ในรุ่นอนาคต
  • Dart SDK มีเครื่องมือสำหรับการดีบักและการวิเคราะห์ประสิทธิภาพ (DevTools) ซึ่งก่อนหน้านี้มีให้ในแพ็คเกจแยกต่างหาก
  • มีการเพิ่มเครื่องมือในคำสั่ง “dart pub” และที่เก็บแพ็คเกจ pub.dev เพื่อติดตามการเผยแพร่ข้อมูลที่เป็นความลับโดยไม่ได้ตั้งใจ เช่น การทิ้งข้อมูลรับรองสำหรับระบบบูรณาการอย่างต่อเนื่องและสภาพแวดล้อมคลาวด์ภายในแพ็คเกจ หากตรวจพบการรั่วไหลดังกล่าว การดำเนินการของคำสั่ง “dart pub publish” จะถูกขัดจังหวะพร้อมกับข้อความแสดงข้อผิดพลาด หากมีผลบวกลวง คุณสามารถข้ามเช็คผ่านไวท์ลิสต์ได้
  • มีการเพิ่มความสามารถในการเพิกถอนเวอร์ชันที่เผยแพร่แล้วของแพ็คเกจไปยังพื้นที่เก็บข้อมูล pub.dev เช่น หากพบข้อผิดพลาดหรือช่องโหว่ที่เป็นอันตราย ก่อนหน้านี้การแก้ไขดังกล่าวแนวปฏิบัติคือการเผยแพร่เวอร์ชันแก้ไข แต่ในบางสถานการณ์จำเป็นต้องยกเลิกการเผยแพร่ที่มีอยู่และหยุดการเผยแพร่เพิ่มเติมอย่างเร่งด่วน (เช่นหากการแก้ไขยังไม่พร้อมหรือหากเผยแพร่ฉบับเต็ม เผยแพร่โดยไม่ได้ตั้งใจแทนที่จะเป็นเวอร์ชันทดสอบ) หลังจากการเพิกถอน แพ็กเกจจะไม่ถูกระบุในคำสั่ง "pub get" และ "pub update" อีกต่อไป และบนระบบที่ติดตั้งไว้แล้ว จะมีการออกคำเตือนพิเศษในครั้งถัดไปที่ดำเนินการ "pub get"
  • เพิ่มการป้องกันช่องโหว่ (CVE-2021-22567) ที่เกิดจากการใช้อักขระ Unicode ในโค้ดที่เปลี่ยนลำดับการแสดงผล
  • แก้ไขช่องโหว่ (CVE-2021-22568) ที่อนุญาตให้คุณปลอมตัวเป็นผู้ใช้ pub.dev รายอื่นเมื่อเผยแพร่แพ็คเกจไปยังเซิร์ฟเวอร์บุคคลที่สามที่ยอมรับโทเค็นการเข้าถึง pub.dev oauth2 ตัวอย่างเช่น ช่องโหว่สามารถใช้เพื่อโจมตีเซิร์ฟเวอร์แพ็คเกจภายในและองค์กรได้ นักพัฒนาที่โฮสต์แพ็คเกจบน pub.dev เท่านั้นจะไม่ได้รับผลกระทบจากปัญหานี้

ในเวลาเดียวกัน ได้มีการนำเสนอเฟรมเวิร์กอินเทอร์เฟซผู้ใช้ Flutter 2.8 รุ่นสำคัญ ซึ่งถือเป็นทางเลือกแทน React Native และอนุญาตให้เผยแพร่แอปพลิเคชันสำหรับ iOS, Android, Windows, macOS และตามฐานโค้ดเดียว แพลตฟอร์ม Linux รวมถึงสร้างแอปพลิเคชันให้ทำงานในเบราว์เซอร์ เชลล์แบบกำหนดเองสำหรับระบบปฏิบัติการไมโครเคอร์เนล Fuchsia ที่พัฒนาโดย Google นั้นสร้างขึ้นบนพื้นฐานของ Flutter มีข้อสังเกตว่าในช่วงหกเดือนที่ผ่านมาจำนวนแอปพลิเคชัน Flutter 2 ใน Google Play Store เพิ่มขึ้นจาก 200 เป็น 375 นั่นคือ เกือบสองครั้ง

ส่วนหลักของโค้ด Flutter ถูกนำไปใช้ในภาษา Dart และเอ็นจิ้นรันไทม์สำหรับการเรียกใช้งานแอปพลิเคชันเขียนด้วยภาษา C ++ เมื่อพัฒนาแอปพลิเคชัน นอกเหนือจากภาษา Dart ดั้งเดิมของ Flutter แล้ว คุณสามารถใช้อินเทอร์เฟซ Dart Foreign Function เพื่อเรียกโค้ด C/C++ ได้ ประสิทธิภาพการดำเนินการระดับสูงทำได้โดยการรวบรวมแอปพลิเคชันเป็นโค้ดเนทีฟสำหรับแพลตฟอร์มเป้าหมาย ในกรณีนี้ ไม่จำเป็นต้องคอมไพล์โปรแกรมใหม่หลังการเปลี่ยนแปลงแต่ละครั้ง - Dart มีโหมด hot reload ที่ให้คุณทำการเปลี่ยนแปลงกับแอปพลิเคชันที่รันอยู่และประเมินผลลัพธ์ได้ทันที

ท่ามกลางการเปลี่ยนแปลงใน Flutter รุ่นใหม่ มีการบันทึกการปรับความเร็วการเปิดตัวและการใช้หน่วยความจำบนอุปกรณ์มือถือให้เหมาะสม การเชื่อมต่อแอปกับบริการแบ็กเอนด์เช่น Firebase และ Google Cloud ง่ายกว่า เครื่องมือสำหรับการผสานรวมกับ Google Ads มีความเสถียร การรองรับกล้องและปลั๊กอินของเว็บได้รับการปรับปรุงอย่างมาก มีการเสนอเครื่องมือใหม่เพื่อทำให้การพัฒนาง่ายขึ้น เช่น เพิ่มวิดเจ็ตสำหรับการตรวจสอบสิทธิ์โดยใช้ Firebase Flame engine ที่ออกแบบมาสำหรับการพัฒนาเกม 2D โดยใช้ Flutter ได้รับการอัปเดตแล้ว

ที่มา: opennet.ru

เพิ่มความคิดเห็น