Tüm bilgisayarlar için evrensel bir montaj dili mümkün mü?


23

Assembly dili hakkında birkaç soru sormak istiyorum. Anladığım kadarıyla makine diline çok yakın, onu daha hızlı ve daha verimli hale getiriyor.

Var olan farklı bilgisayar mimarilerine sahip olduğumuz için, Meclis'te farklı mimariler için farklı kodlar yazmam gerektiği anlamına mı geliyor? Öyleyse, neden Meclis olmasın, bir kere yaz - her dilde çalıştırılsın mı? Sadece evrensel hale getirmek daha kolay olmaz mıydı, böylece sadece bir kez yazıp farklı konfigürasyonlara sahip hemen hemen her makinede çalıştırabilirsiniz? (Bunun imkansız olacağını düşünüyorum, ancak bazı somut, derinlemesine cevaplar almak istiyorum)

Bazı insanlar C'nin aradığım dil olduğunu söyleyebilir. Daha önce C kullanmamıştım, ama sanırım hala daha yüksek bir dil, mesela Java’dan daha hızlı. Burada yanlış olabilirim.


10
Hangi araştırmayı yaptın? Daha iyi bir soru sormanıza yardımcı olmak için sormadan önce araştırma yapmanızı bekliyoruz. Assembly dilinde yazılmış çok şey var.
DW

4
Sormadan önce önemli miktarda araştırma / bireysel çalışma yapmanızı ve ne tür bir araştırma yaptığınızı sorunuzu bize söylemenizi bekliyoruz. Bu durumda araştırma, ilgili Wikipedia makalelerinin okunmasını (örneğin, montaj dili ve bilgisayar mimarisi üzerine) ve bir bilgisayar mimarisi ders kitabı okumasını içerebilir. Bunu daha iyi bir soru yapmak için: daha önce yapmadıysanız, bu araştırmayı yapın ve daha sonra yaptığınız araştırmayı açıklamak için soruyu düzenleyin. Genellikle bu tür araştırmalar daha iyi bir soru formüle etmenize yardımcı olur; ve her durumda cevaplayıcıların zaten bildiklerinizi tekrar etmekten kaçınmasına yardımcı olur.
DW

15
Derleme denilen bir dilin olmadığı / neden olduğunu anlamakla başlayın.
Raphael

2
C taşınabilirliği ile ilgili "klasik" bir problem, farklı donanımdaki farklı ilkel (örn. tamsayı) boyutlarıdır ve bazı alıntılar vardır.
vzn

3
Bu teknik bir problemden çok sosyal bir sorundur - tüm CPU üreticilerini CPU'larının aynı makine dilini kabul etmesi için ikna etmeniz gerekir. (Aslında, x86 neredeyse bu olacaktı, şans eseri - o zaman akıllı telefonlar patladı)
user253751

Yanıtlar:


45

Assembly dili , bilgisayarın talimat setine yönelik talimatları , insan programcıları için biraz daha anlaşılır bir şekilde yazmanın bir yoludur.

Farklı mimarilerin farklı komut kümeleri vardır: izin verilen talimat kümesi her mimaride farklıdır. Bu nedenle, her yerde bir kez çalışıp çalıştırılan bir montaj programına sahip olmayı ümit edemezsiniz. Örneğin, x86 işlemciler tarafından desteklenen talimatlar seti ARM işlemciler tarafından desteklenen talimatlar setinden çok farklı görünüyor. Bir x86 işlemcisi için bir montaj programı yazdıysanız, ARM işlemcide desteklenmeyen çok sayıda talimat olurdu ve bunun tersi de geçerlidir.

Assembly dilini kullanmanın asıl nedeni, programınız üzerinde çok düşük seviyeli bir kontrole izin vermesi ve işlemcinin tüm talimatlarından yararlanmasına izin vermesidir: programı özel işlemciye özgü özelliklerden yararlanmak üzere özelleştirerek devam edecek, bazen programı hızlandırabilirsiniz. Her yerde bir kez yazılan her yerde yazma felsefesi temelde bununla çelişmektedir.


1
Sanırım bu soruya cevabımın 3. paragrafı tarafından cevaplandı. Söylediğiniz gibi, böyle bir program etkili olmazdı, bu nedenle temel olarak meclis dilini kullanmak için temel sebeple çelişiyor.
DW

