LINUX.ORG.RU
ФорумTalks

Уточнение понятия «мощная система типов»

 


0

2

В настоящий момент, на мой взгляд, бытует неверная трактовка. Следует различать мощную систему типов и мощную систему вывода и проверки типов. То что под этим подразумевают обычно, означает именно второе, что в корне неверно. Причем, тут существует зависимость: чем примитивнее система типов, тем больше возможностей у тайпчекера. Мощность системы типов означает строго обратное: в силу мощности системы, статический анализ типов невозможен. В частности, это означает возможности манипуляции первоклассными типами и рефлексии. Такими свойствами обладают системы-последователи Smalltalk, в первую очередь. Употребление термина «мощная система типов» в отношении статически-типизированных языков является не более чем маркетинговым ходом, это полностью искажает настоящий смысл.

Перемещено tailgunner из development



Последнее исправление: filequest (всего исправлений: 1)

Ок. Примем к сведению. Спасибо.

anonymous
()

Иди работай, всем пофиг.

Virtuos86 ★★★★★
()

Мощная система вывода и проверки типов нужнее и жизнеспособнее, чем мощная система типов. Оглянись вокруг, на твоем любимом js только говносайты для домохозяек. Люди уже давно в космос летают и искусственные органы имплантируют. И никакого js там нет.

anonymous
()

Каша в голове. Рекомендую полистать TaPL на досуге.

ymn ★★★★★
()

«Мощная система типов» без статической проверки нафиг не нужна и даже опасна.

tailgunner ★★★★★
()

Ну, ограничьтесь двумя типами, числом и строкой. Что вы тут мощного наворотите? Ничего. Так что, ИМХО, вторая трактовка справедлива.

tiinn ★★★★★
()

Мощность системы типов означает строго обратное: в силу мощности системы, статический анализ типов невозможен.

Какая-то хилая у тебя система типов. Язабан.

znenyegvkby
()

Перемещено tailgunner из development

Лучше бы сразу в recycle bin

goingUp ★★★★★
()

Употребление термина «мощная система типов» в отношении статически-типизированных языков является не более чем маркетинговым ходом, это полностью искажает настоящий смысл.

Детектор анонiмус-а загорелся красной лампочкой.

Manhunt ★★★★★
()
Ответ на: комментарий от anonymous

Оглянись вокруг, на твоем любимом js только говносайты для домохозяек. Люди уже давно в космос летают и искусственные органы имплантируют. И никакого js там нет.

Скоро будет. Этот жс и питон пхают уже в микроконтроллеры. В эмбед пришли быдлокодеры со смузи.

ramon13666 ★★★
()

Мощность системы типов
Такими свойствами обладают системы-последователи Smalltalk

Поэтому ты не можешь ничего написать? Система типов мощнее тебя?

winlook38 ★★
()
Ответ на: комментарий от winlook38

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

filequest
() автор топика
Ответ на: комментарий от filequest

Предлагаю всем задать тот же вопрос анонiмусу, пусть отдохнет от ЛОРа.

winlook38 ★★
()

Забей, всё равно уже есть ghcjs, который позволяет выкинуть этот твой JS и писать на кошерном Haskell.

В частности, это означает возможности манипуляции первоклассными типами и рефлексии.

Кстати, это присутствует в языках с зависимыми типами. Idris, например.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)

Нет такого понятия как «мощность системы типов», она тебе не двигатель и даже не формальный язык.

Но, например, в хашкеле я могу сказать, что это не просто число, а литры. И система типов не позволит сложить литры с килограммами.

А в js и io - запросто.

holuiitipun
()
Ответ на: комментарий от holuiitipun

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

filequest
() автор топика
Ответ на: комментарий от holuiitipun

ты имеешь в виду, что операция сложения может быть не только у чисел? Ну так это же обычный полиморфизм, в любом ООП-языке можно это сделать, что тут особенного?

filequest
() автор топика
Ответ на: комментарий от filequest

Нет, я хочу сказать что я могу сделать (пример на псевдоязыке):

type KG > Number
type Inch > Number
type Human = :mass KG, :height Inch

