GNU Derleyici Koleksiyonu - GNU Compiler Collection

GNU Derleyici Koleksiyonu
GNU Compiler Collection logo.svg
Geliştirici (ler)GNU Projesi
İlk sürüm23 Mayıs 1987; 33 yıl önce (1987-05-23)[1]
Kararlı sürüm
10.2[2] / 23 Temmuz 2020; 4 ay önce (2020-07-23)
Depo Bunu Vikiveri'de düzenleyin
YazılmışC yazılmış bazı bölümlerle C ++ [3]
İşletim sistemiÇapraz platform
PlatformGNU
TürDerleyici
LisansGPLv3 + GCC Runtime Library Exception ile[4]
İnternet sitesigcc.gnu.org

GNU Derleyici Koleksiyonu (GCC) bir derleyici tarafından üretilen sistem GNU Projesi çeşitli destekleyen Programlama dilleri. GCC, GNU araç zinciri ve ilgili çoğu proje için standart derleyici GNU ve Linux, I dahil ederek Linux çekirdeği. Özgür Yazılım Vakfı (FSF) GCC'yi şu şekilde dağıtır: GNU Genel Kamu Lisansı (GNU GPL). GCC'nin büyümesinde önemli bir rol oynadı ücretsiz yazılım hem araç hem de örnek olarak.

1987'de ilk kez piyasaya sürüldüğünde GCC 1.0, GNU C Derleyicisi sadece işlediği için C programlama dili.[1] Derlemek için genişletildi C ++ o yılın Aralık ayında. Ön uçlar daha sonra için geliştirildi Amaç-C, Amaç-C ++, Fortran, Java, Ada, ve Git diğerleri arasında.[5]

Sürüm 4.5 OpenMP belirtim artık C ve C ++ derleyicilerinde desteklenmektedir[6] ve "çok geliştirilmiş" bir uygulama OpenACC 2.0a belirtimi[7] ayrıca desteklenmektedir. Varsayılan olarak mevcut sürüm, gnu ++ 14, üst kümesi C ++ 14, ve gnu11, üst kümesi C11, sıkı standart destek de mevcuttur. GCC 9 itibariyle, C ++ 17 destek artık deneysel değildir ve ya kesinlikle gnu ++ 17, (yaklaşan) GCC 11'deki varsayılandır. GCC ayrıca C ++ 20.

GCC olmuştur taşınan çok çeşitli komut seti mimarileri ve hem ücretsiz hem de ücretsiz içeriklerin geliştirilmesinde bir araç olarak yaygın şekilde kullanılmaktadır. tescilli yazılım. GCC ayrıca birçok gömülü sistemler, dahil olmak üzere KOL tabanlı; AMCC, ve Freescale Güç ISA tabanlı cips.[8] Derleyici, çok çeşitli platformları hedefleyebilir.

Resmi derleyicisi olmanın yanı sıra GNU işletim sistemi GCC, diğer birçok modern tarafından standart derleyici olarak benimsenmiştir. Unix benzeri bilgisayar işletim sistemleri çoğu dahil Linux dağılımlar. Çoğu BSD aile işletim sistemleri de GCC'ye geçti, ancak o zamandan beri dahil olmak üzere bazı BSD'ler FreeBSD ve OpenBSD o zamandan beri taşındı Clang derleyici.[9] Mac os işletim sistemi ayrıca GCC'yi kullandıktan sonra Clang'a geçti. Aşağıdakiler için sürümler de mevcuttur Microsoft Windows ve diğer işletim sistemleri; GCC için kod derleyebilir Android ve iOS.

Tarih

Çabasında önyükleme GNU işletim sistemi, Richard Stallman diye sordu Andrew S. Tanenbaum yazarı Amsterdam Derleyici Kiti (aynı zamanda Ücretsiz Üniversite Compiler Kit) bu yazılımı GNU için kullanma izni için. Tanenbaum ona derleyicinin özgür olmadığını ve sadece üniversitenin Bedava, Stallman yeni bir derleyici yazmaya karar verdi.[10] Stallman'ın ilk planı[11] mevcut bir derleyiciyi yeniden yazmaktı Lawrence Livermore Ulusal Laboratuvarı itibaren Pastel C'ye biraz yardım ile Len Kulesi ve diğerleri.[12] Stallman, Livermore derleyicisi için yeni bir C ön ucu yazdı, ancak daha sonra megabayt yığın alanı gerektirdiğini fark etti, bu sadece 64 KB'lik bir 68000 Unix sistemi için imkansızdı ve sıfırdan yeni bir derleyici yazması gerektiği sonucuna vardı.[11] Pastel derleyici kodlarının hiçbiri GCC'de sona ermedi, ancak Stallman yazdığı C ön ucunu kullanmıştı.[11]

