İyi bir programcı olmak için donanım düzeyinde neler olduğunu anlamak gerekli midir?


24

Kendi kendine öğretilen bir programcıyım, bu sorunun CS 101'de cevaplanması durumunda. Çoğu zaman kendi kişisel kullanımım için, bazen de profesyonel şeyler için birçok dil öğrendim.

Sorun programlama ile karşılaştığımda hep aynı duvarla karşılaşıyorum. Örneğin, başka bir forumda, bir fonksiyon tarafından döndürülen bir pointer-to-string'in nasıl kullanılacağı hakkında bir soru sordum. Başlangıçta, C ++ tasarımcılarının durumu ele almak için kurdukları doğru tekniği bilmediğimi düşünüyorum. Ancak aşağıdaki cevap ve tartışmalardan, bir şey 'iade edildiğinde' ne olduğunu gerçekten anlamadığımı görüyorum.

İyi bir programcının programlama sürecini ne kadar derinlemesine anlaması gerekir?


3
Tavsiyem: Bazı x86 montajları öğren (DOS ya da başka türlü). Ardından, bazı küçük C kod parçalarının birleştirici çıktısını okumayı öğrenin. Çıktıyı anlamadıysanız sorular sorun. Tekrar et. Bu, CPU seviyesinde neler olup bittiğini anlamaya zorlayacak
Earlz


Earlz - x86 komut setini kullanarak programlamayı öğrenmem gerektiğini mi kastediyorsunuz? Bu 'CPU seviyesi' mi?
bev

İş - thx, eğlenceliydi. Aslında birkaç hata yaptı, tho, sadece FYI.
bev

Yanıtlar:


33

Hayır . Donanım düzeyinde neler olup bittiğini kimse anlamıyor.

Bilgisayar sistemleri soğan gibidir - birçok katman vardır ve her biri destek için altındaki katmana bağlıdır. Dış tabakalardan birinde çalışan adamsanız, soğanın ortasında ne olacağını çok fazla umursamamanız gerekir. Ve bu iyi bir şey, çünkü soğanın ortası daima değişiyor. Özel katmanınızı destekleyen katman veya katmanlar aynı görünmeye ve katmanınızı desteklemeye devam ettiği sürece, iyisinizdir.

Ama sonra tekrar...

Evet. Yani, soğanın içinde gerçekte neler olduğunu anlamanıza gerek yok , ancak tipik bir soğanın içinin nasıl göründüğünün zihinsel bir modeline sahip olmak çok yardımcı olur. Belki de en derin kısım, transistörlerden ve bunlardan oluşan kapılardan veya mikro kodunuz, saatten, talimat kod çözme birimlerinden vb. Sonraki katmandan veya ikiden oluşan kapıları. kayıtları, yığını ve yığını var. Bunlar, olanlar üzerinde çok fazla etkiye sahip olduğunuz en derin katmanlardır - derleyici, kodunuzu bu düzeyde çalışan yönergelere dönüştürür ve isterseniz, genellikle bu talimatların içinden geçip "gerçekten" neler olduğunu öğrenebilirsiniz.

Çoğu deneyimli programcı, bu katmanların başlarında biraz masal versiyonuna sahiptir. Size "geçersiz adres istisnası" veya "yığın taşması hatası" veya benzeri bir şey olduğunu söylerken derleyicinin neden bahsettiğini anlamanıza yardımcı olurlar.

İlgileniyorsanız, bilgisayar mimarisiyle ilgili bir kitap okuyun. Özellikle yeni bir kitap olması gerekmiyor - dijital bilgisayarlar uzun süredir aynı şekilde çalışıyorlar. Soğanın içi hakkında ne kadar çok şey öğrenirseniz, o kadar çok şeyin de işe yaraması o kadar şaşırtıcı olacaktır! Alt katmanlarda neler olup bittiğini öğrenmek (yaklaşık olarak) programlamayı hem daha az gizemli hem de bir şekilde daha büyülü yapar. Ve gerçekten, daha eğlenceli.

Bakabileceğiniz başka bir şey de gömülü soğanlardır. Er, gömülü sistemler demek istiyorum. Kullanımı oldukça kolay olan birçok gömülü platform var: Arduino ve BASIC Stamp iki örnektir. Bunlar temel olarak birçok dahili özelliğe sahip küçük mikroişlemcilerdir. Bunları tipik masaüstü PC'nizden daha az katmana sahip soğan olarak düşünebilirsiniz; bu nedenle, donanımdan yazılıma kadar tüm sistemde neler olup bittiğini tam olarak anlamak mümkündür.


