Broncode, beter bekend als sourcecode, is een begrip uit de informatica. Het duidt op de tekst van een computerprogramma, zoals die door een programmeur in een formele programmeertaal wordt geschreven, en staat in tegenstelling tot de uitvoerbare code (beter bekend als executable code, executable, .exe) of machinetaal voor de processor zoals die door een compiler vanuit de broncode gegenereerd wordt.
Compileren wil zeggen: vertalen van broncode naar uitvoerbare code. Dit wordt gedaan met een compiler.
Assembleren wil zeggen: vertalen van door een compiler gegenereerde assembly-code, of handgeschreven assembly-broncode (in beide gevallen gewoon leesbare tekst) naar uitvoerbare code.
Interpreteren wil zeggen: door een speciaal daarvoor bedoeld computerprogramma, een interpreter worden uitgevoerd. Interpreteren gaat als regel wat langzamer, omdat elke instructie iedere keer dat de computer deze uitvoert weer opnieuw door interpreter moet worden vertaald naar uitvoerbare code.
Bij veel moderne programmeertalen, zoals Java, Perl, Python en C# wordt een mengvorm gebruikt: de broncode wordt eerst gecompileerd naar een tussentaal, die vervolgens door een virtual machine wordt geïnterpreteerd. Enkele voordelen van deze constructie zijn:
- De gecompileerde code is platformonafhankelijk en kan tot op het moment van uitvoeren over een netwerk worden verplaatst en gecombineerd met andere componenten.
- De interpreter kan op het moment van uitvoeren nog bepaalde controles en bewerkingen uitvoeren, zoals de sandbox security van Java-applets en performance-optimalisatie.
- 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.
- .NET gebruikt een tussentaal die het mogelijk maakt om een C# programma om te zetten naar een VB.NET programma. Hierdoor kun je broncode die geschreven is in ee taal waar je geen ervaring mee hebt omzetten naar een waarbij dat wel zo is.
Een nadeel kan zijn dat mensen soms niet realiseren dat tussentalen gevoeliger zijn voor decompilatie. Zo realiseren zich over het algemeen niet dat broncode van programma's gemaakt in Flash (de taal van flash heet Actionscript) die zijn gecompileerd naar swf bestanden, zeer eenvoudig te reconstrueren is. Dit geldt ook voor Java.
Een interpreter die direct de broncode uitvoert is mogelijk, maar wordt in verband met de slechtere performance niet gebruikt voor veeleisende
toepassingen.
Direct in machinetaal programmeren is mogelijk. Doorgaans wordt ook hier van een low-level programeertaal gebruikgemaakt, in de vorm van Programmeertaal Assembler. Alleen voor uiterst tijdkritsche of compacte code wordt dit toegepast. Het is nogal specialistisch en zeer arbeidsintensief werk.
Voorbeeld broncode in programmeertaal C:
square( int i )
{
i = i * i;
return( i );
}
wordt bijvoorbeeld in assembly iets als:
SQUARE:
PUSH B
MOV A, [SP+2]
MOV B, A
MULT
POP B
RET
en in machinetaal (op een .... pentium zeker :-) (ps)) ....
1800260225005510120003FF
Bestandsnamen
.c
.cp (.cpp .cxx)
.java
----------> compileren ----> Uitvoerbare code
.exe
.so (shared object).