| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Философия программирования > 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 | ||
Спасибо за разъяснения. |
| Автор: LSD 4.11.2006, 12:49 |
| Статическая типизация, это проверка типов во время компиляции программы. Динамическая - во время исполнения. Пример статической: объявляем переменную типа int и мы можем быть уверены, что в ней будут храниться только целые числа, в некотором диапазоне (от -2^31 до +2^31-1). О том чтобы в нее не попали строка, или дробное число или еще какое нибудь другое значение, позаботится компилятор. Пример динамической типизации: в Perl объявляем скалярную переменную, записываем туда число 5, и пытаемся эту переменную умножить на другое число. Интерпретатор проверяет, что переменная действительно хранит в себе число во время выполнения программы. Большинство современных языков используют оба типа типизации. |
| Автор: skyboy 4.11.2006, 13:03 |
и не только "современные". если мне не изменяет память, в BASIC(реализация для ПК "Микроша") можно было объявить переменную целого типа(именно "объявить"), а позже записать в него число - я так понимаю, ты об этом говоришь про "оба типа" ;) Правда, там никакой "проверки во время компиляции" быть не могло, т.к. не было самой компиляции... |