let you = Human 120, 150
you.mass + you.mass -> 240
you.mass + you.height -> error

Это можно навелосипедить с наследованием и перегрузкой операторов. В js и io еще и рефлешеном пользуюясь. Но это уже будет не через систему типов.

holuiitipun
()
Ответ на: комментарий от holuiitipun

тогда пример твой должен выглядеть не так как ты написал, а что то типа

battle1 +(battle2) inLiters //1
box1 +(box2) inKillograms // 10
battle +(box) inLiters // error, type of argument must be subtype of liquid
Все равно будет ошибка

filequest
() автор топика
Ответ на: комментарий от holuiitipun

Да нет, я тебя прекрасно понял. То что ты описал, реализовать как 2 пальца

dd := method(x, if(x isKindOf(self), self value + x value, Exception raise("wrong thing has occured")))
Weight := Object clone
Height := Object clone
Human := Object clone

Jack := Human clone do(
   height := Height clone do(value := 80)
   weight := Weight clone do(value := 90)
)

Jack do(
 weight add(weight) println
 weight add(height) println
)


180

  Exception: wrong thing has occured
  ---------
  Exception raise                      tst 23
  Weight add                           tst 35
  CLI doFile                           Z_CLI.io 140
  CLI run                              IoState_runCLI() 1

Как раз и разница вся в том, что твою фигню я могу всегда написать, а вот ты не сможешь, например, ту же рефлексию типов.

filequest
() автор топика
Ответ на: комментарий от filequest

isKindOf(self)

Это уже не система типов, а рефлексия.

Как раз и разница вся в том, что твою фигню я могу всегда написать, а вот ты не сможешь, например, ту же рефлексию типов.

Все можно всегда написать, но что-то я никогда не видел тикета «сделать рефлексию типов». А для решения задач реального мира в разных яп есть разные инструменты.

holuiitipun
()

Употребление термина «мощная система типов» в отношении статически-типизированных языков является не более чем маркетинговым ходом, это полностью искажает настоящий смысл.

Что это за термин такой «мощная система типов»(C)?

Я знаю, что такое «сильная типизация».

Преимущества сильной типизации

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

(C)

А кульхацкеры-«титеретики», нахватавшиеся верхушек про «типизации», но не утруждавших себя реальным трудом программирования - это просто желанные гости на любом собеседовании - пруф -

Попросил его написать метод, разворачивающий строку, классическая такая проверка на вшивость. Мелкое тощее горбатое существо с рожей и голосом профессионального алкаша бубнило и булькало чтото с полчаса, ничего родить не смогло, потом начало втирать, что вот зато в мегаязыке Хаскель строки сделаны односвязными списками и что это типа тру, а все остальное ламеризм.

(C) [ЖЖ] Луговский

Bioreactor ★★★★★
()
Последнее исправление: Bioreactor (всего исправлений: 3)
Ответ на: комментарий от Bioreactor

Я знаю, что такое «сильная типизация».

нет не знаешь. Например, пистон сильнотипизирован, но не сгенерирует ошибку в компилтайм.

filequest
() автор топика
Ответ на: комментарий от filequest

нет не знаешь.

Например, пистон сильнотипизирован, но не сгенерирует ошибку в компилтайм.

Педон - это скриптовый недоязычок с ДИНАМИЧЕСКОЙ типизацией.

А Java == СИЛЬНАЯ + СТАТИЧЕСКАЯ типизация.

А точнее:

1. статическая

2. сильная

3. явная

4. именованная

Поэтому и подходит в отличие от поделия для хелловордистов для создания «приложений уровня предприятия»(TM).

Если бы филекуест-кун внимательно прочитал бы по моей ссылке, то он узнал бы

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

Скорость выполнения. Из предыдущего пункта ясно, что статически типизированные языки практически всегда быстрее динамически типизированных.

При некоторых дополнительных условиях, позволяет обнаруживать потенциальные ошибки уже на этапе компиляции.

Ускорение разработки при поддержке IDE (отсеивание вариантов, заведомо не подходящих по типу).

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

Ибо, альтернативно одарённые в серьезных компаниях «НЕНУЖНЫ»(С) - пруф -

