Broncode: verschil tussen versies

Uit Wikipedia, de vrije encyclopedie
Verwijderde inhoud Toegevoegde inhoud
→‎Gebruik van de broncode: vrijwel alle talen gebruiken een VM
NielsH97 (overleg | bijdragen)
Geen bewerkingssamenvatting
Regel 1: Regel 1:
[[Bestand:CodeCmmt002.svg|thumb|Broncode in [[Java (programmeertaal)|Java]] met [[Commentaar (programmeren)|commentaar]] in rood en groen, de uitvoerbare code is blauw weergegeven.]]
[[Bestand:CodeCmmt002.svg|thumb|Broncode in [[Java (programmeertaal)|Java]] met [[Commentaar (programmeren)|commentaar]] in rood en groen, de uitvoerbare code is blauw weergegeven.]]
De '''broncode''' (ook wel '''brontekst''' of in het Engels: '''''source''''' of '''''source code''''') van een [[computerprogramma]] is de leesbare tekst die door de [[programmeur]] in een [[programmeertaal]] is geschreven. Dit in tegenstelling tot de ''uitvoerbare (executable) code'' of doelcode ({{en}}object-code) zoals die door een [[compiler]] of [[interpreter]] vanuit deze broncode gegenereerd wordt.
De '''broncode''' (ook wel '''brontekst''' of in het Engels '''''source''''' of '''''source code''''') van een [[computerprogramma]] is de leesbare tekst die door de [[Softwareontwikkelaar|programmeur]] in een [[programmeertaal]] is geschreven. Dit in tegenstelling tot de ''uitvoerbare (executable) code'' of doelcode ({{en}}object-code) zoals die door een [[compiler]] of [[interpreter]] vanuit deze broncode gegenereerd wordt.


== Gebruik van de broncode ==
== Gebruik ==
De broncode kan op een aantal manieren worden omgezet naar uitvoerbare code zodat het programma uitgevoerd kan worden.
De broncode kan op een aantal manieren worden omgezet naar uitvoerbare code zodat het programma uitgevoerd kan worden.


