- Ngôn ngữ Go đã chính thức bổ sung hỗ trợ Valgrind
- Thay đổi này giúp tăng cường khả năng phát hiện lỗi bộ nhớ và gỡ lỗi
- Nhà phát triển có thể dễ dàng phát hiện hơn rò rỉ bộ nhớ và lỗi truy cập
- Việc cải thiện khả năng tương thích với Valgrind giúp công việc porting và bảo trì trở nên hiệu quả hơn
- Việc đánh giá độ ổn định của mã Go trên nhiều nền tảng trở nên dễ dàng hơn
Tầm quan trọng của việc đưa hỗ trợ Valgrind vào Go
- Go đã được bổ sung hỗ trợ Valgrind, cho phép nhà phát triển chính thức sử dụng công cụ phát hiện lỗi bộ nhớ
- Thay đổi này cho phép xác định các vấn đề như use-after-free, rò rỉ bộ nhớ, truy cập bộ nhớ không hợp lệ trong mã Go
- Valgrind được sử dụng rộng rãi để phát hiện các vấn đề bộ nhớ trong nhiều ngôn ngữ, và với cộng đồng Go đây là một thay đổi quan trọng để tăng cường độ tin cậy và độ bền vững
- Tính năng được bổ sung giúp việc gỡ lỗi, kiểm chứng chất lượng, đánh giá độ ổn định của chương trình Go trên nhiều nền tảng trở nên thuận tiện hơn
- Ý nghĩa chính của bản cập nhật này là lớp runtime của Go nay đã bao gồm mã instrumentation cho Valgrind
Valgrind là gì?
- Valgrind là một công cụ phát triển mã nguồn mở dùng để kiểm tra lỗi bộ nhớ, lỗi luồng, rò rỉ bộ nhớ, v.v.
- Công cụ này được sử dụng rộng rãi trong các ngôn ngữ lập trình hệ thống như C, C++, và cung cấp khả năng phát hiện chính xác các vấn đề quản lý bộ nhớ
Tóm tắt về lần bổ sung tính năng này
- Instrumentation mã do thay đổi lần này mang lại là tính năng cho phép Valgrind theo dõi chính xác các sự kiện liên quan đến bộ nhớ được cấp phát động trong runtime Go
- Nhà phát triển có thể chạy chương trình Go bằng Valgrind để chẩn đoán hiệu quả các vấn đề bộ nhớ tiềm ẩn hoặc truy cập con trỏ sai
- Kết quả là, hạ tầng hoặc dịch vụ dựa trên Go sẽ có lợi thế trong việc duy trì mã chất lượng cao và phòng ngừa sự cố từ sớm
Hiệu quả được kỳ vọng từ thay đổi này
- Quy trình phát hiện lỗi bộ nhớ và cải thiện chất lượng mã trong các dự án Go được kỳ vọng sẽ trở nên chính xác hơn
- Việc đảm bảo khả năng tương thích và độ tin cậy của mã Go được triển khai trên nhiều nền tảng được dự đoán sẽ trở nên dễ dàng hơn
2 bình luận
Mỗi lần xem các bài đăng về ngôn ngữ Go, tôi luôn có cảm giác trong phần bình luận thế nào cũng sẽ có mấy ý kiểu
'Rust thì đâu có thế', 'Rust thì đâu cần như vậy' xuất hiện, haha
Ý kiến Hacker News
assertđể chương trình crash nếu vượt quá ngưỡng trên. Chỉ là nếu bị OS tước lịch chạy hoặc có nhiễu thời gian khác thì cách này sẽ khó áp dụng.make check, rồi chạy lại y hệt bằngmake check-valgrindtrong môi trường Valgrind. Cái sau chỉ dùng trên máy của lập trình viên. Làm như vậy thường xuyên giúp phát hiện rò rỉ bộ nhớ hoặc những lỗi rất tinh vi.-gcflags -m=3hoặc các thiết lập trong plugin Go của VSCode nhưui.codelenses,ui.diagnostic.annotations, nên khá bất tiện.pprofcũng hoạt động khá tốt; tôi tò mò anh còn muốn thêm tính năng gì nữa.unsafe, nhưng cũng có nơi bắt buộc phải dùng. Việc dùng FFI với C cũng rất phổ biến, nên sớm muộn gì cũng có nhu cầu. Trước đây khi tôi làm một module Rust cho nginx (thời chưa có binding chính thức hay không chính thức), tôi hay mắc lỗi nên từng nhận được nhiều trợ giúp từ valgrind.unsafe, dùng bao nhiêuunsafe crate, hay liên kết với thư viện C/C++ ở mức nào. Ngay cả với Java, .NET hay Node, đôi khi vì phụ thuộc bên ngoài mà vẫn phát sinh nhu cầu như vậy.