love5an: (Default)
[personal profile] love5an
Устал от того, что люди путают динамическую типизацию со слабой или называют лисп бестиповым.
Поэтому нарисовал вот такую картинку.
Виды типизации

(*) Java, C# и Obj-c обладают возможностями динамической типизации. Например, боксинг в Object в Java и C#. Кроме того, в C# 4.0 ввели новое ключевое слово dynamic.
(**) В CL и Clojure присутствуют опциональные декларации типов, так что можно считать, что в них есть немного статической типизации. Современные реализации Common Lisp проводят агрессивный вывод типов при компиляции.
(***) Форт и языки ассемблера принято считать бестиповыми. Но, машинные слова разного размера это ведь тоже типы какие-никакие.

Вообще же, отличия вот в чем - статическая типизация предполагает проверку типов на этапе трансляции кода, динамическая - на этапе его выполнения. Сильная типизация предполагает множество проверок типов и минимум неявных преобразований между данными разных типов, а слабая - минимум проверок и максимум неявных преобразований.

Upd: вот еще [livejournal.com profile] jtootf подкинул ссылку: blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html

Date: 2011-03-25 09:48 pm (UTC)
From: [identity profile] xentronium.mp (from livejournal.com)

class Object
def method_missing(*args)
puts "I cannot believe this is happening to me"
end
end

Date: 2011-03-26 01:29 am (UTC)
From: [identity profile] alex bubnoff (from livejournal.com)
это несколько из другой оперы. оно не меняет того, что если метода нет и он не определен этой динамикой, то кинется ошибка. конечно можно вернуть None(или что там в Ruby) как в JS или пхп, но сути это не изменит.
плохой пример я выбрал, пожалуй. надо было простое:

irb(main):001:0> 2+'2'
TypeError: String can't be coerced into Fixnum
	from (irb):1:in `+'
	from (irb):1
	from :0

да, я в курсе, что все это переопределяется. но изначально типизация таки строгая.

Date: 2011-03-26 01:51 am (UTC)
From: [identity profile] xentronium.mp (from livejournal.com)
> да, я в курсе, что все это переопределяется

Вот именно, что тривиально переопределеяется. Таким образом, получается, что строгость языка не является свойством языка.

Все еще жду ответа лавсанчика.

Date: 2011-03-26 01:54 am (UTC)
From: [identity profile] xentronium.mp (from livejournal.com)
* "строгость типизации языка", конечно.

Date: 2011-03-26 12:16 pm (UTC)
From: [identity profile] love5an.livejournal.com
В CL тоже много чего можно переопределить.
В том числе можно переопределить функцию, хранящуюся в символе '+'.

Но, это никак не отменяет того, что типизация - сильная. Никакого механизма неявного приведения между строками и числами в Ruby нет, в отличие от PHP и Perl, например.

Date: 2011-03-26 05:25 pm (UTC)
From: [identity profile] xentronium.mp (from livejournal.com)
Так строгость типизации это свойство языка или программы на языке?

Date: 2011-03-26 06:09 pm (UTC)
From: [identity profile] love5an.livejournal.com
языка

Profile

love5an: (Default)
Dmitry Ignatiev

June 2020

S M T W T F S
 123456
78910 111213
14151617181920
21222324252627
282930    

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 1st, 2025 08:44 am
Powered by Dreamwidth Studios