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

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

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

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

คุณสมบัติใหม่ที่สำคัญที่นำมาใช้ใน Go 1.16:

  • เพิ่มแพ็คเกจฝังซึ่งมีเครื่องมือสำหรับการฝังไฟล์และไดเร็กทอรีที่กำหนดเองลงในโปรแกรม มีคำสั่ง "//go:embed" ใหม่เพื่อระบุไฟล์ที่จะฝังในเวลาคอมไพล์ ตัวอย่างเช่น การระบุ “//go:embed test.txt” ในความคิดเห็นของโค้ด จากนั้นการประกาศตัวแปร “var f embed.FS” จะนำไปสู่การฝังไฟล์ test.txt และความสามารถในการเข้าถึงไฟล์ผ่านทาง “ ฉ” คำอธิบาย ในทำนองเดียวกัน คุณสามารถฝังไฟล์ที่มีทรัพยากรหรือค่าแต่ละประเภทที่จำเป็นสำหรับการทำงานได้ ตัวอย่างเช่น หากต้องการรับตัวแปรสตริง “s” จากไฟล์ version.txt คุณสามารถระบุ: import _ “embed ” //go:embed version.txt var s string print (s)
  • ตามค่าเริ่มต้น ตอนนี้จำเป็นต้องมีระบบโมดูลใหม่ที่มีการรองรับการกำหนดเวอร์ชันแบบรวม แทนที่การจัดการการพึ่งพาตาม GOPATH ขณะนี้ตัวแปรสภาพแวดล้อม GO111MODULE ได้รับการตั้งค่าเป็น "เปิด" ตามค่าเริ่มต้น และโหมดโมดูลจะถูกใช้โดยไม่คำนึงถึงการมีไฟล์ go.mod ในไดเร็กทอรีการทำงานหรือไดเร็กทอรีพาเรนต์ ในโหมดใหม่ คำสั่ง build เช่น "go build" และ "go test" จะไม่เปลี่ยนเนื้อหาของ go.mod และ go.sum และคำสั่ง "go install" จะประมวลผลอาร์กิวเมนต์เวอร์ชัน ("go install example.com/[ป้องกันอีเมล]") หากต้องการคืนพฤติกรรมเก่า ให้เปลี่ยน GO111MODULE เป็น "auto" มีข้อสังเกตว่านักพัฒนา 96% ได้เปลี่ยนมาใช้ระบบโมดูลใหม่แล้ว
  • ตัวเชื่อมโยงได้รับการปรับให้เหมาะสม สำหรับโปรเจ็กต์ขนาดใหญ่ ตอนนี้เลย์เอาต์เร็วขึ้น 20-25% และต้องใช้หน่วยความจำน้อยลง 5-15%
  • คอมไพเลอร์ได้เพิ่มการรองรับการขยายฟังก์ชันแบบอินไลน์ด้วยคำจำกัดความแบบย่อของลูป "for" ค่าวิธีการและโครงสร้าง 'type switch'
  • เพิ่มการรองรับระบบ Apple ที่ติดตั้งชิป Apple M1 ARM ใหม่ เพิ่มพอร์ต netbsd/arm64 และ openbsd/mips64 ที่รองรับ NetBSD บน ARM 64 บิต และ OpenBSD บนระบบ MIPS64 เพิ่มการรองรับ cgo และโหมด "-buildmode=pie" ให้กับพอร์ต linux/riscv64
  • การสนับสนุนสำหรับโหมดการคอมไพล์ x87 ถูกยกเลิก (GO386=387) ขณะนี้การสนับสนุนโปรเซสเซอร์แบบไม่มีคำสั่ง SSE2 มีให้ใช้งานได้ผ่านโหมดซอฟต์แวร์ "GO386=softfloat"

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

ที่มา: opennet.ru

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