Statisk typning är en teknik som ofta används i programmeringsspråk , där en variabel , en subrutinparameter, ett funktionsreturvärde är associerat med en typ vid tidpunkten för deklarationen och typen inte kan ändras senare (variabeln eller parametern kommer att acceptera, och funktionen returnerar endast värden av denna typ). Exempel på statiskt skrivna språk är Ada , C , C++ , C# , D , Java , ML , Pascal , Solidity , Go , Fortran. Den motsatta tekniken är dynamisk typning .
Vissa statiskt typade språk fick senare möjligheten att även använda dynamisk typning med hjälp av speciella delsystem. Till exempel, Varianti Delphi , paket i AliceML [1] , Data.Dynamici Haskell [2] .
Statisk typning producerar den enklaste maskinkoden , så den är användbar för språk som producerar körbara operativsystem eller JIT-kompilerad mellankod . Många fel elimineras redan vid kompileringsstadiet, så statisk typning är bra för att skriva komplex men snabb kod. I en IDE är mer relevant autokomplettering möjlig , särskilt om skrivningen är stark statisk: många val kan ignoreras eftersom de inte matchar typen. Ju större och mer komplext projektet är, desto större är fördelen med statisk typning och vice versa.
Samtidigt visar sig statiskt skrivna språk med en otillräckligt utvecklad matematisk bas vara ganska utförliga: varje gång måste du ange vilken typ av variabeln. Vissa språk har automatisk typinferens , men detta kan leda till subtila buggar. Detta är inte sant för språk i ML -familjen, baserat på det så kallade " principal typing scheme [3] ", som både automatiskt härleder den mest allmänna typen av alla uttryck och strikt kontrollerar beroendetypsmatchning. Detta ger språket uttrycksförmågan hos dynamiskt typade, samtidigt som det ger bättre prestanda och typsäkerhet [3] .