2016-04-05 11 views
6

Model Filesystem Technical Specification (TS) został niedawno połączony ze standardem C++ 17.Czy można bezpiecznie używać specyfikacji technicznych C++ zatwierdzonych dla przyszłego standardu we wcześniejszym standardzie?

Ta sama TS jest również dostępna dla C++ 14, ale w tym przypadku jest technicznie tylko "eksperymentalna". Jednak fakt, że został zatwierdzony dla C++ 17 sprawia, że ​​myślę, że jest wystarczająco dojrzały i że można go bezpiecznie używać.

Podczas pracy nad projektem C++ 14, który najprawdopodobniej zostanie uaktualniony do C++ 17 w przyszłości i zakładając, że kompilator, którego używam, obsługuje go w obu wersjach, odradziłbym korzystanie z "eksperymentalnej" TS, biorąc pod uwagę że oficjalnie stanie się częścią następnego standardu?

Moje pytanie dotyczy oczywiście każdej TS, która została zaakceptowana w przyszłej wersji C++ i jest dostępna dla wcześniejszych standardów.

+0

Zapytaj swojego dostawcę. Największym problemem jest to, że interfejsy API zmieniają się między TS a IS w arbitralny sposób, więc nie można oszacować przyszłego kosztu migracji. Koszt * może * być jednak bardzo mały. –

+0

Nie można uzyskać gwarancji tutaj. W mało prawdopodobnym przypadku nadal się to kończy, trudno sobie wyobrazić, że powrót do Boost.Filesystem zajmie więcej niż kilka godzin. Niezależnie od tego, czy uważasz, że jest to "bezpieczne", to nikt się nie domyśla. –

+1

Nie, chyba że uważasz, że Twój kompilator jest w stanie przewidzieć przyszłość. – EJP

Odpowiedz

4

Prawdziwe pytanie brzmi: czy ktoś go zaimplementował, czy nie został zatwierdzony/scalony/cokolwiek z jakiegoś arbitralnego dokumentu. Funkcje mogą być wycinane, dodawane lub modyfikowane w dowolnym momencie procesu standaryzacji. Widzieliśmy, że rzeczy zostały usunięte z C++ 14 tuż przed wydaniem, a także rzeczy, które nie mogły być później zmienione. Dostawcy polegają na określonych wersjach dokumentów podczas implementowania funkcji, więc jedyną pewną metodą jest zapoznanie się z dokumentacją dowolnego kompilatora, z którego korzystasz.

2

Rzeczywiste implementacje mogą zawierać funkcje, które nie są w aktualnym standardzie, i mogą mieć wady w innych funkcjach, które są zdefiniowane w standardzie, a nawet mogą nie być w stanie zaimplementować określonych części - Microsoft wiedział, że niektóre części standardu są niezatwierdzone.

Ale jeśli kompilator obsługuje funkcję, a ta funkcja jest częścią następnego standardu, nie istnieje ryzyko, że zniknie ona w przyszłej wersji tego konkretnego kompilatora.

Po prostu, jakikolwiek inny kompilator może nie zaimplementować go tak szybko, jak jest zatwierdzony w standardzie, ale jesteś wiedzieć, czy jest to problem w konkretnym przypadku użycia.

2

Czy można bezpiecznie używać specyfikacji technicznych C++ zatwierdzonych dla przyszłych standardów we wcześniejszym standardzie?

To zależy co masz na myśli przez "bezpieczne"

  1. Czy to przenośny?

nr

  1. Czy to działa?

Należy sprawdzić informacje o wersji swojej wersji zestawu narzędzi oraz uwagi do wersji standardowej biblioteki (mogą być inne).

  1. Czy będzie działać jutro?

Kto wie?

  1. Czy powinienem inwestować czas w kod, który zakłada, że ​​działa?

prawdopodobnie nie.

Podsumowując, odpowiedź brzmi "nie".

Skorzystaj z wersji doładowania, dopóki standard nie zostanie opublikowany, a Twój kompilator i biblioteka standardowa będzie z nim zgodna.

Powiązane problemy