Tôi đã dành vài tuần qua để tìm hiểu bộ mã hóa TLV trong Rust: độ dài kiểu giá trị—chiêu trò lâu đời nhất để đóng gói dữ liệu sao cho nó có thể mở rộng mà không làm hỏng các trình đọc cũ. Một khi tôi nghĩ it through cho Dusk, lý do đã bật sáng. Một chuỗi như @Dusk gửi tin nhắn qua đường truyền liên tục, các peer liên tục thì thầm với nhau về hợp đồng, gọi vào ví, đồng bộ với nhau. Tất cả đều cần một định dạng có thể sống sót khi ai đó thêm một trường mới sau này, hai năm kể từ bây giờ.
Rust làm phần khó chịu gần như trở nên tẻ nhạt—và đó chính là điểm. Kiểm tra giới hạn. Từ chối việc tin vào một byte độ dài khẳng định rằng nó đọc được 4GB.
Một bộ phân tích (parser) bị panic khi gặp dữ liệu rác là một parser mà bạn không thể chạy trên một mạng nơi những byte ngẫu nhiên xuất hiện không được mời. Tôi gắn với các lát cắt đơn giản &[u8] để tránh sao chép cho đến khi tôi thực sự cần, và dựa vào một enum cho byte kiểu để trình biên dịch bắt lỗi cho bất kỳ trường hợp nào mà tôi quên xử lý.
Đừng bỏ qua phần code đẩy byte trông “xấu xí”. Viết nó trước và viết nó theo kiểu hoài nghi (paranoid). Mọi thứ khác bạn xây dựng đều phụ thuộc vào việc nó không nói dối bạn. #dusk
$DUSK