GCC ilk olarak 22 Mart 1987'de yayınlandı. FTP itibaren MIT.[13] Stallman yazar olarak listelendi ancak katkılarından dolayı diğerlerinden alıntı yaptı, Jack Davidson ve Christopher Fraser'ı kullanma fikri için RTL ara dil olarak, önişlemcinin çoğunu yazmak için Paul Rubin ve "ayrıştırıcının bölümleri, RTL üreteci, RTL tanımları ve Vax makine açıklaması" için Leonard Tower.[14] Tarafından "ilk ücretsiz yazılım hit" olarak tanımlandı Salus, GNU derleyicisi tam da Sun Microsystems geliştirme araçlarını işletim sistemi, bunları önceki paketten daha yüksek bir birleşik fiyata ayrı ayrı satmak, bu da Sun kullanıcılarının çoğunun satıcının araçları yerine GCC'yi satın almasına veya indirmesine neden oldu.[15] 1990'da GCC on üç bilgisayar mimarisini destekledi, birkaç satıcı derleyiciden daha iyi performans gösterdi, Veri Genel ve Sonraki iş istasyonlarıyla ve Lotus Development Corporation.[16]

GCC, GPL kapsamında lisanslandığı için, diğer yönlerde çalışmak isteyen programcılar - özellikle C dışındaki diller için arayüz yazanlar - kendi çatal Derleyicinin dağıtım gereksinimleri de dahil olmak üzere GPL'nin şartlarını karşılamaları koşuluyla kaynak kodu. Bununla birlikte, çoklu çatalların verimsiz ve hantal olduğu kanıtlandı ve resmi GCC projesi tarafından kabul edilen işin zorluğu birçokları için büyük ölçüde sinir bozucuydu.[17] FSF, GCC 2.x'in resmi sürümüne eklenenler üzerinde o kadar yakın bir denetim sağladı ki, GCC, "katedral" geliştirme modelinin bir örneği olarak kullanıldı. Eric S. Raymond denemesi Katedral ve Çarşı.

1997'de, bir grup geliştirici, birkaç deneysel çatalı tek bir projede birleştirmek için Deneysel / Geliştirilmiş GNU Derleyici Sistemini (EGCS) kurdu.[17][18] Birleşmenin temeli, 2.7 ve 2.81 sürümleri arasında alınan bir GCC geliştirme anlık görüntüsüdür. Birleştirilen projeler arasında g77 (Fortran), PGCC (P5 Pentium -optimize edilmiş GCC), birçok C ++ iyileştirmesi ve birçok yeni mimari ve işletim sistemi varyantlar.[19] EGCS gelişimi, GCC geliştirmesinden çok daha güçlü olduğunu kanıtladı, öyle ki FSF, GCC 2.x derleyicisindeki geliştirmeyi resmi olarak durdurdu, EGCS'yi GCC'nin resmi sürümü olarak kutsadı ve Nisan 1999'da EGCS projesini GCC bakımcıları olarak atadı. Temmuz 1999'da GCC 2.95'in piyasaya sürülmesi ile iki proje bir kez daha birleşti.[20]

O zamandan beri GCC, bir yönlendirme komitesinin yönetimi altında dünyanın dört bir yanından çeşitli programcılar grubu tarafından sürdürülmektedir.[21] Daha fazla türde işlemciler ve diğer herhangi bir derleyiciden daha işletim sistemleri.[22][güvenilmez kaynak? ]

GCC olmuştur taşınan çok çeşitli komut seti mimarileri ve hem ücretsiz hem de ücretsiz ve tescilli yazılım. GCC ayrıca birçok gömülü sistemler, dahil olmak üzere Symbian (aranan gcce),[23] KOL tabanlı; AMCC, ve Freescale Güç ISA tabanlı cips.[8] Derleyici, aşağıdakiler dahil çok çeşitli platformları hedefleyebilir: video oyun konsolları benzeri PlayStation 2,[24] PlayStation 3'ün Hücre SPE'si,[25] ve Dreamcast.[26]

Tasarım

Ahır elde etmek için ABI ör. Linux Standart Tabanı Derleyici sürümü satın almayı amaçlamaktadır.

