2 điểm bởi GN⁺ 2023-08-15 | 1 bình luận | Chia sẻ qua WhatsApp
  • Bài viết về tầm quan trọng của tính tương thích ngược trong ngôn ngữ lập trình Go, tập trung vào các tính năng mới của Go 1.21 và tương lai của Go 2
  • Go 1.21 bao gồm các tính năng mới nhằm cải thiện khả năng tương thích, với mục tiêu giữ cho Go ổn định và dễ dự đoán, để các nhà phát triển có thể tập trung vào công việc thay vì những thay đổi của ngôn ngữ
  • Nhóm Go đã tập trung vào khả năng tương thích trong hơn 10 năm, với ý định rõ ràng rằng các chương trình được viết theo đặc tả Go 1 sẽ tiếp tục được biên dịch và chạy đúng mà không cần thay đổi trong suốt vòng đời của đặc tả đó
  • Giải thích hai cách tiếp cận chính để duy trì khả năng tương thích: kiểm tra API và kiểm thử. Kiểm tra API bảo đảm rằng API hiện có không bị loại bỏ hoặc thay đổi theo cách làm hỏng mã hiện có. Kiểm thử bao gồm việc chạy các bài kiểm thử hiện có trên phiên bản phát triển của bản phát hành Go tiếp theo
  • Đưa ra các ví dụ về những vấn đề tương thích tinh vi được phát hiện khi kiểm thử Go bên trong Google, như literal struct và các trường mới, độ chính xác của thời gian, v.v.
  • Phân loại các vấn đề tương thích thành ba nhóm: thay đổi đầu ra, thay đổi đầu vào và thay đổi giao thức
  • Go 1.21 mở rộng và chính thức hóa việc sử dụng GODEBUG để cải thiện tính tương thích ngược. Các thiết lập GODEBUG sẽ được duy trì ít nhất hai năm và được đặt để khớp với phiên bản Go được liệt kê trong tệp go.mod của gói main
  • Bài viết kết thúc bằng cập nhật về Go 2, tuyên bố sẽ không có Go 2 nào phá vỡ các chương trình Go 1. Thay vào đó, nhóm Go sẽ ưu tiên khả năng tương thích và tin rằng đây là quyết định thiết kế quan trọng nhất mà họ đã đưa ra cho Go 1

1 bình luận

 
GN⁺ 2023-08-15
Ý kiến trên Hacker News
  • Bài viết này thảo luận về tầm quan trọng của khả năng tương thích trong Go 1.21 và khả năng xuất hiện của Go 2 trong tương lai.
  • Go 1.21 cung cấp hai tính năng độc đáo: thiết lập GODEBUG cho từng thay đổi cùng các metric để phát hiện việc sử dụng triển khai trước đó, và phiên bản toolchain theo từng module có thể tự động tải các go toolchain cũ và mới.
  • Khi một phiên bản Go cụ thể được chỉ định, các phiên bản Go mới sẽ tự động áp dụng cấu hình opt-out liên quan, ताकि hành vi mới sẽ không được áp dụng cho đến khi được yêu cầu.
  • Nhóm ngôn ngữ Go cam kết duy trì khả năng tương thích ngược, và điều này được các nhà phát triển đang vận hành những hệ thống Go quy mô lớn ghi nhận.
  • Một số người dùng bày tỏ lo ngại rằng những cải tiến quan trọng đối với hệ thống kiểu có thể đòi hỏi các thay đổi phá vỡ tương thích.
  • Có đề xuất rằng Go không nên có một Go 2 thực sự, vì những thay đổi lớn có thể đòi hỏi việc phân nhánh và đổi tên ngôn ngữ.
  • Sự ổn định và khả năng dự đoán của Go, vốn bị mô tả là "nhàm chán", tạo nên sự đối lập với hệ sinh thái JavaScript bị phân mảnh và thay đổi liên tục.
  • Bài viết cũng nhắc đến một bài đăng liên quan về "khả năng tương thích tiến và quản lý Toolchain trong Go 1.21".
  • Cam kết về khả năng tương thích ngược trong Go được khen ngợi, và một người dùng chia sẻ việc chuyển mã từ Python sang Go đã giúp họ mở rộng quy mô như thế nào.
  • Các kỹ thuật được Go sử dụng để đảm bảo khả năng tương thích được đánh giá cao, và đang được cân nhắc để áp dụng trong thiết kế của các ngôn ngữ khác.