Информация об изменениях

Сообщение Re[8]: Чем плох Паскаль? от 20.06.2019 14:26

Изменено 20.06.2019 14:29 netch80

Re[8]: Чем плох Паскаль?
Здравствуйте, AlexRK, Вы писали:

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

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

ARK> А, ню-ню.

ARK> foo = bar // OH SHI~

Букварь купите и изучите, вот и не будет "ню ню" или "OH SHI~":

package main

import (
    "fmt"
    "net"
)

func main() {
    type barray []byte // вот это и есть определение нового типа
    var foo net.IP
    var bar barray = []byte{1, 2, 3, 4}

    foo = bar       // ага!

    fmt.Println(foo)
}


и результат:

./prog.go:13:9: cannot use bar (type barray) as type net.IP in assignment


Не завели новый тип, воспользовались при определении переменной просто массивом — получили совместимость.
И если в первой строке main вставить '=' -скомпилируется.
Re[8]: Чем плох Паскаль?
Здравствуйте, AlexRK, Вы писали:

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

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

ARK> А, ню-ню.

ARK> foo = bar // OH SHI~

Букварь купите и изучите, вот и не будет "ню ню" или "OH SHI~":

package main

import (
    "fmt"
    "net"
)

func main() {
    type barray []byte // вот это и есть определение нового типа
    var foo net.IP
    var bar barray = []byte{1, 2, 3, 4}

    foo = bar       // ага!

    fmt.Println(foo)
}


и результат:

./prog.go:13:9: cannot use bar (type barray) as type net.IP in assignment


Не завели новый тип, воспользовались при определении переменной просто массивом — получили совместимость.
И если в первой строке main вставить '=' -скомпилируется.

ARK> Не уверен, что эти фичи являются показателем строгости типизации. ИМХО, строгая типизация — это когда нет неявных преобразований между типами разной структуры. И паскаль этому определению вполне соответствует.


Непрактично.
Лучше так: строгая типизация — это когда нет неявных преобразований, которые явно запрещены или которые могут потерять данные.

А Паскаль — не соответствует.
Например, в нём нет запрета неявной конверсии int во float, хотя она может дать потерю данных: