มีการนำเสนอภาษาการเขียนโปรแกรม Go 1.18 ซึ่งพัฒนาโดย Google โดยการมีส่วนร่วมของชุมชนในฐานะโซลูชันไฮบริดที่รวมเอาประสิทธิภาพสูงของภาษาที่คอมไพล์เข้ากับข้อดีของภาษาสคริปต์เช่นความง่ายในการเขียนโค้ด ความเร็วในการพัฒนาและการป้องกันข้อผิดพลาด รหัสโครงการเผยแพร่ภายใต้ใบอนุญาต BSD
ไวยากรณ์ของ Go ขึ้นอยู่กับองค์ประกอบที่คุ้นเคยของภาษา C โดยมีการยืมมาจากภาษา Python ภาษาค่อนข้างกระชับ แต่โค้ดอ่านและเข้าใจง่าย โค้ด Go ได้รับการคอมไพล์เป็นไฟล์ปฏิบัติการไบนารีแบบสแตนด์อโลนที่ทำงานแบบเนทิฟโดยไม่ต้องใช้เครื่องเสมือน (การทำโปรไฟล์ โมดูลการดีบัก และระบบย่อยการตรวจจับปัญหารันไทม์อื่นๆ ถูกรวมเข้าเป็นส่วนประกอบรันไทม์) ซึ่งช่วยให้มีประสิทธิภาพเทียบเท่ากับโปรแกรม C
โปรเจ็กต์นี้ได้รับการพัฒนาในขั้นต้นโดยมุ่งเน้นไปที่การเขียนโปรแกรมแบบมัลติเธรดและการทำงานที่มีประสิทธิภาพบนระบบมัลติคอร์ รวมถึงการจัดเตรียมวิธีการระดับผู้ปฏิบัติงานสำหรับการจัดระเบียบการประมวลผลแบบขนานและการโต้ตอบระหว่างวิธีการดำเนินการแบบขนาน ภาษายังให้การป้องกันในตัวต่อบล็อกหน่วยความจำที่จัดสรรมากเกินไป และให้ความสามารถในการใช้ตัวรวบรวมขยะ
เวอร์ชันใหม่นี้เพิ่มการรองรับฟังก์ชันและชนิดข้อมูลทั่วไป ช่วยให้นักพัฒนาสามารถกำหนดและใช้ฟังก์ชันที่ทำงานกับชนิดข้อมูลหลายประเภทได้ นอกจากนี้ยังสามารถใช้อินเทอร์เฟซเพื่อสร้างชนิดข้อมูลแบบรวมที่ครอบคลุมชนิดข้อมูลหลายประเภทได้ รองรับชนิดข้อมูลทั่วไปโดยไม่กระทบต่อความเข้ากันได้ย้อนหลังกับโค้ดที่มีอยู่ // สรุปค่าที่ตั้งไว้ ใช้งานได้กับทั้งชนิดข้อมูล int64 และ float64 func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // อีกตัวเลือกหนึ่งที่มีการกำหนดชนิดข้อมูลทั่วไป: type Number interface { int64 | float64 } func SumNumbers[K comparable, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }
การปรับปรุงอื่นๆ:
- ชุดเครื่องมือมาตรฐานประกอบด้วยยูทิลิตี้แบบบูรณาการสำหรับการทดสอบฟัซซิ่งโค้ด การทดสอบฟัซซิ่งประกอบด้วยการสร้างชุดข้อมูลอินพุตแบบสุ่มที่เป็นไปได้ทั้งหมด และบันทึกข้อผิดพลาดที่อาจเกิดขึ้นระหว่างการประมวลผล หากลำดับใด ๆ ส่งผลให้เกิดการขัดข้องหรือไม่ตรงกับการตอบสนองที่คาดหวัง พฤติกรรมดังกล่าวมีแนวโน้มสูงที่จะบ่งชี้ถึงข้อบกพร่องหรือช่องโหว่
- เพิ่มการสนับสนุนสำหรับพื้นที่ทำงานหลายโมดูล ซึ่งช่วยให้คุณเรียกใช้คำสั่งบนโมดูลหลายโมดูลได้พร้อมกัน ช่วยให้คุณสร้างและเรียกใช้โค้ดในโมดูลหลายโมดูลได้พร้อมกัน
- มีการปรับปรุงประสิทธิภาพที่สำคัญสำหรับระบบที่ใช้โปรเซสเซอร์ Apple M1, ARM64 และ PowerPC64 เปิดใช้งานความสามารถในการใช้รีจิสเตอร์แทนสแต็กสำหรับการส่งอาร์กิวเมนต์ไปยังฟังก์ชันและส่งคืนผลลัพธ์ ปรับปรุงการคลี่คลายลูปแบบอินไลน์โดยคอมไพเลอร์ การตรวจสอบประเภทในคอมไพเลอร์ได้รับการออกแบบใหม่ทั้งหมด การทดสอบบางรายการแสดงให้เห็นว่าประสิทธิภาพดีขึ้น 20% เมื่อเทียบกับรุ่นก่อนหน้า แต่การคอมไพล์เองใช้เวลานานขึ้นประมาณ 15%
- ในระหว่างการรันไทม์ ประสิทธิภาพในการส่งคืนหน่วยความจำที่ว่างกลับไปยังระบบปฏิบัติการได้รับการเพิ่มขึ้น และตัวรวบรวมขยะได้รับการปรับปรุง ทำให้พฤติกรรมของมันสามารถคาดเดาได้มากขึ้น
- มีการเพิ่มแพ็กเกจใหม่ net/netip และ debug/buildinfo ลงในไลบรารีมาตรฐานแล้ว การรองรับ TLS 1.0 และ 1.1 ถูกปิดใช้งานตามค่าเริ่มต้นในโค้ดไคลเอนต์ โมดูล crypto/x509 จะไม่ประมวลผลใบรับรองที่ลงนามโดยใช้แฮช SHA-1 อีกต่อไป
- ข้อกำหนดด้านสิ่งแวดล้อมได้รับการยกระดับขึ้น Linuxตอนนี้คุณต้องการเคอร์เนลเพื่อใช้งาน Linux อย่างน้อยเวอร์ชัน 2.6.32 การเปลี่ยนแปลงที่คล้ายกันนี้คาดว่าจะเกิดขึ้นกับ FreeBSD ในเวอร์ชันถัดไป (การสนับสนุนสำหรับ FreeBSD 11.x จะถูกยกเลิก) และจะต้องใช้ FreeBSD เวอร์ชัน 12.2 ขึ้นไปจึงจะใช้งานได้
ที่มา: opennet.ru
