Derleme hedefi tam olarak nedir?


17

Terim duymaya devam ediyorum ve tüm google aramaları beni derleyicilerle ilgili makalelere yönlendiriyor. Derleme hedefi teriminin ne anlama geldiğini anlamak istiyorum: |

GÜNCELLEME: Bir bağlam vermek için: Web montajının C, C ++, Rust vb. Diğer diller için derleme hedefi olduğunu söylediğini duydum.


Derleyicilerle ilgili makaleleri okumanızı tavsiye ederim.

4
Derleyicilerdeki makaleler bunu zaten bildiğinizi varsayar. Bu makul bir soru.
Karl Bielefeldt

Wikipedia tarzı makaleler hakkında daha çok şey düşünüyordum. Ve sorunun makul olduğuna katılıyorum. Bu bir öneriydi, eleştiri değil.

4
Soru makul, ancak kötü yazılmış. "Hedef" teriminin farklı anlamları olabilir, bu yüzden onu duyduğunuz veya okuduğunuz yere bir referans veya daha fazla bağlam vermenizi tavsiye ederim.
Doc Brown

@DocBrown Birçok bağlamda duydum, ancak en son web derlemesi bağlamında diğer diller için derleme hedefi olma özelliğini duydum.
ScionOfBytes

Yanıtlar:


17

Derleyiciler, özünde, bir dilde girdi alan ve başka bir dilde çıktı üreten çevirmenlerdir. Örneğin, Eiffel Software'in derleyicisi Eiffel dili girdisini alır ve C üretir. Intel, C dili girdisini okur ve x86 derlemesi üretir. Intel için GAS derleyicisi x86 derlemesini alır ve x86 nesne kodu üretir. Bunların üçü de teknik olarak derleyicidir.

Biçimden bağımsız olarak, bir derleyici tarafından okunan girdiye kaynak , çıktıya hedef denir . İkinci terim, "amaçlanan sonuç" tanımlarından birinden alınır.

Derleyicilerin çoğu, belirli bir işlemci veya mimari için montaj veya nesne kodu üretmek üzere tasarlanmıştır. Bu nedenle, hedef genellikle çıktı biçimi yerine mimarinin kendisine atıfta bulunmak için kullanılır.

Bir derleyicinin hedefinin çalıştığı mimariyle aynı olması gerekmez ve bunun gerçekleştiği durumlarda, programa çapraz derleyici denir . (Örneğin, GCC, C'yi ARM derlemesine derlemek için x86 sistemlerinde çalışacak şekilde oluşturulabilir.)

Ek olarak, komut satırındaki anahtarlar gibi girdiye bağlı olarak farklı hedefler için çıktı üretebilen tek derleyiciler vardır. Bunlara çok hedefli derleyiciler denir .


2
Bir yan not olarak, bu terimin ayrıca yapı sistemleri bağlamında daha genel bir biçimde kullanıldığından bahsetmeye değer olabilir - bir hedef, herhangi bir derleme eyleminden (ör. yükleyici oluşturma).
BartoszKP

2
derleyiciler filtreler değil çevirmenlerdir.

1
@Birfl. Açıkçası. "tr", filtre değil çevirmen anlamına gelir. filtreler çevirmen değildir, bu açıktır.

2
@Birfl: wikipedia'ya gitmiyorum. sadece bir akış başka bir ssys hiçbir şey üretmek. filtreler ve çevirmenler arasındaki ayrım çok iyi bilinmektedir. bir filtre, yüklemi temel alan / hariç tutar. dönüşmez. bir tamsayı listesini filtreleyerek? ve dönüştürülmemiş tamsayılar bile elde edersiniz. inc kullanarak aynı listeyi çevirin ve orijinal listenin dönüştürülmüş bir sürümünü olsun.

1
derleme hesabınız "filtre" terimi dışında iyi.

4

Çeviride, dil İngilizce gibi doğal bir dil veya C gibi yapay bir dil olsa da , bir çeviri sisteminin girişi ve çıktısı hakkında konuşmak için terminoloji kaynağını ve hedefini kullanırız . Doğal dil çevirisinde, sistem iki dil arasında çeviri yapabilen yetkin insan beynidir. Programlama dillerinde bir derleyicidir.

Bu nedenle, bir derleyicinin kaynağı programlama dili (C), hedef ise bayt kodudur (makine seviyesi talimatları). Derleme sırasında genellikle hedefi kullanırız çünkü farklı sistemler (CPU mimarileri) farklı komut setlerine sahiptir, örneğin ARM, MIPS, vb. Derleyicinin hangi komut setinin hedef olduğunu bilmesi gerekir, böylece doğru çıktıyı (bayt kodu) oluşturabilir.


0

WebAssemby, c / c ++ kodunu ikili biçimde dönüştüren en yeni ve en büyük şeydir.

  • WebAssembly, ortak donanımdan yararlanarak yerel hızda çalışmayı amaçlamaktadır. Web platformu ile entegre olacak şekilde tasarlanmıştır.

İşte uygulamalardan birini görebileceğiniz bağlantı, makine kodundaki basit faktöriyel programı ne kadar hızlı dönüştürdüğü.

Bu canavarı kontrol et, https://godbolt.org/

Montajı görmek için bu sitede çalıştırmak için bu örnek programı kullanabilirsiniz.

# include<stdio.h>

int square(int num) {
    return num * num;
}

int main() {
    int res = square(4);
    printf("%d\n",res);
  return 0;
}
  • Mobil ve IoT gibi çok çeşitli platformlarda bulunan yaygın donanım özelliklerinden yararlanarak yerel hızda yürütmek üzere derlenebilen bir derleme hedefi olarak hizmet verecek taşınabilir, boyut ve yükleme zamanı açısından verimli bir ikili biçim tanımlayın.

Ana bilgisayar ve hedef hakkında bazı temel bilgiler, programlama dilinin 10101010'a nasıl çevrildiği.

host=>pc :(windows, iOS, Linux, zOS, Solaris..etc)
target=>CPUhardware: (Intel x86, ARM, PowerPC, etc)
  1. GCC, C / C ++ kodunu montaj koduna dönüştürür. "Assembly" adlı bir araç, derleme kodunu makine koduna dönüştürür ve "linker" adlı bir araç, birden çok makine kodu dosyasını tek bir yürütülebilir dosya (Windows altında .EXE) dosyasına bağlar. Bu derleyicilerin çoğu, sonuçtaki derleyici kodunu bir dosyaya yazmanıza izin verir, böylece derleyici koduna bakabilir veya değiştirebilirsiniz.

  2. Birleştirici ve bağlayıcı alet zincirinin bir parçasıdır, yani bunlar tipik olarak derleyici ile birlikte teslim edilir.

  3. Bununla birlikte, bazı derleyiciler (Microsoft gibi) C / C ++ kodunu doğrudan makine diline dönüştürür, böylece montajcıya gerek kalmaz. Bu derleyicilerin çoğu derleyici kodu oluşturamaz, bu nedenle derleyici kodunu bir dosyaya yazamazsınız.

Bu arada: Doğrudan bir .exe dosyası oluşturan derleyiciler (C / C ++ için değil, diğer programlama dilleri için) bile vardır, böylece bağlayıcı gerekmez.

Web Kurulumu: https://github.com/WebAssembly/design

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.