2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Типизация языков программирования
Сообщение08.08.2022, 14:24 


28/01/15
670
Здравствуйте! Изучаю классификацию языков программирования по типизации. В связи с этим вопрос такой: существуют ли языки программирования, которые бы имели:
1) статическую слабую (нестрогую) неявную типизацию,
2) динамическую сильную (строгую) явную типизацию,
3) динамическую слабую (нестрогую) явную типизацию?
Спрашиваю, потому что пересмотрел много сайтов, но не нашёл языков программирования по таким критериям.
Понимаю, что можно обобщить и сказать, что статические языки имеют в основном явную типизацию (кроме Boo, Go, Haskell, Scala), а динамические неявную, но всё же хотелось бы более точно узнать.

 Профиль  
                  
 
 Re: Типизация языков программирования
Сообщение08.08.2022, 22:08 
Заслуженный участник


31/12/05
1520
В C++ уже есть возможность неявной типизации - auto и decltype (и динамической - std::variant).

И в C# есть слово var.

А как вы себе представляете динамическую явную типизацию? Приведите пример на воображаемом языке.

-- Пн авг 08, 2022 22:57:39 --

На http://wiki.c2.com/?TypingQuadrant принята такая классификация:

Static manifest typing (C, Pascal, ActiveOberon, C++, Ada, Java, C#...).
Static inference typing (Haskell, Standard ML, ObjectiveCaml, Clean...).
Dynamic typing (Lisp, Smalltalk, Python, Ruby, PHP...).
И экзотическая категория Soft typing (DrScheme, E).

То есть dynamic manifest typing, по их мнению, вообще не существует, что я считаю логичным.

И все это ортогонально сильной/слабой типизации, причем они выделяют случай Strong typing without loopholes, как в C# без unsafe или в Java без native.

Про static weak inference typing они где-то писали, что в этой категории трудно найти язык, и, кажется, приводили в пример BCPL, но, насколько я понимаю, по тривиальной причине - там все переменные были одного типа.

C++, несмотря на auto, видимо, им не подошел, потому что эта вики довольно старая. Или потому, что слабая (reinterpret_cast) и неявная (auto) типизации в C++ лежат в совершенно разных пластах языка.

 Профиль  
                  
 
 Re: Типизация языков программирования
Сообщение12.08.2022, 09:09 


28/01/15
670
tolstopuz в сообщении #1562176 писал(а):
А как вы себе представляете динамическую явную типизацию? Приведите пример на воображаемом языке.

Ну, допустим, так:
int a = 8
str a = '1'

 Профиль  
                  
 
 Re: Типизация языков программирования
Сообщение12.08.2022, 09:53 
Заслуженный участник


09/05/12
25179
Solaris86 в сообщении #1562525 писал(а):
Ну, допустим, так
Это не динамическая типизация, а инициализация при объявлении переменной, в ныне использующихся языках она имеется практически повсеместно.

 Профиль  
                  
 
 Re: Типизация языков программирования
Сообщение13.08.2022, 22:52 


13/08/22
2
Надо отметить, что «слабая» и «сильная» типизация это скорее не термины, их стоит избегать. Статическая и динамическая типизация притом не совсем антонимы друг друга: у языка может быть как приписывание типов выражениям в коде во время компиляции, так и проверки соответствия типов, вписываемые компилятором в результирующий код и выполняемые потом, для чего некоторые значения несут с собой какую-то информацию о типах (потому что её надо откуда-то брать в проверках) — более того это совершенно обычная ситуация во многих мейнстримных языках. И это как раз статический и динамический аспекты.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group