Re[6]: Чем плох Паскаль?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 20.06.19 06:16
Оценка: +1
Здравствуйте, Mr.Delphist, Вы писали:

C>>И где тут строгость? Просто идиотское ограничение — оба массива идентичны.

MD>Похоже, насчёт строгой типизации нам говорить ещё рано

Верно замечено — вам, похоже, таки рано.

Там, где не рано, делают, например, так (близко к Ada)


type real = float;

type temperature = new float;

type altitude = new float;

type foo = struct {
  bar: integer;
  baz: float;
};

type buka = foo;

type ziuka = new foo;


и с этого момента buka — просто алиас для foo, а ziuka — намеренно отдельный тип, все имплицитные соответствия, конверсии и присвоения запрещены, то же для температуры (ей высоту просто так не присвоишь, матчинг функции не будет происходить, и так далее).

А теперь сюрприииз — в том самом Go, в котором вы увидели только duck typing, то же самое:

type real = float
type altitude float
type temperature float

type foo struct {
  bar int
  baz float
}

type buka = foo
type ziuka foo


с тем же результатом — buka идентичен foo (алиас для него), real = float во всём использовании, а вот ziuka, altitude и temperature отделены.

А изображать "строгую типизацию" разделением типов просто из-за идентичного объявления массива в двух местах... ну да, Вирту в Модуле такое приснилось. Только повторять это на трезвую голову никто не хочет.

MD> Синтаксис JS строже чем у Pascal... Разрешите тогда упомянуть классику: https://www.destroyallsoftware.com/talks/wat


Я не защищаю тут позицию Cyberaxʼа, но вы синтаксис от семантики не отличаете.

С синтаксисом у JS, таки, есть проблемы, но в другом, например:

  return
    1;


он вернёт null.
В ролике про WAT про это ни слова, там другие хохмы (да, реальные и грустные).

Кстати, ещё один из ваших мифов про Go:

MD> Go — основан на duck-typing (ещё бы, наследования-то не завезли)


Завезли:

A field declared with a type but no explicit field name is called an embedded field. An embedded field must be specified as a type name T or as a pointer to a non-interface type name *T, and T itself may not be a pointer type.

A field or method f of an embedded field in a struct x is called promoted if x.f is a legal selector that denotes that field or method f.

Given a struct type S and a defined type T, promoted methods are included in the method set of the struct as follows:

If S contains an embedded field T, the method sets of S and *S both include promoted methods with receiver T. The method set of *S also includes promoted methods with receiver *T.
If S contains an embedded field *T, the method sets of S and *S both include promoted methods with receiver T or *T.


И это наследование ещё и множественное. Вот виртуальных функций в нём, да, нет и не предвидится, поэтому по сравнению с традиционным наследованием типа C++/Java/etc. оно инвалидное.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.