2015-05-17 9 views
35

Komitet standardów C++ pracuje nad rozszerzeniem TS (specyfikacja techniczna) dla koncepcji: "Języki programowania - Rozszerzenia C++ dla koncepcji". N4377 to najnowsza wersja tego dokumentu. Aby włączyć do standardu C++, funkcje powinny zostać wdrożone, najlepiej dla publicznie dostępnego systemu.W jaki sposób mogę zbudować gcc z koncepcjami C++ ("concept lite")?

Jestem świadomy concept-gcc, ale powyższa propozycja koncepcji (potocznie zwana Concepts Lite) jest inna. Słyszałem, że istnieje gałąź koncepcyjna i wypróbowałem lustro origin/asutton/c++-concepts od gcc, ale to się nie skompilowało. Jak zbudować i używać wersji koncepcji wspierających gcc, jak określono w powyższym [projekcie] TS?

+1

Powinny być oznaczone jako "FAQ"? –

+8

Źródło efektu meta: https://meta.stackoverflow.com/questions/294659/should-i-avoid-reviewing-altogether –

+1

@JeffreyBosboom: bardzo dziękuję za wskaźnik. To interesująca lektura. Nie sądzę, żebym poprosił o znalezienie czegoś, ale raczej o istnienie implementacji (i podanie "konstruktywnego dowodu" jako odpowiedzi), ale przeformułowałem to pytanie w kategoriach "problemu", jak zaleca się w tekście pytania nie na temat. –

Odpowiedz

26

Według Andrew Suttona lustro git z pracy Concepts Lite jest całkowicie nieaktualne i nie powinno być używane. W repozytorium svn znajduje się gałąź pojęć dla gcc implementująca "koncepcje-lite" (wcześniejsza próba C++ 11 polegała na dodawaniu pojęć do C++, porzucono nowy wysiłek dodawania pojęć do C++ przy użyciu nazwy koncepcje lite). Jest dość prosta do zbudowania (zakładając, że masz już najnowszą gcc i pakiety, które to zależy od zainstalowanej wersji, zobacz instrukcję instalacji gcc dla innych opcji, które możesz chcieć przekazać: poniższe instrukcje były dla mnie przydatne, z wyjątkiem tego, że wyraźnie wskazałem configure na miejsca, gdzie gmp, mpc i mpfr są zainstalowane):

cd <suitable-directory> 
svn checkout svn://gcc.gnu.org/svn/gcc/branches/c++-concepts 
mkdir build-concepts 
cd build-concepts 
../c++-concepts/configure --prefix=<concept-gcc-root> --disable-bootstrap --enable-languages=c,c++ 
make -j8 
make install 

Co nie jest do końca jasne jest, jak faktycznie użycie koncepcje: Opcja -fconcepts istnieje, ale wydaje się bezwarunkowo zrobić coś innego niż pojęć umożliwiających -lite. Zamiast tego należy użyć opcji -std=c++1z podczas kompilacji z włączonymi pojęciami.

+2

Uwaga dla czytelnika: "concepts-lite" jest roboczym tytułem bieżącego rozszerzenia "Concepts" dla C++, w celu odróżnienia go od obecnie porzuconych koncepcji koncepcji ostatniej dekady (która nazywa się "koncepcjami 0x") jeśli wymagane jest rozróżnienie). –

+0

Dzięki. To jest doceniane. Jakieś wieści, kiedy to zostanie połączone w główną linię? –

+1

@LokiAstari: kiedy zapytałem ludzi o obsługę pojęć w gcc, ogólne stwierdzenie było takie, że zostanie ono połączone "naprawdę szybko", ale nie podano konkretnej daty. To pytanie jest przeznaczone przede wszystkim do przechwycenia tego, co było mi potrzebne, aby dowiedzieć się, jak zdobyć gcc z włączonymi pojęciami. –

25

Od Fri, 7 Aug 2015 01:44:49 -0400 (05:44 +0000) obsługa pojęć została scalona z pniem GCC.

Korzystając z kompilacji od tego momentu, można włączyć obsługę koncepcji za pomocą flagi -std=c++1z.

Począwszy od gcc 6.1 (27-04-2016), pojęcia są włączane przez -fconcepts, ponieważ jest mało prawdopodobne, aby były zawarte w C++ 17, więc zostały usunięte z -std=c++1z. (przez @BruceAdams w komentarzach poniżej)

+1

Witaj Yakk, to wspaniałe, że gcc ma "pojęcia". Zastanawiam się, czy możesz mi pomóc (plz) z tym. Zastosowałem się do wszystkich wymienionych instrukcji [tutaj] (http://www.linuxfromscratch.org/blfs/view/svn/general/gcc.html) i zbudowałem gcc z jego najnowszej wersji (5.3), ale kod źródłowy z pojęciami nie jest kompilowany (na przykład [this] (http://melpon.org/wandbox/permlink/xQC9StRPbGlHTV48)). Użyłem flagi '-std = C++ 1z', ale wygląda na to, że rozmawiasz o jeszcze nowszej wersji. Czy możesz mi pomóc to pobrać? –

+3

Od gcc 6.1 (wydanie 27-04-2106) można włączyć koncepcje za pomocą -konceptów. The -std = C++ 1z nie jest już odpowiedni, ponieważ pojęcia znajdują się w TS, który jest obecnie mało prawdopodobny do połączenia z C++ 17 (pojazd TS umożliwia zdobycie doświadczenia w implementacji przed standaryzacją). –

+0

@BruceAdams Dzięki, zaktualizowany. – Yakk

Powiązane problemy