เมื่อเร็ว ๆ นี้ ประกาศเปิดตัวเวอร์ชันใหม่ของภาษาการเขียนโปรแกรม «Go 1.19»เวอร์ชันที่ปรับปรุงในรีลีสก่อนหน้าโดยเพิ่มการปรับปรุงต่างๆ และเหนือสิ่งอื่นใด คือการแก้ไขข้อบกพร่อง ของใหม่ที่เราเน้นได้คือการปรับปรุงในการจัดการหน่วยความจำ การปรับปรุงความปลอดภัย และอื่นๆ
สำหรับผู้ที่ยังใหม่กับ Go ควรรู้ว่านี่เป็นภาษาโปรแกรมที่พัฒนาขึ้นโดยการมีส่วนร่วมของชุมชนเป็นโซลูชันไฮบริดที่รวมเอาประสิทธิภาพสูงของภาษาที่คอมไพล์เข้ากับข้อดีเช่นภาษาสคริปต์เช่น ความง่ายในการเขียนโค้ด การพัฒนา และการป้องกันบั๊ก
ไวยากรณ์ของ Go ขึ้นอยู่กับองค์ประกอบปกติของภาษา C ด้วยการยืมบางส่วนจากภาษาไพทอน ภาษาค่อนข้างสั้น แต่โค้ดนั้นอ่านและเข้าใจได้ง่าย
โค้ด Go ถูกคอมไพล์เป็นไฟล์ปฏิบัติการไบนารีที่แยกจากกัน ที่ทำงานโดยกำเนิดโดยไม่ต้องใช้เครื่องเสมือน (การทำโปรไฟล์ การดีบัก และระบบย่อยการแก้ไขปัญหารันไทม์อื่นๆ ถูกสร้างเป็นส่วนประกอบรันไทม์)
คุณสมบัติใหม่หลักของ Go 1.19
ในเวอร์ชันใหม่ของ Go 1.19 ที่นำเสนอนี้ขอเน้นว่า ได้มีการปรับปรุงการรองรับฟังก์ชั่นและประเภททั่วไป เพิ่มในเวอร์ชันล่าสุดด้วยความช่วยเหลือที่นักพัฒนาซอฟต์แวร์สามารถกำหนดและใช้ฟังก์ชันที่ออกแบบมาเพื่อทำงานกับหลายประเภทพร้อมกัน รวมถึงการเพิ่มประสิทธิภาพการทำงานของบางโปรแกรมที่ใช้ generics เพิ่มขึ้น 20%
การเปลี่ยนแปลงอีกอย่างที่โดดเด่นจากเวอร์ชันใหม่นั่นก็คือ เพิ่มการรองรับลิงก์ รายการ และไวยากรณ์ที่ง่ายกว่า เพื่อกำหนดส่วนหัวในความคิดเห็นของเอกสาร ยูทิลิตี้ gofmt ให้การจัดรูปแบบด้วยคุณลักษณะขั้นสูงของความคิดเห็นโดยคำนึงถึงเอกสารประกอบของ API
นอกจากนั้นแล้ว ปรับปรุงโมเดลหน่วยความจำ Go เพื่อให้สอดคล้องกับ C, C++, Java, JavaScript, Rust และ Swift ซึ่งไม่ยอมรับค่าอะตอมที่สม่ำเสมอตามลำดับ มีการแนะนำประเภทใหม่ เช่น atomic.Int64 และ atomic.Pointer[T] ในแพ็คเกจ sync/atomic เพื่อให้ใช้ค่าอะตอมมิกได้ง่ายขึ้น
ในทางกลับกัน ยังมีการกล่าวอีกว่า ตัวรวบรวมขยะมีความสามารถในการกำหนดขีดจำกัดซอฟต์ซึ่งบังคับใช้โดยการจำกัดขนาดของฮีปและส่งคืนหน่วยความจำไปยังระบบอย่างเข้มงวดมากขึ้น กล่าวคือ ปริมาณการใช้ไม่รับประกันว่าจะอยู่ภายในขีดจำกัดที่ระบุภายใต้เงื่อนไขทั้งหมด ขีดจำกัดแบบซอฟต์มีประโยชน์สำหรับการเพิ่มประสิทธิภาพโปรแกรมที่ทำงานในคอนเทนเนอร์หน่วยความจำแบบตายตัว
นอกจากนี้ยังมีการเน้นย้ำว่า บนระบบ Unix ตัวอธิบายไฟล์เพิ่มเติมจะถูกเปิดใช้งานโดยอัตโนมัติ (เพิ่มขีดจำกัด RLIMIT_NOFILE) เพื่อเพิ่มความเร็วนิพจน์การเปลี่ยนแปลงขนาดใหญ่บนระบบ x86-64 และ ARM64 มีการใช้ตารางข้าม ซึ่งช่วยให้ประมวลผลนิพจน์การเปลี่ยนแปลงขนาดใหญ่ได้เร็วขึ้นสูงสุด 20%
ในระบบ riscv64 มีการใช้อาร์กิวเมนต์ของฟังก์ชันผ่านการลงทะเบียน CPU ซึ่งอนุญาตให้เพิ่มประสิทธิภาพได้ประมาณ 10%
จากการเปลี่ยนแปลงอื่น ๆ ที่โดดเด่นกว่ารุ่นใหม่นี้:
- มีการใช้การปรับประสิทธิภาพให้เหมาะสมมากมาย
- เพิ่มการรองรับการตั้งค่าขนาดสแต็กรูทีนแบบไดนามิกเพื่อลดขนาดของข้อมูลที่คัดลอก
- เพิ่มการรองรับแบบทดลองสำหรับสภาพแวดล้อม Linux บนระบบที่มีโปรเซสเซอร์ Loongson ซึ่งใช้สถาปัตยกรรม LoongArch 64 บิต (GOARCH=loong64)
- การเปลี่ยนรุ่นหน่วยความจำจะไม่ส่งผลต่อความเข้ากันได้กับโค้ดที่เขียนไว้ก่อนหน้านี้
- เพิ่มข้อจำกัดบิลด์ "unix" ใหม่ที่สามารถใช้ได้ในบรรทัด "go:build" เพื่อกรองระบบที่คล้าย Unix (aix, android, ดาร์วิน, แมลงปอ, freebsd, hurd, illumos, ios, linux, netbsd, openbsd, solaris ).
- เพื่อปรับปรุงความปลอดภัย ตอนนี้โมดูล os/exec จะละเว้นพาธสัมพัทธ์เมื่อขยายตัวแปรสภาพแวดล้อม PATH (ตัวอย่างเช่น เมื่อกำหนดพาธของไฟล์เรียกทำงาน ไดเร็กทอรีปัจจุบันจะไม่ถูกตรวจสอบอีกต่อไป)
สุดท้ายนี้ หากคุณสนใจเรียนรู้เพิ่มเติมเกี่ยวกับรุ่นใหม่นี้ สามารถตรวจสอบรายละเอียดได้ที่ ลิงค์ต่อไปนี้