2014 dxdy logo

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

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




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

 
 
 
 Re: Типизация языков программирования
Сообщение08.08.2022, 22:08 
В 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 
tolstopuz в сообщении #1562176 писал(а):
А как вы себе представляете динамическую явную типизацию? Приведите пример на воображаемом языке.

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

 
 
 
 Re: Типизация языков программирования
Сообщение12.08.2022, 09:53 
Solaris86 в сообщении #1562525 писал(а):
Ну, допустим, так
Это не динамическая типизация, а инициализация при объявлении переменной, в ныне использующихся языках она имеется практически повсеместно.

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

 
 
 [ Сообщений: 5 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group