GCC'nin harici arayüzü aşağıdaki gibidir Unix sözleşmeler. Kullanıcılar, dile özgü bir sürücü programını (gcc C için g ++ C ++ için vb.) komut argümanları, gerçek derleyiciyi çağırır, montajcı çıktıda ve ardından isteğe bağlı olarak bağlayıcı eksiksiz üretmek çalıştırılabilir ikili.

Dil derleyicilerinin her biri, kaynak kodu ve çıktıları okuyan ayrı bir programdır. makine kodu. Hepsinin ortak bir iç yapısı vardır. Dil başına bir ön uç ayrıştırmak bu dilde kaynak kodu oluşturur ve bir soyut sözdizimi ağacı (kısaca "ağaç").

Bunlar, gerekirse, orta ucun giriş gösterimine dönüştürülür, adı verilir GENEL form; orta uç daha sonra programı kademeli olarak nihai şekline dönüştürür. Derleyici optimizasyonları ve statik kod analizi teknikler (FORTIFY_SOURCE gibi,[27] bazılarını keşfetmeye çalışan bir derleyici yönergesi arabellek taşmaları ) koda uygulanır. Bunlar çoklu temsiller üzerinde çalışır, çoğunlukla mimariden bağımsız GIMPLE gösterimi ve mimariye bağlı RTL temsil. En sonunda, makine kodu mimariye özgü kullanılarak üretilir desen eşleştirme aslen Jack Davidson ve Chris Fraser'ın bir algoritmasına dayanmaktadır.

GCC öncelikle şurada yazılmıştır: C parçaları hariç Ada başlangıç ​​aşaması. Dağıtım, Ada için standart kitaplıkları içerir, C ++, ve Java kodu çoğunlukla bu dillerde yazılmış.[28] Bazı platformlarda dağıtım, düşük seviyeli bir çalışma zamanı kitaplığı da içerir, libgcc, makineden bağımsız C ve işlemciye özgü bir arada yazılmıştır makine kodu, hedef işlemcinin doğrudan gerçekleştiremediği aritmetik işlemleri gerçekleştirmek için tasarlanmıştır.[29]

Mayıs 2010'da GCC yürütme komitesi, bir C ++ GCC'yi derlemek için derleyici.[3] Derleyicinin C ile yazılması ve ayrıca C ++ 'dan bir özellik alt kümesi olması amaçlanmıştır. Buna özellikle GCC geliştiricilerinin yıkıcılar ve jenerik C ++ 'ın özellikleri.[30]

Ağustos 2012'de GCC yönlendirme komitesi, GCC'nin uygulama dili olarak artık C ++ 'yı kullandığını duyurdu.[31] Bu, kaynaklardan GCC oluşturmak için bir C ++ derleyicisinin gerekli olduğu anlamına gelir. ISO / IEC C ++ 03 standart.

18 Mayıs 2020'de GCC, ISO / IEC C ++ 03 standart ISO / IEC C ++ 11 standart (yani derlemek için gerekli, önyükleme, derleyicinin kendisi; varsayılan olarak, ancak C ++ 'ın sonraki sürümlerini derler).[32]

Ön uçlar

Her biri başlangıç ​​aşaması üretmek için bir ayrıştırıcı kullanır soyut sözdizimi ağacı verilen Kaynak dosyası. Sözdizimi ağacı soyutlaması nedeniyle, desteklenen farklı dillerden herhangi birinin kaynak dosyaları aynı şekilde işlenebilir. arka uç. GCC kullanarak başladı LALR ayrıştırıcıları ile oluşturuldu Bizon, ancak yavaş yavaş el yazısına geçti yinelemeli asıllı ayrıştırıcılar 2004'te C ++ için,[33] ve 2006'da C ve Objective-C için.[34] Şu anda[ne zaman? ] tüm ön uçlar elle yazılmış özyinelemeli ayrıştırıcıları kullanır.

GCC 4.0'a kadar, programın ağaç temsili hedeflenen işlemciden tamamen bağımsız değildi.

