Blog Go

Go 1.7 đã được phát hành

Chris Broadfoot
15 August 2016

Hôm nay chúng tôi vui mừng thông báo phát hành Go 1.7. Bạn có thể tải về từ trang download. Có một số thay đổi quan trọng trong bản phát hành này: cổng cho Linux trên IBM z Systems (s390x), cải tiến trình biên dịch, bổ sung gói context, và hỗ trợ kiểm thử và benchmark phân cấp.

Một backend trình biên dịch mới, dựa trên dạng static single-assignment (SSA), đã được phát triển trong năm qua. Bằng cách biểu diễn một chương trình dưới dạng SSA, trình biên dịch có thể thực hiện các tối ưu hóa nâng cao dễ dàng hơn. Backend mới này tạo ra code gọn hơn, hiệu quả hơn bao gồm các tối ưu hóa như loại bỏ kiểm tra biên giớiloại bỏ biểu thức con chung. Chúng tôi quan sát thấy tốc độ tăng từ 5-35% trên các benchmark. Hiện tại, backend mới chỉ có sẵn cho nền tảng x86 64-bit (“amd64”), nhưng chúng tôi đang lên kế hoạch chuyển đổi thêm backend kiến trúc sang SSA trong các bản phát hành tương lai.

Frontend trình biên dịch dùng định dạng dữ liệu export mới, gọn hơn và xử lý khai báo import hiệu quả hơn. Mặc dù những thay đổi trong toolchain trình biên dịch này hầu hết không thấy được, người dùng đã quan sát tốc độ biên dịch tăng đáng kể và kích thước binary giảm tới 20-30%.

Các chương trình nên chạy nhanh hơn một chút nhờ tăng tốc trong bộ gom rác và tối ưu hóa trong thư viện chuẩn. Các chương trình có nhiều goroutine nhàn rỗi sẽ trải qua thời gian tạm dừng thu gom rác ngắn hơn nhiều so với Go 1.6.

Trong vài năm qua, gói golang.org/x/net/context đã chứng tỏ là thiết yếu với nhiều ứng dụng Go. Context được dùng hiệu quả trong các ứng dụng liên quan đến mạng, hạ tầng và microservice (chẳng hạn như KubernetesDocker). Chúng giúp dễ dàng bật hủy bỏ, timeout và truyền dữ liệu theo phạm vi request. Để sử dụng context trong thư viện chuẩn và khuyến khích sử dụng rộng rãi hơn, gói đã được chuyển từ kho lưu trữ x/net vào thư viện chuẩn như gói context. Hỗ trợ context đã được thêm vào các gói net, net/httpos/exec. Để biết thêm về context, xem tài liệu gói và bài đăng blog Go Go Concurrency Patterns: Context.

Go 1.5 đã giới thiệu hỗ trợ thử nghiệm cho thư mục “vendor”, được bật bằng biến môi trường GO15VENDOREXPERIMENT. Go 1.6 đã bật hành vi này theo mặc định, và trong Go 1.7, switch này đã bị loại bỏ và hành vi “vendor” luôn được bật.

Go 1.7 bao gồm nhiều bổ sung, cải tiến và sửa lỗi hơn nữa. Tìm tập thay đổi đầy đủ, và chi tiết của các điểm trên, trong ghi chú phát hành Go 1.7.

Cuối cùng, nhóm Go muốn cảm ơn tất cả những người đã đóng góp cho bản phát hành. 170 người đã đóng góp cho bản phát hành này, trong đó 140 người từ cộng đồng Go. Các đóng góp này từ thay đổi cho trình biên dịch và trình liên kết, đến thư viện chuẩn, đến tài liệu và đánh giá code. Chúng tôi hoan nghênh đóng góp; nếu bạn muốn tham gia, xem hướng dẫn đóng góp.

Bài tiếp theo: Binary nhỏ hơn trong Go 1.7
Bài trước: Go 1.6 đã được phát hành
Mục lục blog