Ifølge en af klassifikationerne er programmeringssprog uformelt opdelt i stærkt og svagt type , det vil sige at have et stærkt eller svagt typesystem . Disse udtryk er ikke entydigt fortolket, og bruges oftest til at angive fordele og ulemper ved et bestemt sprog. Der er mere specifikke begreber, der fører til navngivningen af visse typesystemer " stærke " eller " svage ".
I russisksproget litteratur bruges udtrykket " stærk skrivning " [1] [2] ofte ; almindelig variant " stærk skrivning " bruges kun ved kontrast til " svag skrivning ". Bemærk, at brug af udtrykket " streng " i forhold til et sprogs typesystem kan forårsage forvirring med sprogets strenge evalueringssemantik .
I 1974 kaldte Liskov og Zilles stærkt indtastede sprog, hvor " når et objekt overføres fra en kaldende funktion til en kaldet funktion, skal typen af det pågældende objekt være kompatibel med typen defineret i den kaldede funktion " [3] . Jackson skrev: " I et stærkt indtastet sprog vil hver datacelle have en unik type, og hver proces vil proklamere sine forholdskrav i form af disse typer " [4] .
I Luca Cardellis artikel " Full Type Programming " 5 ] kaldes et typesystem "stærkt", hvis det eliminerer muligheden for en runtime type matchingsfejl. Med andre ord kaldes fraværet af ukontrollerede køretidsfejl typesikkerhed ; Hoares tidlige arbejde kalder denne ejendomssikkerhed .
"Stærk" og "svag" skrivning er et produkt af mange beslutninger, der er truffet i designet af et sprog. Mere præcist er sprog kendetegnet ved tilstedeværelsen eller fraværet af typekonsistenssikkerhed og hukommelsesadgangssikkerhed såvel som den karakteristiske timing af en sådan kontrol ( statisk eller dynamisk ).
For eksempel er klare eksempler på et system med svag type dem, der ligger til grund for sprogene C og C++ . Deres karakteristiske egenskaber er begreberne type casting og maskinskrivning . Disse operationer understøttes på compilerniveau og kaldes ofte implicit. En operation reinterpret_casti C++ giver dig mulighed for at repræsentere et dataelement af enhver type som tilhørende enhver anden type, forudsat at længden af deres lavniveauimplementering (bitrepræsentation) er den samme og ændre dens tilstand på en måde, der er ugyldig for kildetypen. Skødesløs brug af sådanne operationer er ofte kilden til programnedbrud . På trods af dette beskriver C++-lærebøger dets typesystem som " stærkt ", hvilket, givet Luca Cardellis [5] og andres afhandling, skal forstås som " stærkere end i C ". I modsætning hertil er begrebet typestøbning i princippet fraværende i sprog skrevet ifølge Hindley-Milner . Den eneste måde at "konvertere" en type på er at skrive en funktion, der algoritmisk konstruerer en værdi af den påkrævede type ud fra værdien af den oprindelige type. For trivielle tilfælde, såsom at "konvertere" et usigneret heltal til et signeret heltal og omvendt, er sådanne funktioner normalt inkluderet i standardbibliotekerne. Det mest almindeligt anvendte tilfælde af denne slags funktioner er specialdefinerede funktioner med en tom krop, kaldet konstruktørfunktioner eller blot konstruktører .
Samtidig giver Hindley-Milner-systemet en ekstrem høj grad af kodegenbrug på grund af parametrisk polymorfi . Et stærkt, men ikke polymorft system kan gøre det vanskeligt at løse mange algoritmiske problemer, som det blev bemærket i forhold til Pascal -sproget [6] .
Der er en opfattelse af, at stærk skrivning er et uundværligt element for at sikre pålideligheden af udviklet software. Når det bruges korrekt (hvilket betyder, at programmet erklærer og bruger separate datatyper til logisk inkompatible værdier), beskytter det programmøren mod simple, men svære at finde fejl, der er forbundet med deling af logisk inkompatible værdier, nogle gange blot som følge af en simpel tastefejl.
Sådanne fejl opdages selv på programkompileringsstadiet, hvorimod med muligheden for implicit konvertering af næsten alle typer til hinanden (som f.eks. i det klassiske C-sprog), opdages disse fejl kun under test, og ikke alle og ikke umiddelbart, hvilket nogle gange er meget dyrt i industridriftsstadiet.
Python er et eksempel på et sprog med stærk dynamisk skrivning [7] .