Бойко! «Слабо типизированным я называю язык, в котором, грубо говоря, типы данных имеют небольшую роль.»
Теперь мы поняли друг друга! Статья на Хабре описывает, как мне показалось, общепринятую терминологию по разновидностям типизации, в ней weak/strong typing переведены как слабая и сильная типизации, в скобках указаны синонимы «нестрогая» и «строгая». Поэтому я сначала недопонял Вашу мысль. «Например, их мало и нельзя определять новые.» Да, есть такое. Типы символов, как правило, фиксированы реализацией, и их немного. Как правило, типы в Рефале формулируются на уровне соглашений: структура объектных выражений описывается при помощи грамматики вроде БНФ или РБНФ, эта грамматика записывается в комментариях к программе. Я когда-то разрабатывал мёртворождённый диалект Модульный Рефал, в нём у меня была ограниченная возможность определять новые типы. Метка типа описывалась при помощи ключевого слова $DATA, термы данного типа записывались в квадратных скобках, после открывающей скобки записывалась метка. Доступ к содержимому термов был доступен только из того модуля, где этот тип был описан — в других модулях такой терм можно было сопоставить только с t-переменной. $MODULE SymTable; $DATA Table; /** <New> == t.SymTable */ $ENTRY New { = [Table] } /** <Lookup t.SymTable e.Name> == Found e.Value == NotFound */ $ENTRY Lookup { [Table e.Table-B (e.Name (e.Value)) e.Table-E] e.Name = Found e.Value; [Table e.Table] e.Name = NotFound; } … $END SymTable; Я даже подумывал на основе этих «абстрактных типов данных» сделать ограниченное ООП с виртуальными функциями. «Кстати, оно и неоднозначно, динамический Рефал или нет. Например, если считать типами s., t. и e., то Рефал окажется статически типизированным: тип каждой переменной определён в тексте программы, т.е. статически.» Интересное соображение. Я, когда говорю о типизации Рефала, имею ввиду те типы, которые подразумевает программист, когда пишет в комментариях грамматику объектных выражений и формат функции. И на этом уровне Рефал динамически типизирован. С уважением, Александр Коновалов -----Original Message----- From: Boyko Bantchev boykobb_AT_gmail.com <refal@botik.ru> Sent: Monday, December 2, 2019 1:13 AM To: refal@botik.ru Subject: Re: Нужна ли "Ленинская простота" в Рефале? > Распространённая терминологическая ошибка ........ Александр, Представьте себе, мне хорошо известна разница между понятиями статическая/динамическая и строгая/нестрогая в отношении типизации в языках программирования. Однако я говорю не о нестрогой типизации, а о слабой. Слабо типизированным я называю язык, в котором, грубо говоря, типы данных имеют небольшую роль. Например, их мало и нельзя определять новые. Такой язык не обязательно нестрого типизированный. > Ликбез по типизациям: https://habr.com/ru/post/161205/ Спасибо за заботу. Адекватных источников, например книжек, хватит, я их читал и по мере сил стараюсь продолжать. > А с тем, что Рефал — динамически типизированный, я не спорю. Я и не утверждал то, с чем вы не спорите. Кстати, оно и неоднозначно, динамический Рефал или нет. Например, если считать типами s., t. и e., то Рефал окажется статически типизированным: тип каждой переменной определён в тексте программы, т.е. статически.