Диктатора выставили на мороз

Bioreactor ★★★★★
()
Последнее исправление: Bioreactor (всего исправлений: 1)
Ответ на: комментарий от filequest

Внимательно читаем ликбез по ссылке про преимущества различных видов типизации -

https://habrahabr.ru/post/161205/

Сначала читаем - потом даем свои сверхценные комментарии.

Дополнительно про nominal (nominative, name-based, именованную) и manifest (явную) систему типов читаем в любой книге для подготовки к сертификационным экзаменам по Java.

Умничать будем на собеседовании.

Bioreactor ★★★★★
()
Последнее исправление: Bioreactor (всего исправлений: 1)

Достаточно/недостаточно примитивная для понимания анонимусом.

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Я еще забыл добавить про Java

5. safe

Недоязычки программирования с duck системой типов использовать в банковских и финансовых приложениях нельзя.

Т.н. gradual система типов - это не панацея от того, чтобы «выстрелить себе в ногу»(C)(R). Для «дропбоксов» Пистон >=3.5 сойдет, а для приложений где крутятся реальные денежки - ну, типа шутка юмора в стиле петросян-группы «Монти Пайтон».

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

Я еще забыл добавить

Сказанного уже хватит.

Т.н. gradual система типов - это не панацея от того, чтобы «выстрелить себе в ногу»(C)(R). Для «дропбоксов» Пистон >=3.5 сойдет, а для приложений где крутятся реальные денежки - ну, типа шутка юмора

«Умничать будем на собеседовании» (ц)

tailgunner ★★★★★
()
Ответ на: комментарий от Bioreactor

Type inference in Java has become a popular idea due to widespread usage of weakly typed languages like Javascript

Суть жабакодера, рассуждающего о системах типов.

tailgunner ★★★★★
()
Ответ на: комментарий от Bioreactor

Недоязычки программирования с duck системой типов

ты теперь, по-ходу, утиную со слабой попутал, ты же о ней распинался, вроде. Не сильно босс трахает таких шерифов как ты? Вазелин не нужен?

filequest
() автор топика
Ответ на: комментарий от Bioreactor

И в чем этот чел неправ?

Без понятия - я не знаю, чего он пытался достичь. Но я вижу, что в кучу свалены слабая типизация, вывод типов и JavaScript, поверх этой кучи лежат специально подобранные примеры, а на вершине стоит жабакодер и апокалиптичным тоном требует от Оракела ничего не менять.

Хочется динамических скриптов - есть Scala

facepalm.mkv.rar

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

а на вершине стоит жабакодер и апокалиптичным тоном требует от Оркула ничего не менять

Так надо менять или нет?


Вы пишете на Scala?

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

а на вершине стоит жабакодер и апокалиптичным тоном требует от Оркула ничего не менять

Так надо менять или нет?

Не знаю и мне безразлично. Но картинка забавная.

Хочется динамических скриптов - есть Scala

Вы пишете на Scala?

Я на ней читаю.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Script it!

Я на ней читаю.

А документацию Вы читаете?

Script it!
We may also run our example as a shell script or batch command (see the examples in the man pages of the scala command).

The bash shell script script.sh containing the following Scala code (and shell preamble)

#!/bin/sh
exec scala "$0" "$@"
!#
object HelloWorld extends App {
  println("Hello, world!")
}
HelloWorld.main(args)

Так кому же facepalm.mkv.rar???

Bioreactor ★★★★★
()
Ответ на: Script it! от Bioreactor

Так кому же facepalm.mkv.rar???

Персонажам, которые пафосно рассуждают о типизации и при этом валят в одну кучу «динамические скрипты», Groovy, JSR 241 и Scala.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Ну и еще вопросик.

В scala нет val?

Что будет при раздельной компиляции

object Test extends App {
  val a = 1
  val b = "41"
  val c = a + b
  // String c = a + b 
  println(c)
}
object Test extends App {
  val a = 1
  val b = "41"
  // val c = a + b
  String c = a + b 
  println(c)
}
$ scala -version
Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL

Нужен ли «синтаксический сахар»?

Bioreactor ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.