virtlink schreef:Dat vind ik onzin. Asm is in de eerste plaats ontzettend handig om het binnenste van een computer te snappen. Dat een computer werkt met getallen en indirectie, en niet met symboolnamen en functies. Dat de processor niks weet van variabelen, maar een paar registers heeft waar je wat mee kan doen.
(...)
paging en segmentatie, noem maar op.
Ik ben heel blij dat er nog mensen zijn die Asm leren. Als Adm zou uitsterven, zou er een nieuw soort computer-analfabetisme ontstaan. Er zou geen programmeur meer zijn die de computer anders kan aansturen dan als een blackbox.
En hoe is dat, in alledaagse praktijksituaties vandaag de dag, precies van belang?
Volgens dat argument zou het net zo belangrijk zijn dat je als programmeur elektrotechniek en micro-elektronica studeert, want dan leer je pas écht hoe een computer werkt. En als je die lijn doortrekt, dan eigenlijk ook natuurkunde en quantumfysica.
Hoe simpele recursie op het laagste niveau moet worden opgelost door middel van een stack, en waarom een byte van 255 optellen bij een byte met waarde 255 een byte met waarde 254 geeft. Hoe kommagetallen er binair uit zien, of negatieve getallen in diverse notaties. Little endian,
De zaken die je hier noemt zijn inderdaad nuttig in allerlei praktijksituaties, maar dan gaat het meer om een conceptueel begrip dan kennis van assembler. Diezelfde kennis is net zo nuttig wanneer je voor intel als voor andere platforms programmeert (zoals game consoles, en tot voor kort de Mac, enz), en echt programmeren in Asm staat daar eigenlijk los van. De dingen die je omschrijft zijn mij ook vaak genoeg van pas gekomen in puur C++ situaties.
Ik ben het wel met je eens dat het programmeren in assembler je vanzelf met deze concepten vertrouwd maakt (evenals pointers bijvoorbeeld, er zijn verdomd veel programmeurs die daar geen hol van begrijpen). Maar dan wordt Asm meer een middel (een leermethode) dan een doel.
Vroeger was Asm ook handig (of zelfs noodzakelijk) om bepaalde hardware aan te kunnen sturen, zoals geluids- en videokaarten enzo. Dat is met de komst van Windows en drivers ook veranderd, nu zit daar een laag tussen en spreek je met apparaten op een universele manier. En eerlijk is eerlijk, dat is wel zo handig en scheelt een onwijze bult werk en tijd.
Alles wat in hogere talen geprogrammeerd kan worden, kan ook in Asm geschreven worden.
Dat is per definitie zo, want Asm is de enige taal die je computer kan uitvoeren. Iedere compiler zet een random taal om in Asm.
Asm is in principe totaal bugvrij te schrijven, zolang je maar elke subroutine grondig test en op bugvrije hardware werkt.
Dat geldt natuurlijk voor iedere taal. Bij Asm kost het alleen een veelvoud van de tijd, en is dus een stuk moeilijker om dat consistent vol te houden. En in de praktijk, waar een programma binnen een bepaalde tijd af moet zijn, is dat helemaal onrealistisch.
Programmeren in Asm kost veel,
veel meer tijd, en de kans op foutjes is groter, en die zijn bovendien moeilijker op te sporen.
Elk fatsoenlijk Asm programma is veel sneller dan welk gecompileerd programma dan ook,
Sorry, maar dat is echt volstrekte onzin. Ten eerste maakt het voor 99.99% van alle programma-onderdelen geen drol uit of het uit geoptimaliseerde assembler bestaat of een domme conversie vanuit een "hogere" programmeertaal. Ten tweede is het zeer twijfelachtig of je tegenwoordig nog wel betere Asm kunt maken dan wat compilers produceren. Heb je wel eens gekeken wat Visual C voor Asm produceert met alle optimalisaties aan? Dat is tamelijk ziek hoor, daar valt als programmeur (ook met de nodige expertise) nauwelijks nog tegenop te optimizen.
Processors van vandaag de dag zijn dusdanig ingewikkeld dat je met zoveel facetten rekening moet houden (pairing, caching, penalties, noem maar op), dat een beetje complex programma al zo'n monnikenwerk zou zijn om in Asm te bouwen, daar is haast geen beginnen aan. Laat staan dat je het ook nog net zo goed wilt optimizen als een compiler doet, dat kost nog eens een veelvoud van het werk en benodigde expertiese.
om van scripts nog maar te zwijgen.
Scripts worden doorgaans niet gecompileerd, dus dat is niet helemaal eerlijk te vergelijken. Maar zelfs daar zul je het in de praktijk zelden merken (scripts runnen vaak online en dan is de bandbreedte vaker de bottleneck dan de uitvoersnelheid van het script).
Pas als je intensieve dingen gaat doen in een scriptje (iets wat zwaar moet rekenen of veel data verwerken), dan wordt het merkbaar trager dan een 'echt' programma. Maar dat geldt zo'n beetje voor alle programma's gecompileerd in iedere willekeurige gecompileerde taal (met een fatsoenlijke compiler).
Je kunt dll's schrijven, of objects om te gebruiken in je OOPS taal.
(Net als boven) vanzelfsprekend, want andere talen waarin dat kan worden naar Asm omgezet.
Andersom is het ook zo:
alles wat je in Asm kan, kan ook in C, en omgekeerd. En alles wat je in x86 (intel) Asm kan, kan ook op een motorola cpu, en omgekeerd.
Het internet stikt van de voorbeelden en tutorial sites. En als je even doorbijt kun je in Asm net zo snel schrijven als in C.
Ik durf te wedden dat ieder programma dat een béétje complex is (dus geen hello world, al geldt het daar ook voor) een veelvoud van tijd kost om te maken in Asm.
Ik wil niet de zuurpruim uithangen en Asm afkraken ofzo. Ik heb er jaren 100% in geprogrammeerd dus ik weet waar ik het over heb. Evengoed kan het best leuk (en op sommige momenten zelfs nuttig) zijn om Asm te leren, maar vergis je niet in hoeveel tijd en moeite dat gaat kosten, en hoeveel je er echt aan hebt. Als het je om het nut gaat, ben je tegenwoordig volgens mij beter af door je te verdiepen in andere programmeeraspecten.
Een fraai voorbeeld vind ik
MenuetOS, een of andere freak die een compleet OS heeft gebouwd in 100% Asm. Oooh man wat moet die gast daar veel tijd in hebben gestoken! Compleet windowed, met netwerk support en browsers en alles. Erg leuk, veel hulde en respect voor zijn prestatie. En ook volslágen zinloos

In theory, there's no difference between theory and practice. In practice, there is.