2
Teşekkürler. Bu temelde sorumu cevaplıyor. Ben yonga düzeyinde (örneğin, transistör düzeyinde) kayıtların, eklerin, çoklayıcıların, vb. Tasarımını yapan bir EE'yim, bu yüzden en düşük seviyeye ulaşıyorum (kuantum mekaniği konuşmazsak). Ayrıca oldukça iyi bildiğim dilleri de kullanabilirim. Derleyicinin çalışacağını söylediğiniz orta seviye (yığın, yığın) arasında büyük bir boşluk var. Sizin de belirttiğiniz gibi, programlama deneyimimin "daha az gizemli ve ... daha büyülü" olmasını istiyorum. Bana hala bilinmeyen seviyelerde çalışmalıyım gibi görünüyor.
bev

@bev: Bu durumda, gerçekten Arduino gibi bir platforma göz atmalısın.
Caleb,

donuk olduğum için üzgünüm, ama Arduino'ya baktım ve bir derleyicinin işaretçilere ve dizilere farklı şekilde nasıl davrandığını anlamama nasıl yardımcı olacağını gerçekten göremiyorum. Neyi göremiyorum?
bev

@bev: Eğer sadece fonksiyonların nasıl çağrıldığını öğrenmek istiyorsanız, muhtemelen bunu okumak ve yapılması için 30 dakika harcayabilirsiniz. Her şeyin birlikte nasıl çalıştığını daha iyi anlamak istiyorsanız, küçük bir sistemle en kolay yol olacaktır. Bütün soğanı kafanıza almanın en iyi yolu budur. Arduino'nun dayandığı cips ailesi AVR, çok fazla sorun yaşamadan öğrenecek kadar küçük bir talimat setiyle kullanımı kolay, genel amaçlı, kullanımı kolay bir sistemdir.
Caleb,

Ah tamam. Ana sayfa, ürünlerinin bu yönüyle ilgili biraz bulanık. Tekrar bakacağım
bev

10

Donanım seviyesi hakkında konuşmuyorsunuz, derleyicinin yapmasını söylediklerinizle gerçekten ne yaptığından bahsediyorsunuz.

Açıkçası neyin yanlış olduğunu anlamak için, özellikle de bir bellek durması durumuyla uğraşırken, neyin yanlış gittiğini anlamak için kesinlikle bu anlayış seviyesine ihtiyacınız var.


Loren - evet! Basit gerçek için teşekkürler. Şimdi c ++ derleyicilerinin veri türleriyle neler yaptığını öğrenmenin en iyi yolunu bulmam gerekiyor. BTW, bir EE olarak, kelimenin tam anlamıyla donanım seviyesi olmadığını biliyorum. CS ineklerinin ne dediğini bilmiyorum. (Hala bu konuda değil. Derleyici seviyesi?)
bev

Btw - bellek stomp?
bev

@Bev: Buradaki amacımı kanıtladın - bir bellek kaybının ne olduğunu bile bilmiyorsan, biri yüzünden bir böcek bulmak için çok zamanın olacak. Bir bellek durması, bir şey olması gerekmeyen bir yere yazdığında ve orada olanları silerken (durduğunda). Şanslıysanız, neye çarptıysanız hemen hayati ve en azından havaya uçtu. Şanssızsanız, program sadece verilerinde bazı deliklerle devam ediyor.
Loren Pechtel

açıklama için teşekkürler. Aynı zamanda bana ne kadar bilmediğimi de gösteriyor, çünkü bildiğim kadarıyla sadece yığına ya da yığına daha hassas kontroller olmadan yazıyorum.
bev

@Bev: Sorun, yazdığını sanmadığınız bir yere yazarken ortaya çıkıyor. Yığında bir şey var ve ona bir işaretçi yapıyorsun. Rutini bırakıyorsunuz - öğe kayboluyor, işaretçi yok. Şimdi bu işaretçiye yazdığınızda ne olur? Veya 100 öğeden oluşan bir diziniz var - 200 numaralı maddeye yazdığınızda ne olacak?
Loren Pechtel

6

Program Hafızasını Anlamak! = Donanımı Anlamak

Bellek Hiyerarşisini Anlamak == Donanımı Anlamak


Genel sorunuza cevap vermek için: Bu değişir. Donanımı anlamaktan zarar gelmez, ancak bunu anlamak her durumda yardımcı olmaz.