* Met een compiler: Een compiler zet de broncode om in machinetaal zodat deze uitgevoerd kan worden. Als de compiler eerst assembly-code genereert moet de [[assembler (software)|assembler]] dat eerst naar machinetaal vertalen om het uitvoerbare programma te verkrijgen.
* Met een compiler: Een compiler zet de broncode om in [[machinetaal]] zodat deze uitgevoerd kan worden. Als de compiler eerst assembly-code genereert moet de [[assembler (software)|assembler]] dat eerst naar machinetaal vertalen om het uitvoerbare programma te verkrijgen.
* Met een interpreter: De broncode kan in sommige gevallen ook uitgevoerd worden met een interpreter, een programma dat de broncode gelijk uitvoert. Dit is doorgaans een stuk langzamer dan een gecompileerd programma, aangezien elke regel van de code eerst verwerkt moet worden voordat deze uitgevoerd wordt. In de praktijk zetten moderne interpreters de broncode eerst om in een [[interne representatie]], wat ook een vorm van compileren is, om deze interne representatie van het programma vervolgens uit te voeren.
* Met een interpreter: De broncode kan in sommige gevallen ook uitgevoerd worden met een interpreter, een programma dat de broncode gelijk uitvoert. Dit is doorgaans een stuk langzamer dan een gecompileerd programma, aangezien elke regel van de code eerst verwerkt moet worden voordat deze uitgevoerd wordt. In de praktijk zetten moderne interpreters de broncode eerst om in een [[interne representatie]], wat ook een vorm van compileren is, om deze interne representatie van het programma vervolgens uit te voeren.
* Middels een aparte [[virtuele machine]]. Bij veel moderne programmeertalen, zoals [[C♯|C#]], [[Programmeertaal Java|Java]], [[Perl (programmeertaal)|Perl 6]] en [[Scala_(programmeertaal)|Scala]] wordt meestal een mengvorm gebruikt: de broncode wordt eerst gecompileerd naar een tussentaal ([[bytecode]], [[P-code]] of 'managed code' [[MSIL]]), die vervolgens door een aparte ''virtuele machine'' wordt geïnterpreteerd. Enkele voordelen van deze constructie zijn:
* Middels een aparte [[virtuele machine]]. Bij veel moderne programmeertalen, zoals [[C♯|C#]], [[Java (programmeertaal)|Java]], [[Perl (programmeertaal)|Perl 6]] en [[Scala_(programmeertaal)|Scala]] wordt meestal een mengvorm gebruikt: de broncode wordt eerst gecompileerd naar een tussentaal ([[bytecode]], [[P-code]] of 'managed code' [[MSIL]]), die vervolgens door een aparte ''virtuele machine'' wordt geïnterpreteerd. Enkele voordelen van deze constructie zijn:
** De gecompileerde code is platformonafhankelijk.
** De gecompileerde code is platformonafhankelijk.
** De interpreter kan op het moment van uitvoeren nog bepaalde controles en bewerkingen uitvoeren, zoals de [[sandbox security]] van Java-[[applet]]s en een optimalisatie van de performance.
** De interpreter kan op het moment van uitvoeren nog bepaalde controles en bewerkingen uitvoeren, zoals de [[sandbox security]] van [[Java-applet|Java-applets]] en een optimalisatie van de performance.
<!-- ** Bij sommige talen wordt het ontwikkelmodel vereenvoudigd, doordat de compilatiestap impliciet wordt uitgevoerd. De programmeur ervaart de flexibiliteit van een interpreter terwijl de performance veel beter is dan wanneer niet gecompileerd zou worden. -->
<!-- ** Bij sommige talen wordt het ontwikkelmodel vereenvoudigd, doordat de compilatiestap impliciet wordt uitgevoerd. De programmeur ervaart de flexibiliteit van een interpreter terwijl de performance veel beter is dan wanneer niet gecompileerd zou worden. -->


Er is ook een constructie waarbij de broncode in een andere broncode wordt vertaald. Bijvoorbeeld in de taal [[PL/SQL]] waarbij de universele PL/SQL compiler de broncode naar een C-code (ontdaan van [[objectgeoriënteerd]]e code maar voorzien van 'embedded SQL') vertaald die automatisch door een 'native' C compiler weer vertaald wordt naar een zeer optimale machinecode.
Er is ook een constructie waarbij de broncode in een andere broncode wordt vertaald. Bijvoorbeeld in de taal [[PL/SQL]] waarbij de universele PL/SQL-compiler de broncode naar een [[C (programmeertaal)|C]]-code (ontdaan van [[objectgeoriënteerd]]e code maar voorzien van 'embedded [[SQL]]') vertaald die automatisch door een 'native' C-compiler weer vertaald wordt naar een zeer optimale machinecode.


Het is ook mogelijk direct te [[Programmeren (computer)|programmeren]] in machinetaal. Doorgaans wordt hier van een (low-level) programmeertaal gebruikgemaakt in de vorm van een [[assembler (software)|assembler]] waarbij in principe één regel code één machine-instructie oplevert, bestaande uit enkele bytes. Dit wordt soms gedaan voor uiterst tijdkritische code, want het is specialistisch en zeer arbeidsintensief werk. Optimalisaties die compilers doen zijn tegenwoordig onovertroffen. Ook is machinetaal platformafhankelijk en de investering wordt direct waardeloos bij gebruik van een incompatibel platform.
Het is ook mogelijk direct te [[Programmeren (computer)|programmeren]] in machinetaal. Doorgaans wordt hier van een (low-level-) programmeertaal gebruikgemaakt in de vorm van een assembler waarbij in principe één regel code één machine-instructie oplevert, bestaande uit enkele [[Byte|bytes]]. Dit wordt soms gedaan voor uiterst tijdkritische code, want het is specialistisch en zeer arbeidsintensief werk. Optimalisaties die compilers doen zijn tegenwoordig onovertroffen. Ook is machinetaal platformafhankelijk en de investering wordt direct waardeloos bij gebruik van een incompatibel platform.


=== Voorbeeld ===
=== Voorbeeld ===
De volgende broncode in [[Programmeertaal C|C]]:
De volgende broncode in C:
<syntaxhighlight lang="C">
<syntaxhighlight lang="C">
int square(int i )
int square(int i )

Versie van 12 dec 2016 19:22

Broncode in Java met commentaar in rood en groen, de uitvoerbare code is blauw weergegeven.

De broncode (ook wel brontekst of in het Engels source of source code) van een computerprogramma is de leesbare tekst die door de programmeur in een programmeertaal is geschreven. Dit in tegenstelling tot de uitvoerbare (executable) code of doelcode ((en) object-code) zoals die door een compiler of interpreter vanuit deze broncode gegenereerd wordt.

Gebruik

De broncode kan op een aantal manieren worden omgezet naar uitvoerbare code zodat het programma uitgevoerd kan worden.

  • Met een compiler: Een compiler zet de broncode om in machinetaal zodat deze uitgevoerd kan worden. Als de compiler eerst assembly-code genereert moet de assembler dat eerst naar machinetaal vertalen om het uitvoerbare programma te verkrijgen.
  • Met een interpreter: De broncode kan in sommige gevallen ook uitgevoerd worden met een interpreter, een programma dat de broncode gelijk uitvoert. Dit is doorgaans een stuk langzamer dan een gecompileerd programma, aangezien elke regel van de code eerst verwerkt moet worden voordat deze uitgevoerd wordt. In de praktijk zetten moderne interpreters de broncode eerst om in een interne representatie, wat ook een vorm van compileren is, om deze interne representatie van het programma vervolgens uit te voeren.
  • Middels een aparte virtuele machine. Bij veel moderne programmeertalen, zoals C#, Java, Perl 6 en Scala wordt meestal een mengvorm gebruikt: de broncode wordt eerst gecompileerd naar een tussentaal (bytecode, P-code of 'managed code' MSIL), die vervolgens door een aparte virtuele machine wordt geïnterpreteerd. Enkele voordelen van deze constructie zijn:
    • De gecompileerde code is platformonafhankelijk.
    • De interpreter kan op het moment van uitvoeren nog bepaalde controles en bewerkingen uitvoeren, zoals de sandbox security van Java-applets en een optimalisatie van de performance.

Er is ook een constructie waarbij de broncode in een andere broncode wordt vertaald. Bijvoorbeeld in de taal PL/SQL waarbij de universele PL/SQL-compiler de broncode naar een C-code (ontdaan van objectgeoriënteerde code maar voorzien van 'embedded SQL') vertaald die automatisch door een 'native' C-compiler weer vertaald wordt naar een zeer optimale machinecode.

Het is ook mogelijk direct te programmeren in machinetaal. Doorgaans wordt hier van een (low-level-) programmeertaal gebruikgemaakt in de vorm van een assembler waarbij in principe één regel code één machine-instructie oplevert, bestaande uit enkele bytes. Dit wordt soms gedaan voor uiterst tijdkritische code, want het is specialistisch en zeer arbeidsintensief werk. Optimalisaties die compilers doen zijn tegenwoordig onovertroffen. Ook is machinetaal platformafhankelijk en de investering wordt direct waardeloos bij gebruik van een incompatibel platform.

Voorbeeld

De volgende broncode in C:

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

wordt bijvoorbeeld in een assembleertaal zoiets als:

 SQUARE: PUSH B
  MOV A, [SP+2]
  MOV B, A
  MULT 
  POP B 
  RET

en in een gebruikersvriendelijke machinecode (hier weergegeven in het hexadecimale stelsel, achtereenvolgens geheugenadres, machinecodes en controle-som):

1800260225005510120003FF