26
@ nTuply Meclis dilinizi farklı makinelere hitap edecek şekilde değiştirir değiştirmez, korkunç meclis tarzı sözdizimi ile üst düzey bir dil haline gelir. Üst düzey bir dil kullanmaya karar verdikten sonra, bir tane daha dostça sözdizimi ile kullanabilir ve derleyicinin zor işi yapmasına izin verebilirsiniz.
David Richerby

15
Farklı makineler için çevrilmiş bir "montaj dili" olması tamamen aptalca bir fikir değildir, çünkü temelde LLVM'nin "IR" si budur. Fakat David verir nedenlerle, normalde yok yazma montaj LLVM. Ayrıca, 100 üzerinden 99 kez yaptığınız için, C'nizi LLVM'ye çevirmekten clang'a göre daha kötü bir yazma işi yaparsınız. Assembly dilleri, yüksek seviye dillerden potansiyel olarak daha verimlidir, ancak optimize etmek için tipik bir zamana sahip çoğu programcının elinde, yine de potansiyellerine ulaşmazlar.
Steve Jessop

9
@ nTuply, bu var. Bu ekstra derleme dilinden makine talimatlarına geçme sürecine derleme adı verilir.
Paul Draper

3
@PJTraill Modern bir sistemde bir derleyiciye derleyici yazmak için hiçbir sebep yoktur, ilk önyükleme adımı (ve çoğu zaman, o zaman bile) dışında. Üst seviye bir dilde yazılmış olan derleyicilerin gerçekten de korunmaları çok daha muhtemeldir. Ayrıca karşılaştırmak Derleyicisi C ile yazılmış bir dil C'den daha hızlı nasıl olabilir? . Bir derleyicinin amacı bir dilden (kaynak dil) diğerine (genellikle belirli bir mimari ve işletim sistemi için makine dili) çevirmek; bu herhangi bir dilde yazılabilir.
Bir CVn

13

Assembly dilinin TANIMI, doğrudan makine koduna çevrilebilecek bir dil olmasıdır. Assembly dilinde her işlem kodu, hedef bilgisayardaki tam olarak bir işlem anlamına gelir. (Eh, bundan biraz daha karmaşık: bazı montajcılar otomatik olarak bir op-kodun argümanlarına dayanan bir "adresleme modu" belirler. Ancak yine de, ilke, bir montaj hattının bir makine dili talimatına çevrilmesidir.)

Hiç şüphesiz, montaj dili gibi görünecek bir dil icat edebilirsiniz, ancak farklı bilgisayarlardaki farklı makine kodlarına çevrilebilirsiniz. Fakat tanım gereği, bu bir meclis dili olmaz. Assembly diline benzeyen daha yüksek bir dil olacaktır.

Sorunuz biraz sormaktan hoşlanıyor: “Suda yüzmeyen veya suda dolaşmak için başka bir yolu olan ancak tekerlekleri ve motoru olan ve karada seyahat edebilen bir tekne yapmak mümkün mü?” Cevap, tanım gereği böyle bir aracın bir tekne olmayacağı yönünde olacaktır. Daha çok araba gibi geliyor.


1
C genellikle "taşınabilir derleme dili" olarak tanımlanmıştır.
Larry Gritz

2
@LarryGritz Sure. C icat edildiğinde çığır açıcıydı: Bir derleme kullanım kolaylığı ile assembly dilinin gücünü sundu. Ama tanımı gereği, hala derlenmiş bir dil
Jay

8

Hiçbir yoktur kavramsal (Ben hiçbir bilgisayar daresay bilim dünyasında tüm bilgisayarlar için tek bir montaj dili olan karşı) sebep. Aslında, bu pek çok şeyi çok daha kolaylaştıracaktı. Teoriye gelince, hepsi yine de, bazı korkak bijeksiyonlara kadar hepsi aynı.

Bununla birlikte, pratikte, farklı amaçlara, farklı amaçlara hizmet eden farklı işlem ve tasarım ilkelerine (örneğin RISC - CISC) sahip farklı çipler vardır ve bunları çalıştıran talimat setleri ve bununla birlikte montaj dilleri farklıdır. Sonunda, cevap neden bu kadar çok farklı programlama dili bulunduğunu sormakla aynıdır : farklı hedefler, farklı tasarım kararları.

Bununla birlikte, elbette bazı paylaşılan arayüzlere ulaşmak için soyutlama seviyelerini tanıtabilirsiniz. Örneğin, x86, bir süredir yonga seviyesiyle birlikte yapıldı; x86 komutlarını işlemcinizin gerçekte çalıştığı şeye çeviren küçük bir donanım parçası var. C gibi diller, Haskell, Java veya Ruby gibi dillere kadar, donanımdan (tartışmalı derecede küçükse) başka bir adım olacaktır. Evet, derleyici bilgisayar biliminin temel kazanımlarından biridir çünkü endişeleri bu şekilde ayırmayı mümkün kılar.


6
"tartışmalı bir küçücükse" - işte iki tür programcınız var. C'yi düşük seviyeli bir dil olarak kabul edenler, çünkü temel işlemleri CPU komut setlerinde görünen şeylere ve C'yi yüksek seviyeli bir dil olarak görenlere benziyor çünkü makine ile aynı komut seti değil .
Steve Jessop

Eğer montaj dili ile , belirli bir donanım türü (veya ailesi) için üretilen makine kodu üzerinde tam bir kontrol veren bir kişi kastediyorsanız, belirli bir anda dünyamızdaki “tüm bilgisayarlar için” bir dil tanımlamak mümkün olacaktır, ancak değişmeye devam etmek zorundayım. Kuşkusuz (iyi tasarlanmışsa) yeni bir mimariyi kodlamak için öğrenme eğrisini kısaltacaktı, ancak bir derleyici yerine sadece mimarilerin küçük bir kısmı için geçerli olacak bir işle yapmak isteyeceğiniz herhangi bir işin olmasını bekliyorum. Bilgisayarların soyut seviyede aynı olması kırmızı bir ringa balığı, makine kodu ile ilgili.
PJTraill

7

Önemini farketmeksizin "bir yerde koşmak bir kez yaz" ifadesinden bahsediyorsunuz. Yani pazarlama sloganı Sun Microsystems ticari bir kavramı icat "sanal makine" ve "baytkodlarına" muhtemelen fikri akademi 1 icat edilmiş olabilir rağmen, Java için st. Fikir daha sonra Microsoft tarafından .Net için kopyalandı ve Sun tarafından Java lisansının ihlal edildiğine dair ihlaller nedeniyle başarıyla dava edildi. Java bayt kodları, tezgahlar arası montaj veya makine dili fikrinin bir uygulamasıdır. Java dışındaki birkaç dil için kullanılırlar ve teorik olarak herhangi bir dili derlemek için kullanılabilirler. Uzun yıllar süren çok gelişmiş optimizasyondan sonra, Java, yüksek performanslı platform-agnostik sanal makine teknolojisinin genel olarak başarılabilir olduğunu gösteren derlenmiş dillere yakın bir performans sergiliyor.

Gereksinimlerinizle ilgili olarak erken aşamalarda / dolaşımdaki bir başka yeni fikir, yeniden proje olarak adlandırılır ve başka amaçlar için kullanılabilecek olmasına rağmen bilimsel araştırma içindir. Buradaki fikir, sanal makine teknolojisi ile hesaplamalı deneylerin tekrarlanabilir hale getirilmesidir. Bu, temel olarak farklı makine mimarilerini rastgele donanım üzerinde simüle etme fikridir.


8
Sun, sanal makineleri veya bayt kodlarını icat etmedi, onlardan para kazanan ilk grup bile değildi. P koduna bak.
jmoreno

@jmoreno: Ayrıca Smalltalk'a bakmak isteyebilir.
Bob Jarvis - Monica

Makale güneş icat edilmiş sanal makineler / bayt kodu talep etmez. Atıf edilmeyen fakat ima edilmeyen başka bir tarih var. btw burada çok alakalı başka bir anahtar teknoloji: google yerel müşteri (krom özelliği)
vzn 10:15

5

Yüksek seviye sebepler

Bunu düşündüğünüzde, bir mikroişlemci şaşırtıcı bir şey yapar: bir makineyi (çamaşır makinesi veya asansör gibi) almanıza ve özel olarak tasarlanmış mekanizmaların veya devrelerin tamamını ucuz, seri üretilen bir silikonla değiştirmenize olanak sağlar yonga. Parçalar üzerinde çok miktarda ve tasarımda çok zaman kazanırsınız.

Ancak, standart bir çip asmak, sayısız özel tasarım yerine; Her uygulama için mükemmel olan tek, mükemmel bir mikroişlemci olamaz. Bazı uygulamaların güç kullanımını en aza indirmesi gerekir ancak hızlı olmaları gerekmez; diğerleri hızlı olmalı, ancak programlanması kolay olmayacak, diğerleri düşük maliyetli olmalı, vs.

Bu yüzden, her biri kendi güçlü ve zayıf yönlerine sahip olan birçok farklı mikroişlemci "lezzetine" sahibiz. Hepsinin uyumlu bir talimat seti kullanması arzu edilir, çünkü bu, kodun yeniden kullanılmasına izin verir ve doğru becerilere sahip kişileri bulmayı kolaylaştırır. Ancak, komut kümesi yapar , maliyet, karmaşıklık, hızını etkileyebilir kolaylığı kullanımı ve işlemcinin fiziksel kısıtlamaları ve biz bir uzlaşma var bu yüzden: orada birkaç "ana akım" komut setleri (ve birçok küçük olanlar) ve Her komut setinde, farklı özelliklere sahip birçok işlemci vardır.

Oh, ve teknoloji değiştikçe, tüm bu değişimler değişiyor, bu yüzden talimat setleri gelişiyor, yenileri ortaya çıkıyor ve eskileri ölüyor. Bugünün “en iyi” bir talimat seti olsa bile, 20 yıl içinde olmayabilir.

Donanım detayları

Bir komut setinde muhtemelen en büyük tasarım kararı kelime büyüklüğüdür , yani işlemcinin "doğal olarak" ne kadar büyük miktarda manipüle edebileceği. 8 bit işlemciler 0-255 arası sayılarla ilgilenirken, 32 bit işlemciler 0-4,294,967,295 sayılarıyla ilgilenir. Biri için tasarlanan kodun bir başkası için tamamen yeniden düşünülmesi gerekir.

Bu sadece talimatların bir talimat setinden diğerine çevrilmesi ile ilgili değildir. Farklı bir komut setinde tamamen farklı bir yaklaşım tercih edilebilir. Örneğin, 8 bit işlemcide bir arama tablosu ideal olabilir, 32 bit işlemcide ise bir aritmetik işlem aynı amaç için daha iyi olur.

Komut setleri arasında başka önemli farklılıklar var. Çoğu talimat dört kategoriye ayrılır:

  • Hesaplama (Aritmetik ve mantık)
  • Kontrol akışı
  • Veri aktarımı
  • İşlemci yapılandırması

İşlemciler, ne tür hesaplamalar yapabilecekleri ile kontrol akışına, veri aktarımına ve işlemci yapılandırmasına nasıl yaklaştıkları konusunda farklılık gösterir.

Örneğin, bazı AVR işlemcileri çoğaltamaz ve bölünemez; Oysa tüm x86 işlemciler yapabilir. Tahmin edebileceğiniz gibi, çarpma ve bölme gibi görevler için gereken devreyi ortadan kaldırmak bir işlemciyi daha basit ve ucuz hale getirebilir; Bu işlemler, gerektiğinde yazılım rutinleri kullanılarak da gerçekleştirilebilir.

x86 aritmetik komutların işlenenlerini bellekten yüklemesine ve / veya sonuçlarını belleğe kaydetmesine izin verir; ARM, bir yük depolama mimarisidir ve bu nedenle belleğe erişmek için yalnızca birkaç özel talimat içerir. Bu arada, x86 koşullu dallanma talimatlarını atarken, ARM pratik olarak tüm talimatların koşullu olarak yürütülmesine izin verir . Ayrıca, ARM, bit değişimlerinin çoğu aritmetik komutun bir parçası olarak yapılmasına izin verir. Bu farklılıklar farklı performans özelliklerine, iç tasarımdaki farklılıklara ve talaşların maliyetine ve montaj dili seviyesindeki programlama tekniklerindeki farklılıklara yol açar.

Sonuç

Evrensel bir montaj diline sahip olmanın imkansızlığı, montaj kodunu bir komut setinden diğerine doğru şekilde dönüştürmek için, kodun baştan sona yeniden tasarlanması gerektiğidir - bilgisayarların henüz yapamadığı bir şey.


Mükemmel cevap! İnsanlar yeterince iyi anlamıyorlar, programlanması gereken bilgisayarları aramızdaki her yerde. Sadece ekranlarımızda çalıştığını gördüğümüz uygulamalar değil. Her yıl kaç milyar cips üretiliyor?
phs

4

DW'nun müthiş cevabını eklemek: bir montajcıya sahip olmak istiyorsanız tüm mimarileri sürdürmeniz, aralarında mükemmel bir tercüman bulundurmanız ve ne yaptığınızı tam olarak anlamanız gerekir.
Bir mimaride yoğun olarak optimize edilmiş bazı kodların deoptimizize edilmesi, daha soyut düzeyde anlaşılması ve birbirinin optimize edilmesi gerekir.
Ancak bu mümkün olsaydı mükemmel bir C derleyicisine sahip olurduk ve saf derlemede yazmak hiç faydalı olmazdı.
Assembler kullanmanın asıl amacı son derleyicilerden sıkıştırılamayan performanstır.
Böyle bir programı yazmak mevcut derleyicilerden bile daha zor olacak ve yaratılan tüm yeni mimarileri sürdürmek onu daha da zorlaştıracak.
Ve "sadece bir" program için, aynı zamanda tam bir geriye dönük uyumluluk anlamına gelir.


Çoğu durumda, gcc bir programcının yapabildiğinden daha iyi bir optimizasyon gerçekleştirir. Assembler kullanmanın asıl amacı C'ye giremediğiniz şeyleri yazmaçlara erişmek gibi. Linux kaynak ağacına bakarsanız, derleme için kullandıkları budur.
slebetman

@slebetman - gcc, montaja başvurmadan bir değişkeni sicile koymanıza olanak tanır.
Jirka Hanika

@JirkaHanika: CPU talimatlarından mı yoksa özel talimatlarla ele alınan özel amaçlı donanım kayıtlarından mı bahsediyorsunuz? Slebetman’ın ikincisi anlamına geldiğinden şüpheleniyorum.
PJTraill

"Tüm kodlar" - "GCC daha iyi yapar" = "assembler kullanıyorsunuz". Evet, montajcı eklemeleri olmadan kayıtlara erişebilirsiniz.
Evil,

@PJTraill - Slebetman'ın yorumu genellikle mükemmeldir ve belki de cevaba dahil edilmelidir. Ama, onun örneklerle (erişim ve Linux kaynak ağacını kayıt) bunlar bir şeyin mükemmel örnekler olurdu doğrusu bundan daha büyük olasılıkla yaygın yanlış beslemeye edilir her iki olamaz gcc uzantılı C yapmak; bunlar değiştirilmeli veya atlanmalıdır. (Bugün bir şeyler yapmak için bir HW talimatı varsa, bundan bir yıl sonra karşılık gelen gcc uzantısına sahip olacaksınız. Her zaman değil, ama çok sık. Yaş örnekleri.)
Jirka Hanika

3

Microsoft, MSIL'yi bir ara derleme dili olarak buldu. Programlar C # veya VB.Net'ten MSIL'ye derlenir. Çalışma zamanında, MSIL, bir JIT derleyicisi kullanılarak çalışan makinenin makine koduna derlendi . MSIL'yi içeren dosya, programı başlatmak için X86'nın başında birkaç talimat içeren bir .exe dosyasıydı. Bir ARM işlemcide, mono kelimesini program isminin önüne çalıştırmak için yazarsınız.


"Ara montaj dili" ile "sanal makine" arasındaki fark nedir?
Bob Jarvis - Monica

@BobJarvis: Biri kod, diğeri tercüman. Ara montaj ve bytecode arasındaki farkın ne olduğunu
sormalıydın

Bu soruya cevap gibi görünmüyor. Her makine MSIL'i farklı şekilde derlediği / birleştirdiği sürece, bununla ilgili evrensel bir şey yoktur ve böyle bir derlemenin amacı genel işlevselliğin taşınmasıdır ve DW'nin işaret ettiği gibi belirli bir komut dizisinden yararlanılmamasıdır (veya a) assembler kullanma nedeni.
PJTraill

3

Belirtildiği gibi, LLVM şu ana kadar en yakın şey. Gerçekten evrensel bir dilin önündeki büyük bir engel, örtük değişimlerle ilgili temel farklılıklar olacaktır: eşzamanlılık, bellek kullanımı, verimlilik, gecikme süresi ve güç tüketimi. Açıkça SIMD tarzında yazarsanız, çok fazla bellek kullanıyor olabilirsiniz. Açıkça SISD stilinde yazarsanız, en iyi düzeyde paralelleştirme elde edersiniz. Verimlilik için optimize ederseniz, gecikmeye zarar verirsiniz. Tek iş parçacıklı çıkışı en yüksek seviyeye çıkarırsanız (örneğin: saat hızı), pil ömründen zarar görürsünüz.