Örneğinize göre, sadece bir program çalıştırırken belleğin nasıl bölündüğü ve nasıl organize edildiği hakkında daha fazla bilgi sahibi olmanız yeterlidir. Donanımı anlamak bu konuda size yardımcı olmaz, çünkü hafıza (bir program tarafından görülebilen) sanal belleğin sihri sayesinde donanımı bile gerçekten temsil etmez.

Belleğe erişim sırasını temel alan performans sorunlarını merak ediyorsanız, donanım, bellek heirarşi, önbellek özeti, sayfa hataları ve donanımdan gelen tüm görkemli harika iyiliği anlamaktan ŞİMDİ yararlanırsınız.


Hayalperest - Performans sorunları hakkında endişelenebileceğim bir noktada değilim. Umarım yakında. Yorumlarınız için teşekkürler.
bev

5

Eğer varsa do assembler biraz öğrenmeye karar, muhtemelen (tabii ki taklit) bir Commodore 64 6502 assembler gibi bir şey öğrenmek veya bir Amiga 68000 olmalıdır.

Commodore 64 hakkında bir fikir edinebilirsiniz ...

http://thepiratebay.org/torrent/4609238/Tag3-Saal2-Slot16_00--ID2874-the_ultimate_commodore_64_talk-Main

Bilmeniz gereken klasik kitap, burada açıklanan kitaptır.

http://reprog.wordpress.com/2010/03/12/programming-books-part-3-programming-the-commodore-64/

Etrafınıza bakarsanız muhtemelen bir PDF taraması bulabilirsiniz.

IMO, 6502, Z80'den ve 68000, 8086'dan daha kolaydır - daha düzenli komut setleri vb.

Ancak CPU, donanımın sadece bir yönüdür. Ayrıca, modern bir CPU muazzam derecede farklı bir canavardır ve sanal bir adres alanı sunmak gibi derleyiciler açısından bile şeffaf olan şeyler yapar.

6502'nin C64'teki özel bir avantajı yalnızca CPU'nun basit olması değil, aynı zamanda donanıma takılması da oldukça basit. SID müzik çipiyle oynamayı çok severdim.

Yani - çok fazla zaman harcamak yoksa muhtemelen değerli bir egzersiz. Commodore Basic'ten hemen sonra 14 yaşındayken ikinci dilim olarak 6502 assembler'ı öğrendim. Fakat çoğunlukla o kadar basit bir çalışma modeli elde ediyor ki, en az yanlış anlaşılma ile daha karmaşık fikirler ekleyebiliyorsunuz.

Assembler'da çalışmayı öğrenebileceğiniz bazı yararlı şeyler ...

  • CPU kayıtları nasıl çalışır?
  • Hafıza adresleme, dolaylı aktarma dahil olmak üzere nasıl çalışır?
  • CPU yığını nasıl çalışır?
  • Bitsel mantık nasıl çalışır?
  • CPU, G / Ç cihazlarını nasıl kontrol eder.
  • İş kesintileri nasıl yapılır?

Bunu tavsiye etmemin özel bir nedeni, basit adımların istihbarat veya sağduyu olmadan tamamen belirleyici, mekanik ve tamamen işleyiş şeklinin daha iyi anlaşılmasıdır. Temel olarak emir yürütme modeline en saf ve en inatçı cahil formunda alışmak.

Kesinlikle nasıl şimdi şeylerden en bilmektir yararlı olsa da, zor bir sorudur.

Öğrenmeyeceğiniz bir şey, bir hatıra hafızasıyla nasıl iyi oynayacağınızdır. Bu eski makineler çoğunlukla önbellek katmanı ve sanal bellek içermeyen basit bir bellek modeline sahipti. Aynı zamanda eşzamanlılık hakkında da pek bir şey öğrenemezsiniz - kesinlikle bununla baş etmenin yolu onlardı, ama bu çoğunlukla kesintiler anlamına geliyordu. Muteksler vb. İçin endişelenmenize gerek yoktu.

Bazen, bir zamanlar bu şeylerin nasıl çalıştığının ya da assembler'ın nasıl çalıştığının zihinsel bir modeli bile yanıltıcı olabilir. Örneğin, bir C işaretçisini bir adres olarak düşünmek tanımsız davranış sorunlarına yol açabilir. AC işaretçisi normalde bir adres içeren bir tamsayı olarak uygulanır, ancak bunun kesinlikle doğru olduğu garantisi yoktur. Örneğin, bazı tuhaf platformlarda, farklı işaretçiler farklı adres alanlarına işaret edebilir. İki işaretleyiciyle aritmetik veya bitsel mantık yapmak istediğinizde bu önemli hale gelir.

