Сообщение Re[8]: Чем плох Паскаль? от 20.06.2019 14:26
Изменено 20.06.2019 14:39 netch80
Re[8]: Чем плох Паскаль?
Здравствуйте, AlexRK, Вы писали:
N>>А теперь сюрприииз — в том самом Go, в котором вы увидели только duck typing, то же самое:
N>>с тем же результатом — buka идентичен foo (алиас для него), real = float во всём использовании, а вот ziuka, altitude и temperature отделены.
ARK> А, ню-ню.
ARK> foo = bar // OH SHI~
Букварь купите и изучите, вот и не будет "ню ню" или "OH SHI~":
и результат:
Не завели новый тип, воспользовались при определении переменной просто массивом — получили совместимость.
И если в первой строке main вставить '=' -скомпилируется.
ARK> Не уверен, что эти фичи являются показателем строгости типизации. ИМХО, строгая типизация — это когда нет неявных преобразований между типами разной структуры. И паскаль этому определению вполне соответствует.
Непрактично.
Лучше так: строгая типизация — это когда нет неявных преобразований, которые явно запрещены, могут потерять данные или принципиально изменить семантику операций со значениями.
А Паскаль — не соответствует.
Например, в нём нет запрета неявной конверсии int во float (по Borland; real — по Вирту), хотя она может дать потерю данных.
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 (по Borland; real — по Вирту), хотя она может дать потерю данных.
Re[8]: Чем плох Паскаль?
Здравствуйте, AlexRK, Вы писали:
N>>А теперь сюрприииз — в том самом Go, в котором вы увидели только duck typing, то же самое:
N>>с тем же результатом — buka идентичен foo (алиас для него), real = float во всём использовании, а вот ziuka, altitude и temperature отделены.
ARK> А, ню-ню.
ARK> foo = bar // OH SHI~
Читайте внимательнее, вот и не будет "ню ню" или "OH SHI~":
и результат:
Не завели новый тип, воспользовались при определении переменной просто массивом — получили совместимость.
И если в первой строке main вставить '=' -скомпилируется.
ARK> Не уверен, что эти фичи являются показателем строгости типизации. ИМХО, строгая типизация — это когда нет неявных преобразований между типами разной структуры. И паскаль этому определению вполне соответствует.
Непрактично.
Лучше так: строгая типизация — это когда нет неявных преобразований, которые явно запрещены, могут потерять данные или принципиально изменить семантику операций со значениями.
А Паскаль — не соответствует.
Например, в нём нет запрета неявной конверсии int во float (по Borland; real — по Вирту), хотя она может дать потерю данных.
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 (по Borland; real — по Вирту), хотя она может дать потерю данных.