En azından, kodun takaslar için açıklamalı olması gerekir. Dil için mantıksal tutarsızlığı optimize etmek ve tespit etmek için bir sürü kıpırdatma odası sağlayan iyi cebirsel / tip özelliklere sahip olmak en önemli şey olabilir.

O zaman tanımsız davranış sorunu var. C ve meclis dillerinin hızının çoğu tanımsız davranışlardan geliyor. Eğer gerçekten tanımlanmamış bir davranış olduğunu kabul edersen, onları özel durumlar olarak ele alırsın (yani: mimariye ve içeriğe özel kesmeler).


0

Belki de aradığınız şey, herkesin komutlar için sembolleri kabul ettiği bir Evrensel Torna Makinesi notasyonudır. ( https://en.wikipedia.org/wiki/Universal_Turing_machine )

Torna Kabul Edilebilir dilini altta yatan satıcıya özel makine koduna çeviren ve bilgisayar dediğimiz şeylerden herhangi biri için oluşturulmuş bir 'assembler'.

Gelen Programlama Bilgisayar Sanatı şöyle olabilir şeyin bir örneği yoktur.

Ancak, "neden tüm bilgisayarlarla kullanılabilecek ticari olarak satılan evrensel bir dil değil" sorusunu düşünün, en ağır etkilerin (1) kolaylık olduğunu, tüm montaj dillerinin kullanmak için en uygun dil olmadığını; (2) ekonomi, farklı marka ve satıcıların makineleri arasında uyumsuzluk sağlamak, iş makinelerinin yanı sıra tasarım makineleri için sınırlı kaynakların (zaman / para) sonucudur.


Soru, “evrensel Turing makinesi” anlamında evrensel olan bir montaj dili değil, herhangi bir bilgisayarı programlamak için kullanılabilecek bir montaj dili hakkında sorular sormaktır.
David Richerby

1
Church-Turing, UTC'nin programlanabilir herhangi bir bilgisayarın yapabileceğini yapabileceğini söylüyor. Sonlu fiziksel depolama sorunları dışında. UTC için bir montaj dili oldukça uygundur. Ancak dediğim gibi kültürel ve ekonomik pratiklik, piyasadaki gerçek uygulama ve kabulü sınırlayabilir.
Chris

Performans olan en büyük sorunu özlüyorsunuz ! Neden bir donanım-agnostik olma hedefinin yüksek bir amacı için 1000 kat daha yavaş bir dil kullanıyorsunuz? Turing Makinesi, pratik hesaplama için korkunç bir modeldir.
Artelius

1
Yorum yapanlar iddialarını desteklemek için herhangi bir bilgisayar bilimi sunmayı ister miydi? Bu tüm bilgisayar bilimleri forumundan sonra.
Chris

1
Ben bir CS uzmanı değilim. Ancak, von Neumann mimarisinin programlanabilirlik ve performans arasında bir denge yaratan mükemmel bir mühendislik parçası olduğuna inandığım halde Turing makinasının amacı, en temel makinenin bile daha karmaşık bir makinenin yapabileceği her şeyi hesaplayabileceğini göstermektir. Elbette, bir Turing makinesine daha fazla özellik eklemeye devam edebilirsiniz (daha fazla kaset, aritmetik), ancak daha sonra ilk etapta sahip olduğunuz aynı problemi elde edersiniz, yani bir talimat setinde hemfikir olmayan insanlar. Ayrıca, rasgele erişimin eksikliği birçok algoritmada büyük masraflar yaratır.
Artelius 12:15

0

Varsayım: L1 seviyesinin üst seviye bir L1 diline L1 derlenmesi ve optimizasyonu L1 seviyesinden L2 (L1 den daha yüksek) L0 seviyesine kadar derlenmesi ve optimize edilmesi; L1'den L0'a derlenirken L2'den L0'a kadar daha iyi kod üretebileceğiniz sözde.

Varsayımın muhtemelen doğru olduğunu düşünüyorum, bu nedenle çoğu derleyicide muhtemelen düşük seviyeli bir ara dil (IR / LLVM) kullanılıyor.

bu, herhangi bir düşük seviye L0 kullanmaktan ve L0'ı diğer düşük seviyeli dillere çevirmek için derleyiciler yazmaktan doğruysa. Örneğin, MIPS komut setini kullanın ve bunu x86, arm, power, ...

-Taoufik


Yani cevabın doğru olup olmadığını bilmiyorsun? Ve destekleyemez mi?
Evil
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.