Адным з варыянтаў умоўнай клясыфікацыі моў праграмаваньня ў машынным праграмаваньні зьяўляецца разьмеркаваньне іх паводле таго, моцна ці слаба тыпізаванымі робіць іх сыстэма тыпаў. Аднак дакладнага тэхнічнага вызначэньня гэтых тэрмінаў няма — адсюль і спрэчкі наконт адноснага ранжыраваньня «моцы» сыстэм тыпаў.[1] З-за чаго часта пазьбягаюць выразаў «моцная тыпізацыя» і «слабая тыпізацыя» на карысць канкрэтных тэрмінаў, такіх як «бясьпека тыпаў».
Як правіла, мова з моцнай тыпізацыяй мае больш строгія правілы тыпізацыі падчас кампіляцыі — памылкі і выключэньні часцей узнікаюць падчас кампіляцыі. Большасць з гэтых правілаў уплываюць на прызначэньне зьменных, вяртаемыя функцыямі значэньні, аргумэнты працэдур і выклікі функцый. Мовы з дынамічнай тыпізацыяй (дзе праверка тыпаў адбываецца падчас выкананьня) таксама могуць быць моцна тыпізаванымі. У дынамічна тыпізаваных мовах значэньні, а не зьменныя, маюць тыпы.
Слаба тыпізаваная мова мае больш свабодныя правілы вызначэньня тыпаў — звычайна, няяўнае пераўтварэнне тыпаў адбываецца падчас выкананьня. Часта гэта можа даць непрадказальныя вынікі, ці нават прывесьці да памылкі.[2] Іншай роднаснай канцэпцыяй да слабае тыпізацыі зьяўляецца — лятэнтная тыпізацыя.
У 1974 годзе Барбара Ліскоў і Стывен Зіл вызначылі строга тыпізаваную мову як мову, у якой «кожны раз, калі аб’ект перадаецца ад зрабіўшае выклік функцыі да выкліканай функцыі, яго тып павінен быць сумяшчальны з тыпам, аб’яўленым у выкліканай функцыі».[3] У 1977 г. К. Джэксан пісаў: «У моцна тыпізаванай мове кожная вобласць даных мае свой тып, і кожны зварот да яе выконвае патрабаваньні гэтых тыпаў».[4]
Для клясыфікацыі мовы як «моцна» ці «слаба» тыпізаванай зьвяртаюць увагу на такіх яе характарыстыкі як: бясьпека тыпаў, бясьпека памяці, статычная або дынамічная праверка тыпаў.
Тыпы даных пры «моцнай тыпізацыі» звычайна выкарыстоўваюцца для забясьпячэньня карэктнасьці кода і вылучэньня некаторых клясаў памылак праграмаваньня.
Некаторыя мовы праграмаваньня дазваляюць выкарыстоўваць значэньне аднаго тыпу ў якасьці значэння іншага тыпу. Часам гэта вызначаюць як «слабая тыпізацыя».
Напрыклад, Ааз Марух заўважае: «Прымусовае ўжываньне значэньня аднаго тыпу ў якасьці значэньня іншага тыпу, якое магчымае ў некаторых мовах са статычнай тыпізацыяй, дзякуючы іх пэўным сынтаксычным асаблівасьцям (разгледзім звычайнае выкарыстанне void* у C), — звычайная прыкмета слабай тыпізацыі.»[5]
Іншы прыклад, GCC апісвае гэта як «жангліраваньне тыпамі» і папярэджвае, што гэта парушае строгую адрасацыю. Т’яга Мас’эйра абмяркоўвае некалькі праблемаў, якія могуць узьнікнуць, калі «жангліраваньне тыпамі» прымушае кампілятар рабіць недарэчныя аптымізацыі.[6]
Шмат моў дазваляюць зьдзяйсьняць пераўтварэньне тыпаў бясьпечным для тыпу спосабам. Напрыклад, як C++, так і C# дазваляюць праграмам вызначаць апэратары для пераўтварэння значэння з аднаго тыпу ў іншы з дакладна вызначанай сэмантыкай. Калі кампілятар C++ сутыкаецца з такім пераўтварэннем, ён разглядае апэрацыю як выклік функцыі. Наадварот, пераўтварэньне значэння ў тып void* у C - небяспечная аперацыя, нябачная для кампілятара.
Некаторыя мовы праграмаваньня даюць магчымасьць працаваць з указальнікі як зь лікавыя значэньнямі й выконваць над імі арытметычныя апэрацыі. Гэтыя мовы часам называюць «слаба тыпізаванымі», паколькі арытметыка паказальнікаў можа выкарыстоўвацца для абыходу сістэмы тыпаў мовы.
Некаторыя мовы праграмаваньня падтрымліваюць бязтэгавыя аб’яднаньні, якія дазваляюць разглядаць значэньне аднаго тыпу як значэньне іншага тыпу.
У артыкуле «Typeful Programming»[7] Лукі Кардэлі «моцная сыстэма тыпаў» апісваецца як сыстэма, у якой няма магчымасьці неправеранай памылкі тыпу падчас выкананьня. У іншай крыніцы адсутнасьць неправераных памылак падчас выкананьня называецца бясьпекай або бясьпекай тыпаў.
Некаторыя з вышэй прыведзеных вызначэньняў супярэчлівыя, другія разьняцца канцэптуальна, а трэція з’яўляюцца прыватнымі выпадкамі (з дадатковымі абмежаваньнямі) іншых, больш «ліберальных» (менш строгіх) вызначэньняў. Вялікае разыходжаньне паміж гэтымі вызначэньнямі дае прастору для абароны сцьвярджэньняў адносна большасьці моў праграмавання, што яны альбо моцна, альбо слаба тыпізаваныя. Напрыклад:
Дзеля паляпшэньня артыкулу неабходна:
|