Telegram Group & Telegram Channel
Статическая и динамическая типизация

@covalue в дискуссии на тему "статической и динамической типизации" (типовой дурацкий вопрос собеседования программистов, самые умные ещё добавляют "сильная vs слабая типизация") предложил глянуть пару статей: "Search of types" (Kell, 2014) и "Several types of types in programming languages" (S. Martini, 2016).

Сама пара координат для типизации, "статическая и динамическая" и "сильная и слабая", мягко говоря, не совершенна. В целом она придумана вроде как для описания существующих массовых прикладных языков (т.е. заведомо не берём Haskell или Lean, нам бы с Asm - C - Algol - Java - Python разобраться). Но, как видим выше, выкрутить её можно в любую сторону.

Сам уважаемый @covalue понимает это всё хозяйство в том смысле, что существует "административная", "машинная" и "логическая" функция типов.

Мне кажется зайти удобней с другой стороны.

Вот рассмотрим три инструкции:

1. x + y
2. print(x)
3. x.name = "Vasya"

В каждой из них, с точки зрения дизайнера языка, вызывается некая "перегруженная функция" (overloaded function):

1. +(x, y), а точнее integer_plus(x, y)
2. print(x.to_string), а точнее print_string(integer_to_string(x))
3. name_set(x, "Vasya"), а точнее person_name_set(x, "Vasya")

Писать "точные" варианты мы не хотим, нам это неудобно, хотим использовать исходные лаконичные синтаксические конструкции. Но тогда проблема выбора подходящей функции, реализующей "в целом субъективно что-то такое" (почему субъективно – потому что сложение, например, строк и чисел технически между собой ничего общего не имеют), перекладывается на компилятор/интерпретатор.

Для реализации этой задачи приходят к следующим вариантам решения:

1. Наделаем функций на все сочетания операндов, типа сложения чисел и строк ("слабая динамическая типизация"), как в JS или Perl.
2. Сделаем статический анализатор, который будет гарантировать, что для сокращённой синтаксической конструкции всегда будет возможность найти необходимый полный вариант ("сильная статическая типизация").
3. Найдём полную форму для сокращённой в момент исполнения кода, если не находится кидать ошибку ("сильная динамическая типизация").

Короче, в этом вопросе речь идёт как будто не про типы вовсе, а про диспетчеризацию перегруженных функций.



group-telegram.com/metaprogramming/398
Create:
Last Update:

Статическая и динамическая типизация

@covalue в дискуссии на тему "статической и динамической типизации" (типовой дурацкий вопрос собеседования программистов, самые умные ещё добавляют "сильная vs слабая типизация") предложил глянуть пару статей: "Search of types" (Kell, 2014) и "Several types of types in programming languages" (S. Martini, 2016).

Сама пара координат для типизации, "статическая и динамическая" и "сильная и слабая", мягко говоря, не совершенна. В целом она придумана вроде как для описания существующих массовых прикладных языков (т.е. заведомо не берём Haskell или Lean, нам бы с Asm - C - Algol - Java - Python разобраться). Но, как видим выше, выкрутить её можно в любую сторону.

Сам уважаемый @covalue понимает это всё хозяйство в том смысле, что существует "административная", "машинная" и "логическая" функция типов.

Мне кажется зайти удобней с другой стороны.

Вот рассмотрим три инструкции:

1. x + y
2. print(x)
3. x.name = "Vasya"

В каждой из них, с точки зрения дизайнера языка, вызывается некая "перегруженная функция" (overloaded function):

1. +(x, y), а точнее integer_plus(x, y)
2. print(x.to_string), а точнее print_string(integer_to_string(x))
3. name_set(x, "Vasya"), а точнее person_name_set(x, "Vasya")

Писать "точные" варианты мы не хотим, нам это неудобно, хотим использовать исходные лаконичные синтаксические конструкции. Но тогда проблема выбора подходящей функции, реализующей "в целом субъективно что-то такое" (почему субъективно – потому что сложение, например, строк и чисел технически между собой ничего общего не имеют), перекладывается на компилятор/интерпретатор.

Для реализации этой задачи приходят к следующим вариантам решения:

1. Наделаем функций на все сочетания операндов, типа сложения чисел и строк ("слабая динамическая типизация"), как в JS или Perl.
2. Сделаем статический анализатор, который будет гарантировать, что для сокращённой синтаксической конструкции всегда будет возможность найти необходимый полный вариант ("сильная статическая типизация").
3. Найдём полную форму для сокращённой в момент исполнения кода, если не находится кидать ошибку ("сильная динамическая типизация").

Короче, в этом вопросе речь идёт как будто не про типы вовсе, а про диспетчеризацию перегруженных функций.

BY Metaprogramming


Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260

Share with your friend now:
group-telegram.com/metaprogramming/398

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

In 2018, Russia banned Telegram although it reversed the prohibition two years later. Just days after Russia invaded Ukraine, Durov wrote that Telegram was "increasingly becoming a source of unverified information," and he worried about the app being used to "incite ethnic hatred." Either way, Durov says that he withdrew his resignation but that he was ousted from his company anyway. Subsequently, control of the company was reportedly handed to oligarchs Alisher Usmanov and Igor Sechin, both allegedly close associates of Russian leader Vladimir Putin. However, the perpetrators of such frauds are now adopting new methods and technologies to defraud the investors.
from ms


Telegram Metaprogramming
FROM American