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

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

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

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

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

  • การทำงานของตัวเชื่อมโยงได้รับการปรับปรุงอย่างมีนัยสำคัญ ทั้งในด้านการเพิ่มความเร็วของการทำงานและลดการใช้หน่วยความจำ และในทิศทางของการบำรุงรักษาโค้ดที่ง่ายขึ้น เมื่อทดสอบบนระบบปฏิบัติการโดยใช้รูปแบบไฟล์ปฏิบัติการของ ELF (Linux, FreeBSD, NetBSD, OpenBSD, Dragonfly, Solaris) ชุดแอปพลิเคชัน Go ขนาดใหญ่ทั่วไปถูกสร้างขึ้นเร็วขึ้น 20% และการใช้หน่วยความจำลดลงโดยเฉลี่ย 30% ประสิทธิภาพการทำงานที่เพิ่มขึ้นเกิดขึ้นได้โดยการเปลี่ยนไปใช้รูปแบบไฟล์อ็อบเจ็กต์ใหม่และการทำงานใหม่ตามขั้นตอนภายในเพื่อเพิ่มระดับการทำงานแบบขนาน ขณะนี้ Native Linker ถูกใช้เป็นค่าเริ่มต้นบนระบบ linux/amd64 และ linux/arm64 ใน "-buildmode=pie" ซึ่งไม่จำเป็นต้องใช้ C linker อีกต่อไป
  • ในรันไทม์ การกระจายของอ็อบเจ็กต์ขนาดเล็กบนระบบที่มีคอร์ CPU จำนวนมากได้รับการปรับปรุงอย่างมีนัยสำคัญ และเวลาแฝงลดลง ในกรณีที่เกิดความล้มเหลว ค่าที่มีประเภทตัวเลขและสตริงจะแสดงแทนการแสดงที่อยู่ เมื่อส่งสัญญาณ SIGSEGV, SIGBUS และ SIGFPE ไปยังแอปพลิเคชัน Go ในกรณีที่ไม่มีตัวจัดการ os/signal.Notify แอปพลิเคชันจะออกพร้อมกับเอาต์พุตการติดตามสแต็ก (ก่อนหน้านี้พฤติกรรมไม่สามารถคาดเดาได้)
  • คอมไพลเลอร์ได้รับการปรับให้เหมาะสมเพื่อลดขนาดของไฟล์ปฏิบัติการที่สร้างขึ้นโดยเฉลี่ย 5% โดยการหยุดการรวมข้อมูลเมตาบางส่วนสำหรับตัวรวบรวมขยะและการทำความสะอาดเมตาดาต้าที่ไม่ได้ใช้เชิงรุกมากขึ้น
  • มีการเพิ่มแฟล็ก "-spectre" ลงในคอมไพลเลอร์และแอสเซมเบลอร์เพื่อเปิดใช้งานการป้องกันการโจมตีคลาส Spectre (สำหรับโปรแกรมส่วนใหญ่ไม่จำเป็นต้องใช้ การเปิดใช้งานตัวเลือกสามารถทำได้เฉพาะสำหรับ บางกรณีที่เฉพาะเจาะจงมาก).
  • ในใบรับรอง X.509 ช่อง CommonName เลิกใช้งานแล้ว ซึ่งจะถือว่าเป็นชื่อโฮสต์ไม่ได้อีกต่อไป หากช่อง Subject Alternative Names หายไป
  • คำสั่ง "go" ในตัวแปรสภาพแวดล้อม GOPROXY สามารถแสดงรายการพรอกซีหลายรายการได้แล้ว โดยคั่นด้วยเครื่องหมายจุลภาคหรือ "|" หากพร็อกซีแรกในรายการส่งคืนข้อผิดพลาด (404 หรือ 410) แสดงว่าจะพยายามติดต่อผ่านพร็อกซีตัวที่สอง เป็นต้น
  • ยูทิลิตี้ vet ได้เพิ่มคำเตือนเกี่ยวกับการพยายามแปลงจาก string(x) หาก "x" เป็นประเภทจำนวนเต็มที่ไม่ใช่ rune หรือ byte
  • เพิ่มแฟล็ก "-gnu" ลงในยูทิลิตี้ objdump เพื่อรองรับการแยกส่วนไวยากรณ์แอสเซมเบลอร์ GNU
  • เพิ่มแพ็คเกจใหม่แล้ว เวลา/tzdataซึ่งช่วยให้คุณสามารถรวมฐานข้อมูลกับข้อมูลเขตเวลาลงในโปรแกรมได้
  • จากข้อความต้นฉบับและเอกสารประกอบ ลบออก วลี whitelist/blacklist และ master/slave ซึ่งตอนนี้ถูกแทนที่ด้วย "allowlist", "blocklist", "process", "pty", "proc" และ "control"
  • มีการปรับปรุงเล็กน้อยส่วนใหญ่ในไลบรารีมาตรฐาน
  • เพิ่มการรองรับ OpenBSD 6.7 ในโหมด GOARCH=arm และ GOARCH=arm64 (ก่อนหน้านี้รองรับเฉพาะ GOARCH=386 และ GOARCH=amd64 เท่านั้น)
  • การพัฒนาแพลตฟอร์ม RISC-V 64 บิต (GOOS=linux, GOARCH=riscv64) ยังคงดำเนินต่อไป
  • สำหรับระบบ x32 แบบ 86 บิต รุ่นถัดไปจะเพิ่มข้อกำหนดขั้นต่ำของระบบ - เฉพาะโปรเซสเซอร์ที่มี SSE2 เท่านั้นที่จะยังคงได้รับการสนับสนุน ในการสร้างในโหมด GOARCH=386 คุณจะต้องมี Intel Pentium 4 เป็นอย่างน้อย (เปิดตัวในปี 2000) หรือ AMD Opteron/Athlon 64 (เปิดตัวในปี 2003)

ที่มา: opennet.ru

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