Câu hỏi này áp dụng cho bất kỳ ngôn ngữ nào được viết bằng một ngôn ngữ ("nguồn"), ví dụ: C hoặc Java và được phân phối trong một tệp khác ("nhị phân"), ví dụ: mã máy hoặc mã byte Java, sử dụng liên kết động.Phiên bản ngữ nghĩa có áp dụng cho nguồn hoặc tương thích nhị phân không?
Giả sử người dùng đang sử dụng phiên bản A của thư viện của tôi. Tôi phát hành một phiên bản mới hơn B.
Nếu ông có thể biên dịch mã của mình mà không thay đổi so với B và chính xác chạy với B, sự thay đổi từ A đến B được cho là nguồn tương thích.
Nếu anh ta có thể biên dịch mã của mình với A và chạy đúng với B, thay đổi từ A sang B được gọi là tương thích nhị phân. Tình huống này là phổ biến khi sử dụng biểu đồ phụ thuộc chuyển tiếp mà không tải mô-đun bị cô lập (ví dụ: OSGI). X được biên dịch dựa trên các phiên bản Y và Z nhất định và Y được biên dịch dựa trên phiên bản Z khác nhất định. Khi chạy, các cuộc gọi của Y thành Z có thể không chính xác và có thể bị lỗi.
Có thể các thay đổi là nguồn tương thích, nhưng nhị phân không tương thích. Cũng có thể cho những thay đổi là nguồn không tương thích và tương thích nhị phân.
Tôi nên sử dụng tính tương thích nào cho phiên bản ngữ nghĩa? Tôi có sử dụng khả năng tương thích nguồn để phân biệt giữa cập nhật lớn và nhỏ/bản vá hay tôi sử dụng khả năng tương thích nhị phân để phân biệt giữa cập nhật lớn và nhỏ/bản vá?
Động lực hiện tại của tôi là thư viện Scala. Khả năng tương thích nhị phân Scala có thể rất khó phân tích và yêu cầu hiểu rõ về các chi tiết về trình biên dịch. Nguồn tương thích và nhị phân không tương thích là rất phổ biến.
Đây không phải là trường hợp cạnh kỳ lạ; vấn đề này có thể xuất hiện trong hầu hết mọi ngôn ngữ được biên dịch, được liên kết động.
Khả năng tương thích nguồn có nghĩa là mã của người dùng biên dịch mà không có thay đổi, vì vậy nói về người dùng không phải là lập trình viên hoặc không biết về mã nguồn có vẻ khá vô nghĩa ở đây. Ngoài ra, việc có các lược đồ phiên bản riêng biệt sẽ đơn giản chuyển câu hỏi cho người dùng - tôi có nên sử dụng lược đồ phiên bản với nguồn hoặc với ngữ nghĩa tương thích nhị phân không? – matz
Lưu ý từ "giả vờ" trong câu trả lời của tôi. Có những lúc mà các lập trình viên không quan tâm đến mã nguồn. Tôi nghi ngờ, mặc dù, đưa ra nhận xét của bạn rằng bạn có mối quan tâm không được nêu trong câu hỏi này. Có lẽ xây dựng trên vấn đề cụ thể của bạn trong một bình luận cho câu hỏi ban đầu là theo thứ tự. – eh9