Bir ağacın anlamı, farklı dil ön uçları için biraz farklıydı ve ön uçlar kendi ağaç kodlarını sağlayabilir. Bu, GCC 4.0'ın gelişiyle birlikte sunulan, dilden bağımsız iki ağaç türü olan GENERIC ve GIMPLE'nin tanıtılmasıyla basitleştirildi. GENERIC, GCC 3.x Java ön ucunun ara gösterimine dayalı olarak daha karmaşıktır. GIMPLE, çeşitli yapıların bulunduğu basitleştirilmiş bir GENEL indirdi birden çok GIMPLE talimatına. C, C ++, ve Java ön uçlar GENERIC'i doğrudan ön uçta üretir. Bunun yerine diğer ön uçlar, ayrıştırıldıktan sonra farklı ara temsillere sahiptir ve bunları GENERIC'e dönüştürür.

Her iki durumda da, sözde "gimplifier", bu daha karmaşık formu daha basit hale dönüştürür. SSA çok sayıda güçlü dil ve mimariden bağımsız genel (işlev kapsamı) optimizasyonlarının ortak dili olan GIMPLE formu.

GENEL ve GIMPLE

GENEL bir ara temsil kaynak kodunu derlerken "orta uç" olarak kullanılan dil çalıştırılabilir ikili dosyalar. Adlı bir alt küme GIMPLE, GCC'nin tüm ön uçları tarafından hedeflenmektedir.

GCC'nin orta aşaması tüm kod analizini yapar ve optimizasyon GENERIC'den başlayarak hem derlenen dilden hem de hedef mimariden bağımsız olarak çalışır.[35] temsil ve genişletme transfer dilini kaydet (RTL). GENEL temsil, yalnızca emir kipinin alt kümesini içerir programlama orta uç tarafından optimize edilmiş yapılar.

Kaynak kodunu GIMPLE'a dönüştürürken,[36] karmaşık ifade bölünmüş üç adresli kod kullanma geçici değişkenler. Bu temsil, McCAT derleyicisinde önerilen SIMPLE temsilinden esinlenmiştir.[37] Laurie J. Hendren tarafından[38] analizi basitleştirmek için ve optimizasyon nın-nin zorunlu programlar.

Optimizasyon

Optimizasyon, derlemenin herhangi bir aşamasında gerçekleşebilir; ancak, optimizasyonların çoğu sözdiziminden sonra gerçekleştirilir ve anlamsal analiz ön ucun ve kod üretimi arka uçtan; bu nedenle, bir şekilde çelişkili olsa da, derleyicinin bu kısmının ortak adı "orta uç" dur.

GCC optimizasyonlarının tam seti, geliştirildikçe sürümden sürüme değişir, ancak aşağıdakiler gibi standart algoritmaları içerir: döngü optimizasyonu, atlama ipliği, ortak alt ifade eleme, talimat planlaması vb. RTL optimizasyonlar, global SSA tabanlı optimizasyonların eklenmesiyle daha az önemlidir. GIMPLE ağaçlar[39] RTL optimizasyonları çok daha sınırlı bir kapsama ve daha az üst düzey bilgiye sahip olduğundan.

Bu düzeyde gerçekleştirilen bu optimizasyonlardan bazıları şunları içerir: ölü kod eleme, kısmi artıklık giderme, küresel değer numaralandırması, seyrek koşullu sabit yayılma, ve kümelerin skaler değişimi. Dizi bağımlılığı tabanlı optimizasyonlar, örneğin otomatik vektörleştirme ve otomatik paralelleştirme ayrıca gerçekleştirilir. Profil yönlendirmeli optimizasyon da mümkündür.[40]

Arka uç

GCC'nin arka ucu kısmen şu şekilde belirtilmiştir: önişlemci makroları ve bir hedef mimariye özgü işlevler, örneğin, endianness, Kelime boyutu, ve çağrı kuralları. Arka ucun ön kısmı, bunları RTL üretimine karar vermeye yardımcı olmak için kullanır, bu nedenle GCC'nin RTL'si nominal olarak işlemciden bağımsız olsa da, soyut talimatların ilk dizisi zaten hedefe uyarlanmıştır. Herhangi bir anda, program temsilini oluşturan gerçek RTL komutları, makine açıklaması hedef mimarinin.

Makine açıklama dosyası, işlenen kısıtlamaları ile birlikte RTL kalıpları ve son derlemenin çıktısını almak için kod parçacıkları içerir. Kısıtlamalar, belirli bir RTL modelinin yalnızca (örneğin) belirli donanım yazmaçlarına uygulanabileceğini veya (örneğin) yalnızca sınırlı bir boyuttaki (Örneğin. 12, 16, 24, ... bit ofsetleri, vb.). RTL üretimi sırasında, verilen hedef mimari için kısıtlamalar kontrol edilir. Belirli bir RTL pasajını yayınlamak için, makine açıklama dosyasındaki bir (veya daha fazla) RTL modeliyle eşleşmeli ve bu model için kısıtlamaları karşılamalıdır; aksi takdirde, son RTL'yi makine koduna dönüştürmek imkansız olacaktır.

