การเปิดตัวภาษาการเขียนโปรแกรม Go 1.13

แนะนำ การเปิดตัวภาษาโปรแกรม ไปที่ 1.13ซึ่งกำลังได้รับการพัฒนาโดย Google โดยการมีส่วนร่วมของชุมชนในฐานะโซลูชันแบบไฮบริดที่รวมเอาภาษาที่คอมไพล์ประสิทธิภาพสูงเข้ากับข้อดีของภาษาสคริปต์ เช่น ความง่ายในการเขียนโค้ด ความเร็วในการพัฒนา และการป้องกันข้อผิดพลาด รหัสโครงการ จัดจำหน่ายโดย ภายใต้ใบอนุญาต BSD

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

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

หลัก นวัตกรรมเปิดตัวในรุ่น Go 1.13:

  • แพ็คเกจ crypto/tls มีการเปิดใช้งานการรองรับโปรโตคอลตามค่าเริ่มต้น TLS ฮิต. เพิ่มแพ็คเกจใหม่ "crypto/ed25519" พร้อมรองรับลายเซ็นดิจิทัล Ed25519
  • เพิ่มการรองรับคำนำหน้าตัวอักษรตัวเลขใหม่เพื่อกำหนดเลขฐานสอง (เช่น 0b101), ฐานแปด (0o377), จินตภาพ (2.71828i) และจุดลอยตัวฐานสิบหก (0x1p-1021) และความสามารถในการใช้อักขระ "_" เพื่อแยกตัวเลขด้วยสายตา เป็นจำนวนมาก (1_000_000);
  • ข้อจำกัดในการใช้เฉพาะตัวนับที่ไม่ได้ลงนามในการดำเนินการกะได้ถูกลบออกแล้ว ซึ่งจะช่วยหลีกเลี่ยงการแปลงเป็นประเภท uint ที่ไม่จำเป็น ก่อนที่จะใช้ตัวดำเนินการ “‹‹” และ “››”
  • เพิ่มการรองรับแพลตฟอร์ม Illumos (GOOS=illumos) รับประกันความเข้ากันได้กับแพลตฟอร์ม Android 10 ข้อกำหนดสำหรับเวอร์ชันขั้นต่ำของ FreeBSD (11.2) และ macOS (10.11 “El Capitan”) ได้รับการเพิ่มขึ้น
  • การพัฒนาระบบโมดูลใหม่อย่างต่อเนื่องซึ่งสามารถใช้เป็นทางเลือกแทน GOPATH ตรงกันข้ามกับแผนที่ประกาศก่อนหน้านี้ใน Go 1.13 ระบบนี้ไม่ได้เปิดใช้งานตามค่าเริ่มต้น และจำเป็นต้องเปิดใช้งานผ่านตัวแปร GO111MODULE=on หรือใช้บริบทที่โมดูลจะถูกนำไปใช้โดยอัตโนมัติ ระบบโมดูลใหม่มีคุณสมบัติรองรับการกำหนดเวอร์ชันแบบรวม ความสามารถในการจัดส่งแพ็คเกจ และการจัดการการพึ่งพาที่ได้รับการปรับปรุง ด้วยโมดูล นักพัฒนาจะไม่เชื่อมโยงกับการทำงานภายในแผนผัง GOPATH อีกต่อไป สามารถกำหนดการขึ้นต่อกันของเวอร์ชันได้อย่างชัดเจน และสร้างบิลด์ที่ทำซ้ำได้

    ไม่เหมือนกับรีลีสก่อนหน้านี้ แอปพลิเคชันอัตโนมัติของระบบใหม่จะทำงานเมื่อมีไฟล์ go.mod อยู่ในไดเร็กทอรีการทำงานปัจจุบันหรือไดเร็กทอรีพาเรนต์เมื่อรันคำสั่ง go รวมถึงเมื่ออยู่ในไดเร็กทอรี GOPATH/src มีการเพิ่มตัวแปรสภาพแวดล้อมใหม่: GOPRIVATE ซึ่งกำหนดเส้นทางของโมดูลที่สามารถเข้าถึงได้โดยสาธารณะ และ GOSUMDB ซึ่งระบุพารามิเตอร์การเข้าถึงฐานข้อมูลการตรวจสอบสำหรับโมดูลที่ไม่อยู่ในรายการในไฟล์ go.sum

  • คำสั่ง "go" ตามค่าเริ่มต้นจะโหลดโมดูลและตรวจสอบความสมบูรณ์โดยใช้โมดูลมิเรอร์และฐานข้อมูลเช็คซัมที่ดูแลโดย Google (proxy.golang.org, sum.golang.org และ index.golang.org)
  • การสนับสนุนเฉพาะแพ็คเกจไบนารีถูกยกเลิก การสร้างแพ็คเกจในโหมด “//go:binary-only-package” ขณะนี้ส่งผลให้เกิดข้อผิดพลาด
  • เพิ่มการรองรับส่วนต่อท้าย "@patch" ให้กับคำสั่ง "go get" ซึ่งบ่งชี้ว่าโมดูลควรได้รับการอัปเดตเป็นรุ่นบำรุงรักษาล่าสุด แต่ไม่มีการเปลี่ยนแปลงเวอร์ชันหลักหรือเวอร์ชันรองในปัจจุบัน
  • เมื่อดึงข้อมูลโมดูลจากระบบควบคุมต้นทาง คำสั่ง "go" จะทำการตรวจสอบเพิ่มเติมในสตริงเวอร์ชัน โดยพยายามจับคู่หมายเลขเวอร์ชันหลอกกับข้อมูลเมตาจากที่เก็บ
  • เพิ่มการสนับสนุน การตรวจสอบข้อผิดพลาด (การตัดข้อผิดพลาด) ผ่านการสร้าง wrapper ที่ช่วยให้สามารถใช้ตัวจัดการข้อผิดพลาดมาตรฐานได้ ตัวอย่างเช่น, แมลง "e" สามารถล้อมรอบข้อผิดพลาด "w" ได้โดยการระบุวิธีการ แกะส่งคืน "w" โปรแกรมมีทั้งข้อผิดพลาด "e" และ "w" และการตัดสินใจจะขึ้นอยู่กับข้อผิดพลาด "w" แต่ "e" ให้บริบทเพิ่มเติมสำหรับ "w" หรือตีความแตกต่างออกไป
  • ประสิทธิภาพของส่วนประกอบรันไทม์ได้รับการปรับให้เหมาะสม (เพิ่มความเร็วสูงสุดถึง 30% ได้รับการสังเกต) และมีการใช้การคืนหน่วยความจำที่ก้าวร้าวมากขึ้นไปยังระบบปฏิบัติการ (ก่อนหน้านี้ หน่วยความจำถูกส่งคืนหลังจากห้านาทีขึ้นไป แต่ตอนนี้ในทันที หลังจากลดขนาดฮีปแล้ว)

ที่มา: opennet.ru

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