Bu tuhaf platformlardan birine sahip olmadığınız sürece, bunu umursamayacağınızı düşünebilirsiniz - ancak bu günlerde derleyicilerin optimizasyon için standartların tanımsız davranışlarından yararlanma olasılığı daha fazladır.

Dolayısıyla, sistem mimarisinin zihinsel bir modeli faydalı olabilir, ancak dilinizin ve platformunuzun saygı duymayacağı varsayımsal bir model için değil, dilin özelliklerine kodlama yapmak hala önemlidir.

Son olarak, birçok faydalı zihinsel model, derleyicilerin nasıl kod ürettiği hakkında bir fikir edinmekten kaynaklanır - ve modern diller için kod oluşturma, o zamanki oldukça önemsiz derleyicilerden çok farklıdır.

Bu benim için en sevdiğim kitap.

http://dickgrune.com/Books/MCD_1st_Edition/

Ayrıştırma ve AST'ler vb. İle ilgili şeylerin yanı sıra, bir dizi dil paradigması için - kodlama, OOP, fonksiyonel, mantık, paralel ve dağıtılmış - ve ayrıca bellek yönetimi için kod üretmeyi de kapsar. Polimorfik yöntemin nasıl çağırıldığını CPU komut seti ayrıntılarına boğmadan nasıl çalıştığını bilmek istiyorsanız, bunun gibi bir kitap arkadaşınızdır - ve yakında çıkacak yeni bir baskı var.


Steve - vay. Ben soruma cevabınızın tamlığı ve odağı ile suskunum. Bütün bu şeyleri yazmaya zaman ayırdığınız için çok teşekkürler. Kesinlikle önerilerinizi kabul ediyorum.
bev

