2009-11-07 38 views
5

Tôi đã tìm thấy một lỗi trong khuôn khổ .Net ngày hôm qua và thấy rằng nó là một lỗi đã biết sẽ không được sửa. Nói tóm lại các lỗi là một lớp có chứa một lĩnh vực loại IComparable không thể nhị phân serialized và deserialized khi một int (và các loại nhị phân có thể khác) được giao nhiệm vụ đến lĩnh vực đó:Lỗi này có nên được khắc phục không?

[Serializable] 
public class Foo 
{ 
    public IComparable Value; 
} 

Nếu bạn cố gắng serialize (và deserialize) hai đối tượng sau cái đầu tiên sẽ thành công và điều thứ hai sẽ thất bại:

var s = new Foo { Value = "foo" }; 
var i = new Foo { Value = 1 }; 

tôi mô tả này chi tiết hơn ở đây: http://ondevelopment.blogspot.com/2009/11/fix-that-bug-will-ya-no.html

và báo cáo lỗi bạn có thể tìm thấy ở đây (lưu ý rằng báo cáo này là từ năm 2006 và không được tôi nộp): http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=91177

Điều này sẽ không được khắc phục vì "nguy cơ sửa lỗi vượt quá lợi ích của nó". Tôi không thấy bất kỳ kịch bản (có thể chịu trách nhiệm) nào mà đây sẽ là một thay đổi đột phá. Vì vậy, câu hỏi thực sự của tôi là, bất cứ ai có thể nghĩ về một kịch bản thực sự, nơi đây sẽ là một thay đổi phá vỡ?

+0

Hoạt động chính xác với Mono/gmcs 2.0.1. – Thomas

+0

@Thomas, điều đó thật thú vị. Trên thực tế điều này có thể được nộp như một lỗi với đội Mono sau đó kể từ khi tôi biết họ cố gắng để phản ánh các lỗi trong BCL. –

+0

Microsoft chưa bao giờ thực hiện các thay đổi lớn đối với bất kỳ hệ thống nào có khả năng phá vỡ bất kỳ phần mềm nào tồn tại dựa trên các công cụ cũ (hellooo, bloat của các hệ điều hành!). Tôi tin rằng bạn sẽ thực sự phải bằng cách nào đó thay đổi toàn bộ công ty đầu tiên để có được điều này cố định. – Esko

Trả lời

1

Tôi không thấy bất kỳ kịch bản (feesible), nơi đây sẽ là một sự thay đổi phá vỡ

Tôi không nghĩ sẽ có bất kỳ thay đổi phá vỡ cố ý, nhưng có những rủi ro khác liên quan đến việc sửa chữa lỗi có thể giới thiệu hồi quy.

Ví dụ của bạn có vẻ giả tạo, vì vậy tôi nghĩ rằng họ kết luận rằng các rủi ro vượt quá lợi ích. Họ cũng cho bạn cơ hội liên lạc với PSS nếu điều này thực sự gây ra vấn đề cho bạn.

+0

Nó không phải là tôi đã nộp lỗi, như bạn thấy báo cáo lỗi là bốn tuổi. Nó không phải là một vấn đề lớn đối với tôi, tôi chỉ quan tâm đến những vấn đề mà sửa lỗi có thể gây ra. Tôi không có cách nào ngụ ý rằng họ sai, tôi chỉ nói rằng tôi không thể đưa ra một kịch bản mà nó là một thay đổi phá vỡ và tôi tò mò muốn xem có ai khác có thể. –

+0

"Tôi không thể đưa ra một kịch bản mà nó là một thay đổi phá vỡ" - nội bộ của việc serialization được triển khai phức tạp như thế nào, và bạn không cần phải đưa ra một kịch bản để hiểu rằng việc thay đổi mã phức tạp có rủi ro. – Joe

+0

Ví dụ của tôi bị ảnh hưởng như thế nào? Các ví dụ ở đây trong câu hỏi là một repro lỗi đơn giản, kiểm tra các bài đăng blog để biết thêm chi tiết mô tả của một vấn đề thực sự.Những gì bạn đang nói là họ sợ phải khắc phục vấn đề này bởi vì nó có thể phá vỡ một cái gì đó hoàn toàn không liên quan? Nếu không kiểm tra nguồn gốc của việc thực hiện tuần tự hóa nhị phân, tôi không thể cho bạn biết nếu tôi nghĩ rằng có khả năng hay không. Nhưng đối với tôi, điều đó dường như bị ảnh hưởng. –

2

Đặt cược của tôi là họ đã thực hiện một số tối ưu hóa rất có lợi trong trường hợp các kiểu gốc như int cho serialization hoặc thậm chí các phần khác của hệ thống.

Hoàn tác điều đó có thể nguy hiểm ở chỗ nó có thể đúng hoặc hồi quy hiệu suất hoặc cả hai.

Các vấn đề liên quan