Stærk og svag skrivning

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 28. maj 2021; checks kræver 3 redigeringer .

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 .  

Historie

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 . 

Definition af "stærk" og "svag" skrivning

"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] .

Se også

Noter

  1. Graham I. Ordliste // Objektorienterede metoder. Principper og praksis = Objektorienterede metoder: Principper og praksis Tredje udgave / pr. fra engelsk. S. Belikova , O. Yadrenko , R. Imamutdinova , Natalya Kussul . - 3. udg. - Williams , 2004. - S. 791. - 880 s. — (Objektteknologier). - 2500 eksemplarer.  — ISBN 5-8459-0438-2 . — ISBN 0-201-61913-X . Arkiveret 1. november 2017 på Wayback Machine
  2. Kaufman V. Sh . 4.2.3. Stærk skrivning og unikke skrift // Programmeringssprog. Koncepter og principper . - DMK Press , 2011. - S. 93. - 464 s. — (Klassikere af programmering). - 1000 eksemplarer.  - ISBN 978-5-94074-622-5 .
  3. Liskov, Zilles. Programmering med abstrakte datatyper . — ACM Sigplan Notices, 1974. Arkiveret fra originalen den 28. marts 2014.
  4. K. Jackson. Parallel behandling og modulær softwarekonstruktion . - Lecture Notes in Computer Science, 1977. - S. 436-443 . — ISBN 3-540-08360-X .  (utilgængeligt link)
  5. 1 2 Arkiveret kopi (link utilgængeligt) . Hentet 26. maj 2013. Arkiveret fra originalen 23. oktober 2011.   side 3
  6. Brian Kernighan . Hvorfor Pascal ikke er mit foretrukne programmeringssprog (utilgængeligt link) . Hentet 13. marts 2014. Arkiveret fra originalen 6. april 2012. 
  7. Hvorfor er Python et dynamisk sprog og også et stærkt indtastet sprog - PythonInfo Wiki . Dato for adgang: 28. juni 2010. Arkiveret fra originalen 29. marts 2010.

Litteratur