Derlemenin sonuna doğru, geçerli RTL bir katı her komutun gerçek makine kayıtlarına ve hedefin makine açıklama dosyasından bir modele atıfta bulunduğu form. Katı RTL oluşturmak karmaşık bir görevdir; önemli bir adım kayıt tahsisi başlangıçta atanan sözde kayıtların yerini alacak gerçek donanım kayıtlarının seçildiği yer. Bunu bir "yeniden yükleme" aşaması izler; gerçek bir donanım yazmacı atanmamış herhangi bir sözde yazmaç yığına 'dökülür' ve bu dökülmeyi gerçekleştirmek için RTL üretilir. Benzer şekilde, gerçek bir talimata sığmayacak kadar büyük ofsetler parçalanmalı ve ofset kısıtlamalarına uyacak RTL dizileri ile değiştirilmelidir.

Son aşamada, makine kodu, hedefin gerçek talimatlarını oluşturmak için her bir modelle ilişkilendirilmiş küçük bir kod parçacığı çağırılarak oluşturulur. komut seti, yeniden yükleme aşamasında seçilen son kayıtları, ofsetleri ve adresleri kullanarak. Derleme-oluşturma parçacığı sadece bir dizge olabilir, bu durumda kayıtların, uzaklıkların ve / veya adreslerin dizgeye basit bir dize ikamesi gerçekleştirilir. Derleme oluşturma parçacığı ayrıca bazı ek işler gerçekleştiren, ancak sonuçta geçerli derleme kodunu içeren bir dize döndüren kısa bir C kodu bloğu olabilir.

Özellikleri

GCC'nin bazı özellikleri şunları içerir:

  • Bağlantı zamanı optimizasyonu bağlantılı ikiliyi doğrudan iyileştirmek için nesne dosyası sınırlarını optimize eder. Bağlantı zamanı optimizasyonu, bazılarının serileştirmesini içeren bir ara dosyaya dayanır. Gimple nesne dosyasına dahil edilen temsil.[kaynak belirtilmeli ] Dosya, kaynak derleme sırasında nesne dosyasının yanında oluşturulur. Her kaynak derlemesi, ayrı bir nesne dosyası ve bağlantı zamanı yardımcı dosyası oluşturur. Nesne dosyaları bağlandığında, derleyici yeniden çalıştırılır ve ayrı olarak derlenmiş nesne dosyalarındaki kodu optimize etmek için yardımcı dosyaları kullanır.
  • Eklentiler GCC derleyicisini doğrudan genişletebilir.[41] Eklentiler, bir stok derleyicisinin eklenti olarak yüklenen harici kodla belirli ihtiyaçlara göre uyarlanmasına izin verir. Örneğin, eklentiler, üzerinde çalışan orta uç geçişleri ekleyebilir, değiştirebilir ve hatta kaldırabilir. Gimple temsiller.[42] Birkaç GCC eklentisi, özellikle libpython'a bağlanan ve derleyicinin içinden rastgele Python komut dosyalarını çalıştırmaya izin veren GCC Python eklentisi zaten yayınlanmıştır. Amaç, GCC eklentilerinin Python'da yazılmasına izin vermektir. MELT eklentisi yüksek seviye sağlar Lisp GCC'yi genişletmek için benzeri bir dil.[43]
  • "C ++ işlem belleği -fgnu-tm ile derlerken. "[6][44]
  • GCC 10'dan itibaren, tanımlayıcılar, UTF-8 (Unicode) kodlaması, yani C kaynak kodu varsayılan olarak UTF-8 kodlamasını kullanır.[45][46]

Diller

7'den beri standart derleyici sürümleri, C (gcc), C ++ (g ++), Amaç-C, Amaç-C ++, Fortran (Gfortran), Ada (GNAT ), ve Git (gccgo).[47] Popüler bir paralel dil uzantısı, OpenMP, ayrıca desteklenmektedir. Sürüm 5.0 için destek eklendi Cilk Plus, sürüm 9.1 için destek eklendi D,[48] ve 5.1 sürümünden bu yana, aşağıdakiler için ön destek vardır: OpenACC.[49] GCC 7'den önceki sürümler de desteklenmektedir Java (gcj), Java'nın yerel makine koduna derlenmesine izin verir.[50]

