Pytanie Jak mogę zbudować gcc z koncepcjami C ++ ("concept lite")?


Komitet standardów C ++ pracuje nad rozszerzeniem TS (specyfikacji technicznych) 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.

jestem swiadomy concept-gcc ale powyższy projekt koncepcyjny (potocznie określany jako Koncepty Lite) jest inny. Słyszałem, że istnieje gałąź koncepcyjna i próbowałem origin/asutton/c++-concepts od gcc„s git lustro, ale to się nie skompilowało. Jak zbudować i używać wersji koncepcji wspierających gcc, jak określono w powyższym [projekcie] TS?


37
2018-05-17 18:02


pochodzenie


Powinien być oznaczony jako "FAQ"? - Kerrek SB
Źródło efektu meta: meta.stackoverflow.com/questions/294659/... - Jeffrey Bosboom
Odkąd widzę nowy głos zamknięty: czy ktoś może mi teraz wyjaśnić, co jest nie tak z tym pytaniem? Z pewnością nie zadaje pytania "znajdź mnie ...", na co wskazuje aktualne głosowanie przybliżające (ani też wersja oryginalna, zwłaszcza, że ​​opublikowana odpowiedź już znalazła to narzędzie). Naprawdę myślę, że informacje w odpowiedzi, a ja zmienię pytanie na akceptowalne. - Dietmar Kühl
Możliwe, że wyborcy nie przeczytali dokładnie twojej aktualizacji. - JasonMArcher
Proszę, powstrzymaj się od rezygnacji / prośby o zamknięcie, chyba że rozumiesz, jak działa proces standaryzacji C ++, co to jest TS i dlaczego ważne jest posiadanie dostępnych narzędzi do wypróbowania zmian w TS, zanim będzie on w normie i wymuszony na wszystkich użytkownikachMając dostęp do narzędzi, które mogą być używane do wykrywania niespójności w TS, zanim stanie się on standardowy i wygrawerowany w kamieniu, ma on absolutnie ważne. To jest na temat dla każdego, kto interesuje się tagiem C ++. - David Rodríguez - dribeas


Odpowiedzi:


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ęć gcc implementowanie "koncepcji-lite" (w C ++ wprowadzono starania, aby dodać koncepcje do C ++, porzucono nowy wysiłek dodawania koncepcji do C ++ przy użyciu nazwy lite). Jest dość prosta do zbudowania (zakładając, że masz już najnowszą gcc i pakiety, które to zależy od zainstalowanego, zobacz instrukcję instalacji gcc dla innych opcji, które możesz chcieć przekazać: instrukcje poniżej działały dla mnie, z wyjątkiem tego, że wyraźnie wskazałem configure w miejscach, w których 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

To, co nie jest całkowicie oczywiste, to jak właściwie posługiwać się koncepcje: opcja -fconcepts istnieje, ale wydaje się, że bezwarunkowo robi coś innego niż umożliwia koncepcję - lite. Zamiast tego używałbyś -std=c++1z opcja przy kompilacji z włączonymi pojęciami.


26
2018-05-17 18:02



Uwaga dla czytelnika: "concepts-lite" jest roboczym tytułem bieżącego rozszerzenia "Concepts" dla C ++, aby odróżnić go od obecnie porzuconych koncepcji koncepcji ostatniej dekady (która nazywa się "koncepcjami 0x", jeśli rozróżnienie jest wymagane). - Kerrek SB
@LokiAstari: kiedy zapytałem ludzi o wsparcie dla koncepcji w gcc, ogólne stwierdzenie brzmiało, że zostanie ono "wkrótce" połączone, 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. - Dietmar Kühl
@LokiAstari: Ludzie muszą zacząć grać z nim, aby zdobyć doświadczenie (to pytanie jest bardzo istotne dla tego), tak aby podejście można było przetestować i wyprostować. Bjarne ma nadzieję (lub raczej jest w jakiś sposób zdeterminowany), aby było to w C ++ 17, ale są też inne osoby z niepokojami. Mając dostęp do narzędzia do wykonania rzeczywistego napędu testowego ważny na ewolucję języka, a zamknięcie tego pytania jest smutne i niepomocne. - David Rodríguez - dribeas
Gałąź koncepcyjna gcc została scalona z pnia. - Eric Niebler
Ta odpowiedź musi zostać zaktualizowana, aby dokumentować zachowanie gcc 6.1. - Janus Troelsen


Od teraz Pt, 7 sierpnia 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żesz włączyć obsługę pojęć za pomocą -std=c++1z flaga.

Począwszy od gcc 6.1 (27-04-2016), koncepcje 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. (via @BruceAdams w komentarzach poniżej)


26
2017-08-26 15:25



Cześć Yakk, to wspaniałe, że gcc ma "pojęcia". Zastanawiam się, czy możesz mi pomóc (plz) z tym. Przestrzegałem wszystkich wymienionych instrukcji tutaj i zbudował gcc z jego najnowszej wersji (5.3), ale kod źródłowy z koncepcjami nie kompiluje się (na przykład to). Użyłem -std=c++1z flagę, ale wygląda na to, że rozmawiasz o jeszcze nowszej wersji. Czy możesz mi pomóc to pobrać? - Lorah Attkins
Od wersji gcc 6.1 (wydanej 27-04-2106) można włączyć koncepcje z opcjami -concept. 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ą). - Bruce Adams
@BruceAdams Dzięki, zaktualizowany. - Yakk - Adam Nevraumont