Phát hành ngôn ngữ lập trình Go 1.18

Việc phát hành ngôn ngữ lập trình Go 1.18 được trình bày, đang được Google phát triển với sự tham gia của cộng đồng như một giải pháp kết hợp kết hợp hiệu suất cao của các ngôn ngữ được biên dịch với những ưu điểm của ngôn ngữ kịch bản như dễ viết mã , tốc độ phát triển và bảo vệ lỗi. Mã dự án được phân phối theo giấy phép BSD.

Cú pháp của Go dựa trên các yếu tố quen thuộc của ngôn ngữ C với một số vay mượn từ ngôn ngữ Python. Ngôn ngữ khá ngắn gọn nhưng mã rất dễ đọc và dễ hiểu. Mã Go được biên dịch thành các tệp thực thi nhị phân độc lập chạy tự nhiên mà không cần sử dụng máy ảo (mô-đun lược tả, gỡ lỗi và các hệ thống con phát hiện vấn đề thời gian chạy khác được tích hợp dưới dạng các thành phần thời gian chạy), cho phép hiệu suất tương đương với các chương trình C.

Dự án ban đầu được phát triển với mục tiêu lập trình đa luồng và vận hành hiệu quả trên các hệ thống đa lõi, bao gồm việc cung cấp các phương tiện ở cấp độ người vận hành để tổ chức tính toán song song và tương tác giữa các phương pháp thực hiện song song. Ngôn ngữ này cũng cung cấp khả năng bảo vệ tích hợp chống lại các khối bộ nhớ được phân bổ quá mức và cung cấp khả năng sử dụng trình thu gom rác.

Phiên bản mới bổ sung hỗ trợ cho các hàm và loại chung (generic), nhờ đó nhà phát triển có thể xác định và sử dụng các hàm được thiết kế để hoạt động với nhiều loại cùng một lúc. Cũng có thể sử dụng giao diện để tạo các kiểu kết hợp trải rộng trên nhiều kiểu dữ liệu. Hỗ trợ cho thuốc generic được triển khai mà không phá vỡ khả năng tương thích ngược với mã hiện có. // Tập hợp các giá trị tổng, hoạt động với kiểu int64 và float64 func SumIntsOrFloats[K so sánh, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Một tùy chọn khác với định nghĩa kiểu chung: type Number giao diện { int64 | float64 } func SumNumbers[K so sánh được, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }

Các cải tiến khác:

  • Các tiện ích để kiểm tra mã mờ được tích hợp vào bộ công cụ tiêu chuẩn. Trong quá trình thử nghiệm làm mờ, một luồng gồm tất cả các kết hợp ngẫu nhiên có thể có của dữ liệu đầu vào sẽ được tạo ra và các lỗi có thể xảy ra trong quá trình xử lý chúng sẽ được ghi lại. Nếu một trình tự gặp sự cố hoặc không khớp với phản hồi dự kiến ​​thì hành vi này rất có thể chỉ ra lỗi hoặc lỗ hổng bảo mật.
  • Đã thêm hỗ trợ cho không gian làm việc đa mô-đun, cho phép bạn thực thi các lệnh trên nhiều mô-đun cùng một lúc, cho phép bạn xây dựng và chạy mã đồng thời trong nhiều mô-đun.
  • Tối ưu hóa hiệu suất đáng kể đã được thực hiện cho các hệ thống dựa trên bộ xử lý Apple M1, ARM64 và PowerPC64. Đã bật khả năng sử dụng các thanh ghi thay vì ngăn xếp để truyền đối số cho các hàm và trả về kết quả. Cải thiện việc bỏ vòng lặp nội tuyến bằng trình biên dịch. Kiểm tra kiểu trong trình biên dịch đã được thiết kế lại hoàn toàn. Một số thử nghiệm cho thấy hiệu suất mã tăng 20% ​​so với bản phát hành trước, nhưng quá trình biên dịch mất nhiều thời gian hơn khoảng 15%.
  • Trong thời gian chạy, hiệu quả trả lại bộ nhớ đã giải phóng cho hệ điều hành đã được tăng lên và hoạt động của trình thu gom rác đã được cải thiện, hoạt động của nó đã trở nên dễ đoán hơn.
  • Các gói mới net/netip và debug/buildinfo đã được thêm vào thư viện chuẩn. Hỗ trợ cho TLS 1.0 và 1.1 bị tắt theo mặc định trong mã máy khách. Mô-đun crypto/x509 đã ngừng xử lý các chứng chỉ được ký bằng hàm băm SHA-1.
  • Các yêu cầu về môi trường trong Linux đã được nâng lên; để hoạt động, bây giờ bạn cần có nhân Linux phiên bản ít nhất là 2.6.32. Trong bản phát hành tiếp theo, những thay đổi tương tự được mong đợi đối với FreeBSD (hỗ trợ cho nhánh FreeBSD 11.x sẽ ngừng hoạt động) và ít nhất FreeBSD 12.2 sẽ được yêu cầu để hoạt động.

Nguồn: opennet.ru

Thêm một lời nhận xét