Fortran ön ucu g77 4.0 sürümünden önce, yalnızca FORTRAN 77. Daha yeni sürümlerde, g77 yeninin lehine düştü GNU Fortran ön uç (g77'nin dil uzantılarının çoğunu korur) Fortran 95 ve büyük kısımları Fortran 2003 ve Fortran 2008 yanı sıra.[51][52] İçin bir ön uç SOĞUK bakım eksikliği nedeniyle düştü.[53]

Üçüncü taraf ön uçları Pascal (gpc), Modula-2, Modula-3, PL / I, ve VHDL (ghdl).

GCC gibi ek dilleri desteklemek için birkaç deneysel dal mevcuttur. UPC derleyici[54] için Birleşik Paralel C.

Mimariler

Sürüm 4.3'ten itibaren GCC hedef işlemci aileleri şunları içerir (not, GCC 6 ve daha eski sürümler artık desteklenmemektedir):

GCC 10 itibarıyla, birkaç tane daha desteklenmektedir (ve örneğin SPU, yani Cell düşürülmüştür), ör. Nvidia GPU'lar, yani Nvidia PTX ara kodu ve ayrıca AMD GCN kodu, 64-bit ARM (AArch64 ), yalnızca 32 bit değil, RISC-V, MSP430, ve eBPF (içinde çalışan Turing olmayan tam bir dil Linux çekirdeği ).[55]

Standart sürümde desteklenen daha az bilinen hedef işlemciler şunları içerir:

Ek işlemciler, FSF sürümünden ayrı olarak tutulan GCC sürümleri tarafından desteklenmiştir:

gcj Java derleyici, yerel bir makine dili mimarisini veya Java sanal makinesi 's Java bayt kodu.[58] Ne zaman yeniden hedefleme Yeni bir platforma GCC, önyükleme sıklıkla kullanılır. Motorola 68000, Zilog Z80 ve diğer işlemciler, çeşitli Texas Instruments, Hewlett Packard, Sharp ve Casio programlanabilir grafik hesap makineleri için geliştirilen gcc sürümlerinde de hedeflenmiştir.[59]

Geliştirme

GCC'nin mevcut kararlı sürümü, 23 Temmuz 2020'de piyasaya sürülen 10.2'dir.[60]

4.8 sürümünden itibaren GCC, C ++ 'da uygulanmaktadır.[61]

GCC 4.6 birçok yeniyi destekler[ne zaman? ] Amaç-C bildirilmiş ve sentezlenmiş özellikler, nokta sözdizimi, hızlı numaralandırma, isteğe bağlı protokol yöntemleri, yöntem / protokol / sınıf özellikleri, sınıf uzantıları ve yeni bir GNU Objective-C çalışma zamanı API'si gibi özellikler. Aynı zamanda Git programlama dili ve içerir libquadmath sağlayan kütüphane dört kat hassasiyetli destekleyen hedefler üzerindeki matematiksel fonksiyonlar __float128 veri tipi. Kitaplık aşağıdakileri sağlamak için kullanılır: GERÇEK (16) GNU'da yazın Fortran bu tür hedeflerde.

GCC, yapısında aşağıdakiler dahil birçok standart araç kullanır: Perl, Esnek, Bizon ve diğer yaygın araçlar. Ek olarak, şu anda oluşturmak için üç ek kitaplığın mevcut olmasını gerektirir: GMP, MPC, ve MPFR.

Gövde, yeni özelliklerin uygulandığı ve test edildiği geliştirme çabalarının büyük bir bölümünü yoğunlaştırır.

Lisans

GCC, sürüm 3 altında lisanslanmıştır. GNU Genel Kamu Lisansı.[62]

GCC çalışma zamanı istisnası derlemesine izin verir tescilli ve ücretsiz yazılım GCC'li programlar ve ücretsiz yazılım eklentilerinin kullanımı.[63] Bu istisnanın mevcudiyeti, üçüncü şahıs yazılımlarının GCC lisansının copyleft gerekliliklerinden etkilenmediğine dair herhangi bir genel varsayım anlamına gelmez.

Kullanımlar

Birkaç şirket, çeşitli platformlara GCC bağlantı noktaları sağlamak ve desteklemekle iş yapıyor.[64]

Ayrıca bakınız

Referanslar

  1. ^ a b "GCC Bültenleri". GNU Projesi. Alındı 24 Temmuz 2020.
  2. ^ "GCC 10 Yayın Serisi - GNU Projesi - Özgür Yazılım Vakfı (FSF)". gcc.gnu.org. Alındı 24 Temmuz 2020.
  3. ^ a b "GCC, C ++ 'ya bir dereceye kadar izin verir". H. 1 Haziran 2010.
  4. ^ "GCC Çalışma Zamanı Kitaplığı İstisnası". Alındı 24 Temmuz 2020.
  5. ^ "GCC Tarafından Desteklenen Programlama Dilleri". GNU Projesi. Alındı 23 Haziran 2014.
  6. ^ a b "GCC 6 Yayın Serisi".
  7. ^ "OpenACC".
  8. ^ a b "Linux Anakart Destek Paketleri". Alındı 7 Ağustos 2008.
  9. ^ http://llvm.org/Users.html
  10. ^ von Hagen, William (2006). GCC için Kesin Kılavuz. Definitive Guides (2. baskı). Apress. s. XXVII. ISBN  978-1-4302-0219-6. Bu yüzden VUCK'nın yazarına GNU'nun kullanıp kullanamayacağını soran bir mektup yazdı. Açıkça, VUCK'nın geliştiricisi işbirliğine yanaşmadı ve üniversitenin özgür olduğunu, ancak derleyicinin olmadığını söyledi.
  11. ^ a b c Stallman, Richard (20 Eylül 2011). "GNU Projesi Hakkında". GNU Projesi. Alındı 9 Ekim 2011.
  12. ^ Puzo, Jerome E., ed. (Şubat 1986). "Gnu'nun Hayvanat Bahçesi". Gnu'nun Bülteni. Özgür Yazılım Vakfı. 1 (1). Alındı 11 Ağustos 2007.
  13. ^ Richard M.Stallman (Leonard H. Tower, Jr. tarafından iletildi) (22 Mart 1987). "GNU C derleyicisi beta test sürümü". Yeni Grupcomp.lang.c. Alındı 9 Ekim 2011.
  14. ^ Stallman, Richard M. (22 Haziran 2001) [İlk 1988'de yayınlandı], "GNU CC'ye Katkıda Bulunanlar", GNU Derleyici Koleksiyonunu (GCC) Kullanma ve Taşıma, Özgür Yazılım Vakfı, Inc., s. 7, alındı 18 Haziran 2015.
  15. ^ Salus, Peter H. (2005). "Bölüm 10. SUN ve gcc". Daemon, Gnu ve Penguen. Groklaw.
  16. ^ Garfinkel, Simson L. (6 Ağustos 1990). "GNU yazılımına hazır olun". Bilgisayar Dünyası.
  17. ^ a b Henkel-Wallace, David (15 Ağustos 1997), Mevcut GCC çatallarını birleştirmek için yeni bir derleyici projesi, alındı 25 Mayıs 2012.
  18. ^ "Pentium Derleyici SSS".
  19. ^ "GCC gelişiminin Kısa Tarihi".
  20. ^ "Tarih - GCC Wiki". gcc.gnu.org. Alındı 28 Eylül 2020.
  21. ^ "GCC Yönlendirme Komitesi".
  22. ^ "Linux Bilgi Projesi". LINFO. Alındı 27 Nisan 2010. GCC, 60'tan fazla platforma taşınmıştır (yani üzerinde çalışacak şekilde değiştirilmiştir) ve bu, diğer herhangi bir derleyiciden daha fazladır.
  23. ^ "Symbian GCC İyileştirme Projesi". Alındı 8 Kasım 2007.
  24. ^ "gcc'yi çapraz derleyici olarak kurma". ps2stuff. 8 Haziran 2002. Arşivlenen orijinal 11 Aralık 2008. Alındı 12 Aralık 2008.
  25. ^ https://gcc.gnu.org/wiki/CompileFarm
  26. ^ "sh4 g ++ kılavuzu". Arşivlenen orijinal 20 Aralık 2002. Alındı 12 Aralık 2008.
  27. ^ "Güvenlik Özellikleri: Derleme Zaman Tamponu Kontrolleri (FORTIFY_SOURCE)". fedoraproject.org. Alındı 11 Mart, 2009.
  28. ^ "GCC yapmak için kullanılan diller".
  29. ^ "GCC Internals". GCC.org. Alındı 1 Mart, 2010.
  30. ^ "Richard Stallman tarafından emacs-devel'de bir e-posta".
  31. ^ "GCC 4.8 Sürüm Serisi: Değişiklikler, Yeni Özellikler ve Düzeltmeler". Alındı 4 Ekim 2013.
  32. ^ "bootstrap: Gereksinimi C ++ 11'e güncelleyin". Alındı 18 Mayıs 2020.
  33. ^ "GCC 3.4 Sürüm Serisi Değişiklikleri, Yeni Özellikler ve Düzeltmeler".
  34. ^ "GCC 4.1 Sürüm Serisi Değişiklikleri, Yeni Özellikler ve Düzeltmeler".
  35. ^ "GNU Derleyici Koleksiyon İç Bileşenlerinde GENEL".
  36. ^ "GIMPLE in GNU Compiler Collection Internals".
  37. ^ "McCAT". 12 Ağustos 2004 tarihinde orjinalinden arşivlendi. Alındı 14 Eylül 2017.CS1 bakimi: BOT: orijinal url durumu bilinmiyor (bağlantı)
  38. ^ "Laurie J. Hendren".
  39. ^ Novillo, Diego (Aralık 2004). "Kaynaktan İkili Programa: GCC'nin İç Çalışmaları". Red Hat Dergisi. Arşivlenen orijinal 1 Nisan 2009.
  40. ^ "Profil yönlendirmeli optimizasyon burada gösterilmektedir".
  41. ^ "Eklentiler". GCC çevrimiçi belgeleri. Alındı 8 Temmuz 2013.
  42. ^ Starynkevitch, Basile. "MELT örneği aracılığıyla GCC eklentileri" (PDF). Alındı 10 Nisan, 2014.
  43. ^ "GCC MELT Hakkında". Arşivlendi orjinalinden 4 Temmuz 2013. Alındı 8 Temmuz 2013.
  44. ^ "GCC'de İşlem Belleği".
  45. ^ "Lewis Hyatt - [PATCH] wwwdocs: GCC'ye eklenen genişletilmiş tanımlayıcılar için belge desteği". gcc.gnu.org. Alındı 27 Mart, 2020.
  46. ^ "C ve C ++ için genişletilmiş tanımlayıcı karakterler için öneriler". www.open-std.org. Alındı 27 Mart, 2020.
  47. ^ "GCC Ön Uçları". gnu.org. Alındı 25 Kasım 2011.
  48. ^ "GCC 9 Yayın Serisi".
  49. ^ "GCC 5 Yayın Serisi".
  50. ^ "GCC 7 Yayın Serisi". gnu.org. Alındı 20 Mart, 2018.
  51. ^ "GNU Fortran tarafından desteklenen Fortran 2003 Özellikleri Tablosu". GNU. Alındı 25 Haziran, 2009.
  52. ^ "GNU Fortran tarafından desteklenen Fortran 2008 Özellikleri Tablosu". GNU. Alındı 25 Haziran, 2009.
  53. ^ "PATCH] Soğutmayı kaldır". gcc.gnu.org. Alındı 29 Temmuz 2010.
  54. ^ "GCC UPC (GCC Unified Parallel C)". Intrepid Technology, Inc. 20 Şubat 2006. Alındı 11 Mart, 2009.
  55. ^ "Seçenek Özeti (GNU Derleyici Koleksiyonunu (GCC) Kullanma)". gcc.gnu.org. Alındı 21 Ağustos, 2020.
  56. ^ "Hexagon Project Wiki".
  57. ^ "sx-gcc: gcc'yi başka yerde olmayan sx vektör cpu'ya bağlama".
  58. ^ "Java Programlama Dili için GNU Derleyicisi". Arşivlenen orijinal 9 Mayıs 2007. Alındı 22 Nisan, 2010.
  59. ^ grafik hesap makineleri # programlama
  60. ^ https://www.gnu.org/software/gcc/releases.html
  61. ^ "GCC 4.8 Sürüm Serisi: Değişiklikler, Yeni Özellikler ve Düzeltmeler".
  62. ^ "GNU Derleyici Koleksiyonunu Kullanma". gnu.org. Alındı 5 Kasım 2019.
  63. ^ "GCC Çalışma Zamanı İstisnası". FSF. Alındı 10 Nisan, 2014.
  64. ^ "FSF Hizmet Dizini".

daha fazla okuma

Dış bağlantılar

Resmi

Diğer