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

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

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

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

เวอร์ชันใหม่เพิ่มการรองรับฟังก์ชันและประเภททั่วไป (ทั่วไป) โดยนักพัฒนาสามารถกำหนดและใช้ฟังก์ชันที่ออกแบบมาเพื่อทำงานกับหลายประเภทในคราวเดียว นอกจากนี้ยังสามารถใช้อินเทอร์เฟซเพื่อสร้างประเภทรวมที่ครอบคลุมประเภทข้อมูลหลายประเภทได้ มีการรองรับยาชื่อสามัญโดยไม่ทำลายความเข้ากันได้แบบย้อนหลังกับโค้ดที่มีอยู่ // ค่าชุดผลรวม ใช้ได้กับประเภท int64 และ float64 func SumIntsOrFloats[K เปรียบเทียบได้, V int64 | float64](m map[K]V) V { var s V สำหรับ _, v := range m { s += v } return s } // ตัวเลือกอื่นที่มีคำจำกัดความประเภททั่วไป: พิมพ์ Number interface { int64 | float64 } func SumNumbers[K เทียบเคียง, หมายเลข V](m map[K]V) V { var s V สำหรับ _, 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

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