1
PDP-11 birleştiricisinin, bahsettiğim diğer tüm öğelere göre öğrenmek için daha iyi olduğunu söyleyebilirim. Diğerlerinin öğrettiği şey, daha sınırlı donanım kaynakları ve / veya daha sınırlı donanım tasarımı ve öngörüsü tarafından zorlanan sınırlamalardır. Çok yaygın olan 8051 ailesinden biri gibi bir şey, programlama modelinin bu kadar sınırlı bir donanıma ne kadar garip gelebileceğini (Steve'in farklı adres alanlarından bahsettiği, örneğin devreye girdiği) öğretiyor.
Greg A. Woods,

@Greg - Hiç bir PDP-11 ile oynamam, korkarım. Ne de bir 8051 - Bir süreliğine bazı gömülü çalışmalar yaptım, fakat bu bir 8096-aile yongası kullanıyordu. Sadece bir göz vardı burada ilginç - gerçi. Harvard mimarisini bir süre önce duymuştum, ama çok popüler ve hala kullanımda olan böyle bir şey olduğunu bilmiyordum.
Steve314

4

Yirmi yıl önce önemliydi, ama şimdi pek değil - yazılım ve modern donanım arasında çok daha fazla soyutlama katmanı var.

Birden fazla çekirdekten yararlanmak için birden fazla iş parçacığına ihtiyaç duymak ya da sistemde olduğundan daha fazla bellek kullanmanın kötü bir şey olduğunu bilmek faydalıdır, ancak bunun ötesinde, bu soyutlamayı yazmak sizin işiniz olmadıkça gerçekten ihtiyacınız olmaz. katmanlar.

Sorunuzun geri kalanı, derleyiciyle biraz daha farklı bir donanımdan daha fazla endişe duyabileceğinizi gösteriyor. Önemli olduğu durumlar ile karşılaşabilirsiniz, ancak bunlar ya önemsiz (sonsuz özyineleme pek işe yaramadı) ya da çözme konusunda iyi hissedebileceğiniz ancak muhtemelen aynı problemle karşılaşmayacağınız türden bir dava olma eğilimindedir. tekrar.


Evet haklısınız, derleyici ile daha çok ilgileniyorum. Ayrıca, birden çok iş parçacığı, çok sayıda çekirdek vb. Hakkındaki öneriniz için teşekkür ederiz.
bev

@bev multithreading'in öğrenmesi kolaydır, gerçekten gerekmedikçe ve hatta o zaman bile yapma. benim deneyimimde değerinden daha fazla sorun.
Skeith

@Skeith - bahşiş için teşekkürler. Bunu aklımda tutacağım.
bev

4

Bunu bilmek ve donanım tarafından sunulan soyutlama ve anlamak için çok yardımcı olur az şey o yanılsama yaratılır hakkında genel bir fikir - ama çalışırken gerçekten kadar modern donanım anlama gerçekten Kendisinden çalışmalarının çok büyük miktarda çalışır olduğunu sadece minimum getiri görmesi muhtemel.

Küçük bir sapkınlığı affederseniz: bu bana birkaç yıl önce kaydettiğim bir şeyi hatırlatıyor. Onlarca yıl önce (1970'lerin sonlarına kadar) çoğu insan, bilgisayarların büyülü bir adım eksik olduğunu düşündü - fizik yasalarından pek etkilenmedi, çok az anlam ifade eden her şeyi yapabilen şeyler. O zamanlar, insanları hayır olmadıklarına, sihir olmadıklarına ikna etmek için (çoğunlukla başarısız) bir hayli zaman harcadım. Sınırlı sayıda şeyi çok hızlı ve güvenilir bir şekilde yapan, ancak aşırı derecede sıradan olan , gerçekten oldukça sıradan makinelerdi .

Günümüzde çoğu insanın bilgisayar görüşü değişmiştir. Şimdi oldukça sıradanlar - çok az sayıda sıradan insanın onları pratik bir şekilde kavradığı noktaya. Mesela, bir süre önce ben yemek yerken, yeni bilgisayarında ne alacağını tartışırken aralarında bir garson ve garson gördüm / duydum. Verdiği tavsiye tamamen makul ve gerçekçiydi.

Bilgisayarlara bakış açım da değişti. Hot Chips'e gittim ve bundan önce Mikroişlemci Forumu 1990'ların ortalarına kadar devam ediyor. Muhtemelen mikroişlemci donanımı hakkında programcıların en az% 99'undan daha fazla şey biliyorum - ve ne yaptığımı bilerek şunu söyleyeceğim: onlar artık sıradan değiller . Onlar do fizik yasalarını kırmak neredeyse. Çok düşük seviyeli testler yaptım ve şunu kesin olarak söyleyebilirim: CPU tarafından yaratılan illüzyondan ve donanımın gerçekte nasıl çalıştığını gösterme seviyesine geçmek genellikle zor. Sadece düzgün ölçmek için hiçbir 4'ten daha az mantık analizörleri kabloların altında gömülü bir bilgisayar ile bizim kurulumları birinin bir fotoğraf göndermek isterdim birini önbelleğe alma işleminin modern bir CPU'da nasıl çalıştığı (ölçüldüğümüzün CPU'nun tam olarak ne yaptığını ve başka bir şey olmadığını garanti etmek için gerçekten titiz bir programlamadan bahsetmiyorum bile).


Jerry - Yorumlarınız için teşekkürler. Bir EE olarak, transistör seviyesi ile bazı yüksek soyutlama seviyelerinden daha rahatım. Gerçekten sadece iyi bir C ++ programcısı olmak için bilmem gerekenleri merak ediyorum.
bev

Bu resim kulağa ilginç geliyor. Neden gönderemiyorsun?
Mason Wheeler

@Bev: İyi bir programcı olmak için transistör seviyesinde hiçbir şey bilmenize gerek yok . Bu soyutlamalar bir sebepten dolayı var ve hemen hemen her zaman, makine kodunun / montajının altındaki bir soyutlama seviyesindeki her şeyi tamamen alakasız olduğunu düşünebilir ve sadece çalıştığını varsayabilirsin.
Mason Wheeler

@MasonWheeler: Eskiden çalıştığım yere götürdüm, ama orada daha fazla çalışmadığım için, erişim almak muhtemelen biraz daha zor olurdu (muhtemelen imkansız değil - iyi şartlarda bıraktım, ama öyle bile). ..)
Jerry Coffin

1

Farklı diller, donanımdan farklı soyutlama düzeylerinde çalışır. C ve C ++ çok düşük seviyelidir. Diğer taraftan, betik dilleri, altta yatan ayrıntı hakkında daha az şey bilmenizi gerektirir.

Bununla birlikte, her durumda, ne kadar çok bilirseniz, bir programcının da o kadar iyi olacağını söyleyeceğim. Programlamanın bir kısmı, aynı anda birden fazla soyutlama seviyesini dengeleyebiliyor.

