GCC (GNU Compiler Collection) on avoimen lähdekoodin komentorivin ohjelmisto, joka on suunniteltu toimimaan kääntäjänä GNU / Linux- ja BSD-pohjaisille käyttöjärjestelmille. Se sisältää etupään lukuisille ohjelmointikielille, mukaan lukien Objective-C, Go, C ++, Java, C, Ada ja Fortran.
Ominaisuudet yhdellä silmäyksellä
GCC: n avulla voit määrittää, kääntää ja asentaa GNU / Linux-sovelluksia Linux- tai BSD-käyttöjärjestelmissä vain vastaavan ohjelman lähdetietokannasta. Käyttäjät eivät kuitenkaan tarvitse olla vuorovaikutuksessa kääntäjän kanssa, koska tämä tekee automaattisesti määrityksen ja tekee komentosarjoja.
Projektissa on myös kirjastoja eri ohjelmointikieliä, kuten libstdc ja libgcj, ja kuten useimmat GNU-ohjelmistot, se on määritettävä ennen kuin se voidaan rakentaa ja asentaa tietokoneeseesi.
Se voi myös näyttää tietyn kirjaston koko polun, kääntäjän hakupolun kansiot, tietyn osan täydellisen polun, kohdekirjastojen hakemiston, sysroot-loppuliitteen, jota käytetään otsikoiden etsimiseen ja tavoite normalisoitu GNU-tripletti.
Lisäksi on olemassa useita muita vaihtoehtoja tiettyjen pilkulla erotettujen vaihtoehtojen ja argumenttien siirtämiseen kokoonpanijalle, esikäsittelyjärjestelmälle ja linkittäjille, koota ja koota ilman linkittämistä, luoda jaettu kirjasto ja monet muut.
Suunniteltu GNU-käyttöjärjestelmälle
Koska alun perin kirjoitettiin GNU-käyttöjärjestelmän pääkääntäjänä, GCC (GNU Compiler Collection) kehitettiin 100% vapaaksi ohjelmaksi ja se asennetaan oletuksena Linux-jakelussa.
Myös Open Source -kehittäjät käyttävät ohjelmistoa ohjelmiensa kääntämiseen. Komentorivillä on useita vaihtoehtoja, joista mainittakoon kyky näyttää kääntäjän kohdeprosessori sekä OS-kirjastojen suhteellinen polku.
Bottom line
Kaiken kaikkiaan GCC on yksi GNU / Linux-käyttöjärjestelmän olennainen osa. Ei vain, että emme voi edes kuvitella maailmaa ilman sitä, mutta GCC on tärkein syy koko Open Source -ekosysteemille.
Uutta strong> tässä julkaisussa:
- GCC 7.3 on bugikorjaus GCC 7: n sivulta, joka sisältää tärkeät korjaukset regressioihin ja vakaviin virheisiin GCC 7.2: ssä, jossa on yli 99 vikaa, jotka on korjattu edellisen julkaisun jälkeen.
- Tämä julkaisu sisältää koodinmuodostusvaihtoehdot, joilla lievennetään Specter Variant 2 (CVE 2017-5715) x86- ja powerpc-kohteille.
Uutta strong> versiossa 8.1.0:
- GCC 7.3: GCC 7: n haara, joka sisältää tärkeät korjaukset regressioihin ja vakaviin virheisiin GCC 7.2: ssä, jossa on yli 99 virhettä, jotka on korjattu aiemman julkaisun jälkeen.
- Tämä julkaisu sisältää koodinmuodostusvaihtoehdot, joilla lievennetään Specter Variant 2 (CVE 2017-5715) x86- ja powerpc-kohteille.
Uutta strong> versiona:
- GCC 7.1 on merkittävä julkaisu, joka sisältää merkittäviä uusia toimintoja, joita ei ole saatavilla GCC 6.x: ssä tai aikaisemmissa GCC-julkaisuissa. C ++ -rajapintaan on nyt kokeilullinen tuki kaikelle tämänhetkiselle C ++ 17 -luonnokselle, jossa on -std = c ++ 1z ja -std = gnu ++ 1z -asetukset, ja libstdc ++ -kirjastolla on suurin osa C ++ 17 -luonnoksesta kirjaston ominaisuudet toteutetaan myös. Tämä julkaisu sisältää useita parannuksia lähetettyyn vianmääritykseen, mukaan lukien parannetut sijainnit, sijaintialueet, vääränlaisten tunnisteiden ehdotukset, lisävarusteiden nimet, korjausvihjeet ja useita uusia varoituksia. Optimointiaineita on parannettu, ja parannukset näkyvät kaikissa intra- ja inter-proceduurisissa optimoinnissa, linkin aikaoptimoinnissa ja erilaisissa kohdepelissä, mukaan lukien, mutta niihin rajoittumatta, tallennusyhdistelmän lisäykset, koodin nostamisen optimointi, silmukan jakaminen ja kutistuminen kääreparannukset. Address Sanitizer voi nyt raportoida muuttujien käyttötarkoituksen jättämisen jälkeen. GCC voidaan nyt määrittää OpenMP 4.5: n purkamiseen NVidia PTX GPGPU: ille.
Uutta strong> versio 6.3.0:
- GCC 6.3 on bugikorjaus GCC 6-haarasta, joka sisältää tärkeät korjaukset regressioihin ja vakaviin virheisiin GCC 6.2: ssä, jossa on yli 79 virhettä, jotka on korjattu aiemman julkaisun jälkeen.
Uutta strong> versio 6.2.0:
- Tämä julkaisu on virheenkorjausversio, joka sisältää korjauksia GCC 5.2: n GCC 5.2: n aiempiin julkaisuihin verrattuna.
Uutta strong> versiossa 6.1.0:
- Tämä julkaisu on virheenkorjausversio, joka sisältää korjauksia GCC 5.2: n GCC 5.2: n aiempiin julkaisuihin verrattuna.
Uutta strong> versiossa 5.3.0:
- Tämä julkaisu on virheenkorjausversio, joka sisältää korjauksia GCC 5.2: n GCC 5.2: n aiempiin julkaisuihin verrattuna.
Uutta strong> versio 5.2.0:
- Tämä julkaisu on virheenkorjausraportti, joka sisältää GCC 5.1: n aikaisempien julkaisujen GWS 5.1: n regressioihin liittyviä korjauksia.
Uutta strong> versiossa 5.1.0:
- C + + front-endilla on täysi C ++ 14 -kieltosovellus ja Standard C ++ -kirjastolla on täysi C ++ 11 -tuki ja kokeellinen täydellinen C ++ 14 -tuki. Täysi C ++ 11-tuki on mahdollistanut Dual ABI: n käyttöönoton, katso lisätietoja kohdasta https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html.
- C-käyttöliittymä on nyt oletuksena C11-tilassa GNU-laajennuksilla, mikä vaikuttaa sisääntulevan avainsanan semantiikkaan ja tuo useita muita näkyvissä olevia muutoksia, katso https://gcc.gnu.org/gcc-5/porting_to.html lisätietoja.
- GCC 5.1 sisältää erilaisia interprosessoidun optimoinnin parannuksia, esim. uusi IPA-identtinen koodin taittokortti ja erilaiset LTO-parannukset, esim. ODR-pohjainen C ++ -tyyppien yhdistäminen, katso lisätietoja osoitteesta http://hubicka.blogspot.cz/2015/04/GCC5-IPA-LTO-news.html.
- GCC 5.1 Local Register Allocatorissa on nyt rematerialisointialipassi, kun i? 86 / x86-64 pystyy käyttämään PIC-kovalevyä uudelleen paikan itsenäisen koodin suorituskyvyn parantamiseksi, on yksinkertainen interprocedural RA-passti ja erilaiset muut rekisterit kohdennuksen parannuksia lisättiin.
- GCC 5.1 lisää osittaisen tuen OpenACC-standardille, tuki OpenMP 4.0: n purkamiseksi Intelin tuleville Xeon Phi -kiihdyttimille ja tuki OpenACC-purkamisesta PTX: lle. GCC: n Undefined Behavior Sanitizeria on laajennettu lisäämällä useita uusia runtime-tarkistuksia. Kokeellinen GCC JIT -kirjasto on lisätty GCC 5.1: ään.
Uutta strong> versio 4.8.4:
- Yleinen optimoijan parannukset:
- Osoiteanalyysi, nopea muisti -virheilmaisin, on nyt saatavilla ARM: ssä.
- MäärittelemätönBehaviorSanitizer (ubsan), nopea undefined käyttäytymisen ilmaisin, on lisätty ja se voidaan ottaa käyttöön -fsanitize = undefined. Erilaisia laskutoimituksia analysoidaan määrittelemättömän käyttäytymisen havaitsemiseksi ajon aikana. UndefinedBehaviorSanitizer on tällä hetkellä saatavilla C- ja C ++ -kielille.
- Linkit-ajan optimointi (LTO):
- Tyyppi yhdistäminen kirjoitettiin uudelleen. Uusi toteutus on huomattavasti nopeampaa ja käyttää vähemmän muistia.
- Parempi osiointialgoritmi, joka johtaa vähemmän suoratoistoon linkin aikana.
- Virtuaalisten menetelmien pikainen poistaminen vähentää objektitiedostojen koon ja parantaa linkitystiedon käyttöä ja kokoa aikaa.
- Toimintoelimet ladataan nyt pyynnöstä ja vapautetaan varhaisessa vaiheessa parantamalla muistin kokonaissummaa linkin aikana.
- C ++ piilotettuja avainmenetelmiä voidaan nyt optimoida.
- Kun linkkeri-plugin on käytössä, kääntäminen -flto-vaihtoehdolla muodostaa nyt ohuet objektitiedostot (.o), jotka sisältävät vain LTO-välimuotoa. Käytä -ffat-lto-objekteja tiedostojen luomiseen, jotka sisältävät myös objektikoodin. Voit luoda LTO-käsittelyyn sopivia staattisia kirjastoja käyttämällä gcc-ar ja gcc-ranlib; merkkien viittaaminen ohuesta objektitiedostosta käyttää gcc-nm: tä. (Tämä edellyttää, että ar, ranlib ja nm on koottu plugin-tuki.)
- Muistin käyttörakennus Firefox, jonka debugilla oli käytössä, väheni 15 Gt: sta 3,5 Gt: aan; yhteysaika 1700 sekunnista 350 sekuntiin.
- Väliaikaiset optimointiparannukset:
- Uuden tyyppinen perintöanalyysimoduuli, joka parantaa devirtualisoitumista. Devirtualisointi ottaa nyt huomioon nimettömät nimet ja C + + 11 lopullinen avainsana.
- Uutta spekulatiivista devirtualisoitumislupaa (jota hallitsee -fdevirtualize-spekulatiivisesti.
- Spekulatiivisesti suoritetut puhelut käännetään takaisin epäsuoriksi, jos suorat puhelut eivät ole halvempia.
- Paikalliset aliakset otetaan käyttöön symboleissa, joiden tiedetään olevan semanttisesti samanlaisia jaettuja kirjastoja parantaen dynaamisia linkitysajoja.
- Palautteen kohdennetut optimointiparannukset:
- Ohjelmien profiili käyttämällä C ++ -line-toimintoja on nyt luotettavampi.
- Uusi aikaprofiili määrittää tyypillisen järjestyksen, jossa tehtävät suoritetaan.
- Uusi toimintojen uudelleensuuntausreitti (jota ohjaavat -freero-toiminnot) vähentää merkittävästi suurien sovellusten käynnistysaikaa. Siihen asti, kunnes binutils-tuki on valmis, se on tehokas vain linkki-ajan optimoinnilla.
- Palauteohjattu epäsuoran puhelun poisto ja devirtualisointi käsittelevät nyt ristikkäismuotoisia puheluita, kun linkit-ajan optimointi on käytössä.
- Uudet kielet ja kielikohtaiset parannukset:
- OpenMP-spesifikaation 4.0 versio on nyt tuettu C- ja C ++-kääntäjille ja alkaa myös 4.9.1 -versiosta Fortran-kääntäjältä. Uutta -fopenmp-simd-vaihtoehtoa voidaan käyttää OpenMP: n SIMD-direktiivien käyttöön ottamatta samalla OpenMP-ohjeita. Uusi -fsimd-cost-model = -vaihtoehto mahdollistaa vektorisuunnittelumallin mallin sovittamisen OpenMP- ja Cilk Plus simd -direktiiveihin merkittyihin silmukoihin. -Wopenmp-simd varoittaa, kun nykyinen kustannusmalli ohittaa käyttäjän asettamat simd-ohjeet.
- C, C ++ ja Fortran-kääntäjille on lisätty -Wdate-time -vaihtoehto, joka varoittaa, kun käytetään __DATE__, __TIME__ tai __TIMESTAMP__ makroja. Nämä makrot voivat estää bit-viisasta identtisiä toistettavia kokoelmia.
- Ada:
- GNAT siirtyi Ada 2012: n sijasta Ada 2005: n sijaan oletuksena.
- C-perhe:
- Lisätty GCC: n lähettämien diagnostiikan värjääminen. -Diagnostics-color = auto ottaa sen käyttöön, kun se lähtee päätteille, -diagnostics-color = aina ehdottomasti. GCC_COLORS-ympäristömuuttujaa voidaan käyttää värien mukauttamiseen tai väriaineen poistamiseen. Jos GCC_COLORS-muuttuja on ympäristössä, oletusarvo on -fdiagnostics-color = auto, muuten -fdiagnostics-color = never.
- Näytteen diagnostiikkatulostus:
- $ g ++ -diagnostics-color = aina -S -Wall test.C
- test.C: Toiminnossa & lsquo; int foo () ':
- test.C: 1: 14: varoitus: ei paluulomaketta, joka palauttaa ei-tyhjät [-Wreturn -tyyppiset]
- int foo () {}
- test.C: 2: 46: virhe: mallin instantiation syvyys ylittää enintään 900 (käytä -tyyppinen syvyys = lisätä maksimiarvoa) instantiating & lsquo; struct X '
- mallipohja rakenne X {staattinen const int value = X :: arvo; }; mallin rakenne X;
- test.C: 2: 46: rekursiivisesti vaaditaan & lsquo; const int X: arvosta li>
- test.C: 2: 46: vaaditaan & lsquo; const int X :: arvo '
- test.C: 2: 88: vaaditaan täältä
- test.C: 2: 46: virhe: epätäydellinen tyyppi & lsquo; X ', jota käytetään sisäkkäisessä nimenmäärityksessä
- Uuden #pragma GCC ivdepin avulla käyttäjä voi väittää, että silmukkakäytössä olevia riippuvuuksia ei ole, mikä estäisi peräkkäisten iterointien suorittamisen samanaikaisesti käyttäen SIMD-ohjeita (yhden käskyn moninkertaiset tiedot).
- Cilk Plus -tuen lisäys on lisätty ja se voidaan ottaa käyttöön -fcilkplus -vaihtoehdolla. Cilk Plus on C- ja C ++ -kielien laajennus tietojen ja tehtävän rinnakkaisuuden tukemiseksi. Tämä täytäntöönpano noudattaa ABI-versiota 1.2; kaikki ominaisuudet mutta _Cilk_for on toteutettu.
- Nyt on tuettu ISO C11 -atomia (_Tomic-tyyppinen määrittely ja karsinta ja otsikko).
- Tukee nyt ISO C11: n yleisiä valintoja (_Yleinen avainsana).
- Nyt tuetaan ISO C11 thread-local storage (_Thread_local, joka muistuttaa GNU C __thread).
- ISO C11 -tuki on nyt samanlaisella tasolla kuin ISO C99 -tuki: olennaisesti täydellisiä modulo-vikoja, laajennettuja tunnisteita (tuettuja paitsi nurkissa tapauksissa, joissa käytetään "lisättyjä tunnisteita"), liukulukuja (pääasiassa mutta ei kokonaan jotka liittyvät liitteiden F ja G valinnaisiin C99-ominaisuuksiin ja valinnaisiin liitteisiin K (Bounds-checking interfaces) ja L (Analysoitavuus).
- Uusi C-laajennus __auto_type tarjoaa C ++ 11 -auton toiminnallisuuden osajoukon GNU C: ssä.
- C ++:
- C ++ 1y: n G ++ -strategian toteutus normaaleihin toimintoihin on päivitetty noudattamaan N3638: aa, joka hyväksyttiin työpaperille. Erityisesti se lisää decltype (auto) -tyyppiä, jotta saadaan saksan tyyppinen semantiikka pikemminkin kuin yksinkertaisen automatiikan mallipohjan vähennysemantti:
- int & amp; f ();
- auto i1 = f (); // int
- decltype (auto) i2 = f (); // int & amp;
- G ++ tukee C ++ 1y: n lambda-talteenottoaloittajia:
- [x = 42] {...};
- Itse asiassa ne on hyväksytty GCC 4.5: n jälkeen, mutta nyt kääntäjä ei varoita niistä -std = c ++ 1y: llä ja tukee myös sulkeutuneita ja sulkeutuneita alustuksia.
- G ++ tukee C ++ 1y muuttuvan pituuden ryhmää. G ++ on tukenut GNU / C99-tyyppisiä VLA: ita pitkään, mutta nyt se tukee myös alustuksia ja lambda-kaappausta viitteenä. C ++ 1y -tilassa G ++ valittaa VLA-käyttötavoista, joita standardiluonnos ei salli, kuten esimerkiksi VLA-tyypin osoittimen muodostaminen tai VLO-muuttujan kokoonpanon soveltaminen. Huomaa, että nyt ilmenee, että VLA: t eivät kuulu C ++ 14: n osaan, mutta ne ovat osa erillistä asiakirjaa ja sitten ehkä C ++ 17.
- void f (int n) {
- int a [n] = {1, 2, 3}; // heittää std :: bad_array_length jos n & lt; 3
- [& amp; a] {varten (int i: a) {cout
Uutta strong> versiossa 4.9.1:
- GCC 4.9.1 on bugikorjaus GCC 4.9-sivulta, joka sisältää tärkeät korjaukset regressioihin ja vakaviin virheisiin GCC 4.9.0, jossa on yli 88 vikaa, jotka on korjattu aiemman julkaisun jälkeen. Sen lisäksi GCC 4.9.1 -versio tukee OpenMP 4.0: a Fortranissa, ei pelkästään C- ja C ++ -ohjelmissa.
Uutta strong> versiossa 4.9.0:
- Yleinen optimoijan parannukset:
- Osoiteanalyysi, nopea muisti -virheilmaisin, on nyt saatavilla ARM: ssä.
- MäärittelemätönBehaviorSanitizer (ubsan), nopea undefined käyttäytymisen ilmaisin, on lisätty ja se voidaan ottaa käyttöön -fsanitize = undefined. Erilaisia laskutoimituksia analysoidaan määrittelemättömän käyttäytymisen havaitsemiseksi ajon aikana. UndefinedBehaviorSanitizer on tällä hetkellä saatavilla C- ja C ++ -kielille.
- Linkit-ajan optimointi (LTO):
- Tyyppi yhdistäminen kirjoitettiin uudelleen. Uusi toteutus on huomattavasti nopeampaa ja käyttää vähemmän muistia.
- Parempi osiointialgoritmi, joka johtaa vähemmän suoratoistoon linkin aikana.
- Virtuaalisten menetelmien pikainen poistaminen vähentää objektitiedostojen koon ja parantaa linkitystiedon käyttöä ja kokoa aikaa.
- Toimintoelimet ladataan nyt pyynnöstä ja vapautetaan varhaisessa vaiheessa parantamalla muistin kokonaissummaa linkin aikana.
- C ++ piilotettuja avainmenetelmiä voidaan nyt optimoida.
- Kun linkkeri-plugin on käytössä, kääntäminen -flto-vaihtoehdolla muodostaa nyt ohuet objektitiedostot (.o), jotka sisältävät ainoastaan LTO-välimuotoa. Käytä -ffat-lto-objekteja tiedostojen luomiseen, jotka sisältävät myös objektikoodin. Voit luoda LTO-käsittelyyn sopivia staattisia kirjastoja käyttämällä gcc-ar ja gcc-ranlib; merkkien viittaaminen ohuesta objektitiedostosta käyttää gcc-nm: tä. (Vaatii, että ar, ranlib ja nm on koottu plugin-tuki.)
- Muistin käyttörakennus Firefox, jonka debugilla oli käytössä, väheni 15 Gt: sta 3,5 Gt: aan; yhteysaika 1700 sekunnista 350 sekuntiin.
- Väliaikaiset optimointiparannukset:
- Uuden tyyppinen perintöanalyysimoduuli, joka parantaa devirtualisoitumista. Devirtualisointi ottaa nyt huomioon nimettömät nimet ja C + + 11 lopullinen avainsana.
- Uutta spekulatiivista devirtualisoitumislupaa (jota hallitsee -fdevirtualize-spekulatiivisesti.
- Spekulatiivisesti suoritetut puhelut käännetään takaisin epäsuoriksi, jos suorat puhelut eivät ole halvempia.
- Paikalliset aliakset otetaan käyttöön symboleissa, joiden tiedetään olevan semanttisesti samanlaisia jaettuja kirjastoja parantaen dynaamisia linkitysajoja.
- Palautteen kohdennetut optimointiparannukset:
- Ohjelmien profiili käyttämällä C ++ -line-toimintoja on nyt luotettavampi.
- Uusi aikaprofiili määrittää tyypillisen järjestyksen, jossa tehtävät suoritetaan.
- Uusi toimintojen uudelleensuuntausreitti (jota ohjaavat -freero-toiminnot) vähentää merkittävästi suurien sovellusten käynnistysaikaa. Siihen asti, kunnes binutils-tuki on valmis, se on tehokas vain linkki-ajan optimoinnilla.
- Palauteohjattu epäsuoran puhelun poisto ja devirtualisointi käsittelevät nyt ristikkäismuotoisia puheluita, kun linkit-ajan optimointi on käytössä.
- Uudet kielet ja kielikohtaiset parannukset:
- OpenMP-määrityksen versio 4.0 on nyt tuettu C- ja C ++-kääntäjille. Uutta -fopenmp-simd-vaihtoehtoa voidaan käyttää OpenMP: n SIMD-direktiivien käyttöön ottamatta samalla OpenMP-ohjeita. Uusi -fsimd-cost-model = -vaihtoehto mahdollistaa vektorisuunnittelumallin mallin sovittamisen OpenMP- ja Cilk Plus simd -direktiiveihin merkittyihin silmukoihin. -Wopenmp-simd varoittaa, kun nykyinen kustannusmalli ohittaa käyttäjän asettamat simd-ohjeet.
- C, C ++ ja Fortran-kääntäjille on lisätty -Wdate-time -vaihtoehto, joka varoittaa, kun käytetään __DATE__, __TIME__ tai __TIMESTAMP__ makroja. Nämä makrot voivat estää bit-viisasta identtisiä toistettavia kokoelmia.
- Ada:
- GNAT siirtyi Ada 2012: n sijasta Ada 2005: n sijaan oletuksena.
- C-perhe:
- Lisätty GCC: n lähettämien diagnostiikan värjääminen. -Diagnostics-color = auto ottaa sen käyttöön, kun se lähtee päätteille, -diagnostics-color = aina ehdottomasti. GCC_COLORS-ympäristömuuttujaa voidaan käyttää värien mukauttamiseen tai väriaineen poistamiseen. Jos GCC_COLORS-muuttuja on ympäristössä, oletusarvo on -fdiagnostics-color = auto, muuten -fdiagnostics-color = never.
- Näytteen diagnostiikkatulostus:
- $ g ++ -diagnostics-color = aina -S -Wall test.C
- test.C: Toiminnossa & lsquo; int foo () ':
- test.C: 1: 14: varoitus: ei paluulomaketta, joka palauttaa ei-tyhjät [-Wreturn -tyyppiset]
- int foo () {}
- test.C: 2: 46: virhe: mallin instantiation syvyys ylittää enintään 900 (käytä -tyyppinen syvyys = lisätä maksimiarvoa) instantiating & lsquo; struct X '
- mallipohja rakenne X {staattinen const int value = X :: arvo; }; mallin rakenne X;
- test.C: 2: 46: rekursiivisesti vaaditaan & lsquo; const int X: arvosta li>
- test.C: 2: 46: vaaditaan & lsquo; const int X :: arvo '
- test.C: 2: 88: vaaditaan täältä
- test.C: 2: 46: virhe: epätäydellinen tyyppi & lsquo; X ', jota käytetään sisäkkäisessä nimenmäärityksessä
- Uuden #pragma GCC ivdepin avulla käyttäjä voi väittää, että silmukkakäytössä olevia riippuvuuksia ei ole, mikä estäisi peräkkäisten iterointien suorittamisen samanaikaisesti käyttäen SIMD-ohjeita (yhden käskyn moninkertaiset tiedot).
- Cilk Plus -tuen lisäys on lisätty ja se voidaan ottaa käyttöön -fcilkplus -vaihtoehdolla. Cilk Plus on C- ja C ++ -kielien laajennus tietojen ja tehtävän rinnakkaisuuden tukemiseksi. Tämä täytäntöönpano noudattaa ABI-versiota 1.2; kaikki ominaisuudet mutta _Cilk_for on toteutettu.
- Nyt on tuettu ISO C11 -atomia (_Tomic-tyyppinen määrittely ja karsinta ja otsikko).
- Tukee nyt ISO C11: n yleisiä valintoja (_Yleinen avainsana).
- Nyt tuetaan ISO C11 thread-local storage (_Thread_local, joka muistuttaa GNU C __thread).
- ISO C11 -tuki on nyt samanlaisella tasolla kuin ISO C99 -tuki: olennaisesti täydellisiä modulo-vikoja, laajennettuja tunnisteita (tuettuja paitsi nurkissa tapauksissa, joissa käytetään "lisättyjä tunnisteita"), liukulukuja (pääasiassa mutta ei kokonaan jotka liittyvät liitteiden F ja G valinnaisiin C99-ominaisuuksiin ja valinnaisiin liitteisiin K (Bounds-checking interfaces) ja L (Analysoitavuus).
- Uusi C-laajennus __auto_type tarjoaa C ++ 11 -auton toiminnallisuuden osajoukon GNU C: ssä.
- C ++:
- C ++ 1y: n G ++ -strategian toteutus normaaleihin toimintoihin on päivitetty noudattamaan N3638: aa, joka hyväksyttiin työpaperille. Erityisesti se lisää decltype (auto) -tyyppiä, jotta saadaan saksan tyyppinen semantiikka pikemminkin kuin yksinkertaisen automatiikan mallipohjan vähennysemantti:
- int & amp; f ();
- auto i1 = f (); // int
- decltype (auto) i2 = f (); // int & amp;
- G ++ tukee C ++ 1y: n lambda-talteenottoaloittajia:
- [x = 42] {...};
- Itse asiassa ne on hyväksytty GCC 4.5: n jälkeen, mutta nyt kääntäjä ei varoita niistä -std = c ++ 1y: llä ja tukee myös sulkeutuneita ja sulkeutuneita alustuksia.
- G ++ tukee C ++ 1y-muuttuvan pituusjoukkoja. G ++ on tukenut GNU / C99-tyyppisiä VLA: ita pitkään, mutta nyt se tukee myös alustuksia ja lambda-kaappausta viitteenä. C ++ 1y -tilassa G ++ valittaa VLA-käyttötavoista, joita standardiluonnos ei salli, kuten esimerkiksi VLA-tyypin osoittimen muodostaminen tai VLO-muuttujan kokoonpanon soveltaminen. Huomaa, että nyt ilmenee, että VLA: t eivät kuulu C ++ 14: n osaan, mutta ne ovat osa erillistä asiakirjaa ja sitten ehkä C ++ 17.
- void f (int n) {
- int a [n] = {1, 2, 3}; // heittää std :: bad_array_length jos n & lt; 3
- [& amp; a] {varten (int i: a) {cout
1 Kommentit
http://www.eduwizzonlinetrainings.com 29 Dec 17
EduwizzOnlineTraining is one of the Best Online Training Institute in Hyderabad, Bangalore. Eduwizz provide courses like Hybris Development, WebSphere Commerce Server,Blockchain Training,Hyperledger Fabric Development ,Ethereum Development ,Commvault Training, Devops , Netapps , Mulesoft ESB ,Machine Learning,Data Science , Internet of Things , Hybris ,Angular JS , Node JS , Express JS , Business Analyst, Selenium testing with webdriver, Guidewire ,Adobe, RPA ,TSM, EMC...etc