Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Философия программирования > static/dynamic typing и strong/weak typing


Автор: nerezus 4.11.2006, 12:13
В чем разница между static/dynamic typing и strong/weak typing?

1) Объявление типа данных
2)Смена типа в процессе работы программы? (a = 5; a = "hello")
3) Автоматическое приведение типа? (a = 5; b = "10"; c = a + b;)

Т.е. что из пунктов относится к static/dynamic typing и что относится к strong/weak typing?

Автор: skyboy 4.11.2006, 12:29
static/dynamic типизация - это возможность объявить явно или типизирование в момент присвоения. Статическая типизация: объявил единожды, как целое число - будь добр, работай аки с целым. 
Динамическая типизация: присвоил a= "sssss"; компилятор/интерпретатор сам выделит память под массив знаков, сам создаст переменную типа string. 
А слабая/сильная типизация определяется приведением типов(в любом случае - это будет "ослаблением" типизации, даже если приводится целое число к вещественному типу - с точки зрения человека точность повышается, а с точки зрения машины число может измениться; вобщем, слабая типизация) и тем, как проверяются/не проверяются параметры функций: если вместо массива(ожидаемого) можно передать целое число и никак нельзя это дело проконтролировать "автоматически" - это слабая типизация.
зы Не встречалось мне ещё сочетание динамической и сильной типизации - если уж присвоение без "ошибки типа", то и в функцию, как в мусорный бак, можно что угодно скидывать.

Автор: nerezus 4.11.2006, 12:43
Цитата

зы Не встречалось мне ещё сочетание динамической и сильной типизации 
 Python(нет приведения типов, ну кроме чисел в числа.)

Спасибо за разъяснения.

Автор: LSD 4.11.2006, 12:49
Статическая типизация, это проверка типов во время компиляции программы. Динамическая - во время исполнения. 
Пример статической: объявляем переменную типа int и мы можем быть уверены, что в ней будут храниться только целые числа, в некотором диапазоне (от -2^31 до +2^31-1). О том чтобы в нее не попали строка, или дробное число или еще какое нибудь другое значение, позаботится компилятор.
Пример динамической типизации: в Perl объявляем скалярную переменную, записываем туда число 5, и пытаемся эту переменную умножить на другое число. Интерпретатор проверяет, что переменная действительно хранит в себе число во время выполнения программы.
Большинство современных языков используют оба типа типизации.

Автор: skyboy 4.11.2006, 13:03
Цитата(LSD @  4.11.2006,  11:49 Найти цитируемый пост)
Большинство современных языков используют оба типа типизации. 

и не только "современные". если мне не изменяет память, в BASIC(реализация для ПК "Микроша") можно было объявить переменную целого типа(именно "объявить"), а позже записать в него число - я так понимаю, ты об этом говоришь про "оба типа" ;)
Правда, там никакой "проверки во время компиляции" быть не могло, т.к. не было самой компиляции... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)