![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Устал от того, что люди путают динамическую типизацию со слабой или называют лисп бестиповым.
Поэтому нарисовал вот такую картинку.

(*) Java, C# и Obj-c обладают возможностями динамической типизации. Например, боксинг в Object в Java и C#. Кроме того, в C# 4.0 ввели новое ключевое слово dynamic.
(**) В CL и Clojure присутствуют опциональные декларации типов, так что можно считать, что в них есть немного статической типизации. Современные реализации Common Lisp проводят агрессивный вывод типов при компиляции.
(***) Форт и языки ассемблера принято считать бестиповыми. Но, машинные слова разного размера это ведь тоже типы какие-никакие.
Вообще же, отличия вот в чем - статическая типизация предполагает проверку типов на этапе трансляции кода, динамическая - на этапе его выполнения. Сильная типизация предполагает множество проверок типов и минимум неявных преобразований между данными разных типов, а слабая - минимум проверок и максимум неявных преобразований.
Upd: вот еще
jtootf подкинул ссылку: blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html
Поэтому нарисовал вот такую картинку.

(*) Java, C# и Obj-c обладают возможностями динамической типизации. Например, боксинг в Object в Java и C#. Кроме того, в C# 4.0 ввели новое ключевое слово dynamic.
(**) В CL и Clojure присутствуют опциональные декларации типов, так что можно считать, что в них есть немного статической типизации. Современные реализации Common Lisp проводят агрессивный вывод типов при компиляции.
(***) Форт и языки ассемблера принято считать бестиповыми. Но, машинные слова разного размера это ведь тоже типы какие-никакие.
Вообще же, отличия вот в чем - статическая типизация предполагает проверку типов на этапе трансляции кода, динамическая - на этапе его выполнения. Сильная типизация предполагает множество проверок типов и минимум неявных преобразований между данными разных типов, а слабая - минимум проверок и максимум неявных преобразований.
Upd: вот еще
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
no subject
Date: 2011-03-25 09:48 pm (UTC)class Object
def method_missing(*args)
puts "I cannot believe this is happening to me"
end
end
no subject
Date: 2011-03-26 01:29 am (UTC)плохой пример я выбрал, пожалуй. надо было простое:
да, я в курсе, что все это переопределяется. но изначально типизация таки строгая.
no subject
Date: 2011-03-26 01:51 am (UTC)Вот именно, что тривиально переопределеяется. Таким образом, получается, что строгость языка не является свойством языка.
Все еще жду ответа лавсанчика.
no subject
Date: 2011-03-26 01:54 am (UTC)no subject
Date: 2011-03-26 12:16 pm (UTC)В том числе можно переопределить функцию, хранящуюся в символе '+'.
Но, это никак не отменяет того, что типизация - сильная. Никакого механизма неявного приведения между строками и числами в Ruby нет, в отличие от PHP и Perl, например.
no subject
Date: 2011-03-26 05:25 pm (UTC)no subject
Date: 2011-03-26 06:09 pm (UTC)