2009-11-07 15 views
5

Znalazłem wczoraj błąd w środowisku .Net i odkryłem, że jest to znany błąd, który nie zostanie naprawiony. W skrócie błąd jest, że klasa, która zawiera pole typu IComparable nie może być binarny odcinkach i rozszeregować gdy int (i ewentualnie inne typy binarne) są przypisane do tego pola:Czy ten błąd powinien zostać naprawiony?

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

Jeśli spróbujesz do serializacji (i deserializacji) następujące dwa obiekty pierwszy uda, a drugi nie powiedzie:

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

opisać to bardziej szczegółowo tutaj: http://ondevelopment.blogspot.com/2009/11/fix-that-bug-will-ya-no.html

i raport błędów można znaleźć tutaj (zauważ, że to sprawozdanie pochodzi z 2006 r. i nie został przeze mnie zgłoszony): http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=91177

Nie zostanie to naprawione, ponieważ "ryzyko zmiany przeważa nad korzyścią". Nie widzę żadnych (podatnych) scenariuszy, w których byłaby to przełomowa zmiana. Moje prawdziwe pytanie brzmi: czy ktokolwiek może pomyśleć o prawdziwym scenariuszu, w którym byłaby to przełomowa zmiana?

+0

Działa poprawnie z Mono/gmcs 2.0.1. – Thomas

+0

@Thomas, to interesujące. W rzeczywistości może to być zgłoszone jako błąd w zespole Mono, ponieważ o ile wiem, starają się odzwierciedlić błędy w BCL. –

+0

Microsoft nigdy nie robił wielkich zmian w żadnym z ich systemów, które mogłyby potencjalnie złamać istniejące wcześniej oprogramowanie, bazując na starych rzeczach (hellooo, nadęty system operacyjny!). Sądzę, że musiałbyś jakoś najpierw zmienić całą firmę, aby to naprawić. – Esko

Odpowiedz

1

Nie widzę żadnych (feesible) scenariuszy, w których byłoby to łamanie zmiana

Nie sądzę, nie będzie jakimkolwiek celowym zmiana łamanie, ale istnieją inne zagrożenia związane z błędami mocujących które mogłyby wprowadzić regresję.

Twój przykład wygląda na wymyślony, więc myślę, że doszli do wniosku, że ryzyko przewyższa korzyści. Dali ci również możliwość skontaktowania się z PSS, jeśli to naprawdę powoduje problem.

+0

To nie ja zgłosiłem błąd, ponieważ raport o błędzie ma cztery lata. Dla mnie to nie jest duży problem, interesują mnie jedynie problemy, które może spowodować poprawka. W żaden sposób nie sugeruję, że się mylą, po prostu mówię, że nie mogę wymyślić scenariusza, w którym to jest przełomowa zmiana i jestem ciekawy, czy ktoś inny może to zrobić. –

+0

"Nie mogę wymyślić scenariusza, w którym to jest przełomowa zmiana" - wewnętrzne zasady wdrażania serializacji są złożone i nie trzeba wymyślać scenariusza, aby zrozumieć, że zmiana złożonego kodu wiąże się z ryzykiem. – Joe

+0

Jak mi przykro z tego przykładu? Przykład tutaj w pytaniu jest prosty bug repro, sprawdź wpis na blogu, aby bardziej szczegółowo opisać prawdziwy problem.Mówisz, że boją się rozwiązać ten problem, ponieważ może to zepsuć coś zupełnie niezwiązanego ze sobą? Bez sprawdzania źródła implementacji serializacji binarnej nie mogę powiedzieć, czy jest to prawdopodobne, czy nie. Ale wydaje mi się, że jest to urażone. –

2

Założę się, że dokonali bardzo wymyślnych optymalizacji w przypadku rodzimych typów, takich jak int do serializacji lub nawet innych części systemu.

Cofanie może być ryzykowne ze względu na to, że może to spowodować regresję poprawności lub wydajności, lub jedno i drugie.

Powiązane problemy