C ++ ile programlama yapıyorsanız, en azından derleyicinin çalıştığı soyutlama düzeyinde modern bir işlemcinin nasıl çalıştığını iyi bilmeniz gerekir. (İşlemcinin içinde derleyiciye karşı saydam olan şeyler de var).


Scott - "modern bir işlemcinin nasıl çalıştığını çok iyi anlıyoruz .." ile dijital mantığın nasıl çalıştığını kastediyorsunuz (örneğin, karnaugh haritaları, doğruluk tabloları, VE / VEYA / NOR / XOR kapıları nasıl çalışır)? veya derleyicinin doğrudan kullandığı kaynakları mı demek istiyorsun?
bev

Daha fazlasını bilmek iyidir. Asıl püf noktası, ne kadar "daha" nin paranın karşılığını en iyi şekilde alacağını bilmek. Örneğin, talimat zamanlamalarını bilmek, derleyicinizin hangi talimatları kullanacağını tahmin etmek neredeyse imkansız olduğunda çok fazla kullanılamaz. Bir profilleyicinin nasıl kullanılacağını öğrenmek muhtemelen çok daha iyi bir maliyet / fayda oranı verecektir.
Steve314

1
@bev - Hayır, geçit seviyesine inmeniz gerekmiyor. Eğer temel mimariyi (bellek, veri yolu, CPU) az önce bir talimatı nasıl yüklediğini, uyguladığını, sonucunu sakladığını vb. Ayrıca, derleyicinin, yığını ve yığını kullanma şeklini içeren bir programın bellek alanını nasıl oluşturduğunu anlamanız gerekir.
Scott Whitlock

@ScottWhitlock - Teşekkürler - bu sadece aradığım özel önerilerden biri.
bev

0

C gibi yüksek seviyeli dillerin genel tasarımı hakkında bir nokta eklemek istiyorum.

Genel olarak, bu tür dillerin soyut bir makinenin uygulanması olarak görülebildiğini söylemek güvenlidir ve aslında Dennis Ritchie'nin kendisinin C'nin nasıl çalıştığını ve C'nin soyut makinesinin özel tasarımının onu daha taşınabilir bir dil haline getirdiğini anlattı. Bazı bilgisayar mimarisi ve makine düzeyinde işleyişi anlama gibi, bir dilin soyut makinesini anlamada da son derece yardımcı olabilir.

DMR'nin makalesi C Programlarının Taşınabilirliği ve UNIX Sistemi , C için (soyut) makine modelini tartıştığım ilk hatırlıyorum.

DMR'nin C'nin tarihi ve gelişimi hakkındaki makalesinin, gerçek donanımın dil tasarımını nasıl etkilediğini göstermede de son derece yararlı olduğunu ve belki de erken programlama dili tasarımının bir örneği olduğunu düşünüyorum: C Dilinin Gelişimi


Burada yeniyseniz, bunun bir forum olduğunu düşünüyor gibi görünüyorsunuz, kesinlikle değil. Bir soruya verdiğiniz cevaplar, eklediğiniz bir nokta olmamalı, yorumlara eklenmeli ve cevap doğrudan soruya kapsamlı bir cevap vermeye çalışmalıdır. İyi bir noktaya değiniyorsunuz ve bu konu bilgisinde değerlidir, belki de soruyu cevaplamak için birkaç satır koyabilirseniz, doğrudan bu açıklama ile birlikte soruyu cevaplamak harika olurdu. Burada paylaştığınız harika bilgi. Programcılara Hoşgeldiniz!
Jimmy Hoffa

Yorumlar sürümlü değildir ve kalıcı değildir ve bir dizi cevabı eklemek için de yararsızdır. Çoğu poster, cevaplarını güncellemek için yorumların kullanılmasını da ihmal etmeye meyillidir ve çoğu cevap "topluluk wiki" cevapları olarak etiketlenmez ve bu nedenle başkaları tarafından müteakip katkıda bulunanlara bir atıfta bulunacak şekilde düzenlenemez. . Ayrıca, bu belirli soru gerçek bir tartışma başlattı ve beğenmek ya da beğenmemek, bazı şeylerin gidişat yolu. Her katkısını bir kalıba zorlamaya çalışmak stackexchange kavramının önemli bir başarısızlığıdır.
Greg A. Woods

ve btw, aslında, OP'den gelen tek bir soruyu dolaylı olarak açık bir şekilde yanıtladım: soyut makineyi bir dilin tasarımının çekirdeğinde modelleyebilecek kadar donanım anlayışına sahip olmalı.
Greg A. Woods,
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.