Alexander
и если быть толерантным к чужому мнению, то они не будут видеть опровержений
Alexander
пусть считает как хочет, жалко что-ли
𝙱𝚎𝚒𝚉𝚎𝚛𝚘
Я не знаю, когда программист на динамическом языке пишет код он не думает о каких-то мифических тегах, он думает о типах, он работает с типами и ему пофиг как это реализовано.
Alexander
потому, что он называет тег типом
Alexander
т.к. не знает что такое тип
A64m
не думает он о типах, он думает о тегах. что такое типы он чаще всего вообще не знает
Anonymous
На самом деле, интересный вопрос, как отделить статические проверки от степени функциональности. То что системы типов и тайпчекеры наиболее развиты в тех языках, которые считаются провославными в отношении ФП - это можно рассматривать как совпадение (помимо очевидного набора свойств благприятствующих реализации проверок)
𝙱𝚎𝚒𝚉𝚎𝚛𝚘
В статических языках вы тоже называете тег типом, мы чуть выше уже это выяснили.
Alexander
ничего страшного, но мы то тут знаем, так что давайте придерживаться академической и принятой терминологии
A64m
(последнее сраведливо и для большинства программистов)
Alexander
в чате js никто этого требовать не будет
Алексей
Ну что вы такие нетолерантные к чужому мнению
Потому что надо поддерживать терминологическую чистоту, итначе слова будут означать что угодно и потеряют смысл
Andrey
(читают, и тоже имеют свое нетолерантно воспринимаемое чужое мнение)
Alexander
ну разве если они не начнут доказывать, что статический тип и динамический это одно и тоже
Vladislav
В статических языках вы тоже называете тег типом, мы чуть выше уже это выяснили.
Потому что и кошку, и собаку можно назвать "животное". Так же как типы и рантайм-метки можно назвать "тег"
Anonymous
Предлагаю считать ФП - те языки, у которых существует простая и компактная денотация в абстрактные математические функции (лямбда исчисление)
Vladislav
тип: компайл-тайм тег для тёрма "динамический тип": рантайм тег для значения
A64m
В статических языках вы тоже называете тег типом, мы чуть выше уже это выяснили.
нет, это не мы называем тег типом, а вы в своей аналогии называете тип - тегом.
Anonymous
Чем с большим скрипом дается описание денотационной семантики - тем меньше язык ФП
Vladislav
специально в кавычках, потому что термин противоречивый
Vladislav
а поэтому проще назвать это просто тегом
саша
Это не предел мечтаний, можно и другие системы анализа придумать, но как их реализовывать толком неясно
* разновидность статического анализа до тех пор, пока не появляется какой-то ad hoc полиморфизм, будь то тайпклассы или трейты
Vladislav
ну да, тогда кодогенерация добавляется
Anonymous
*статического, лол
Алексей
ну разве если они не начнут доказывать, что статический тип и динамический это одно и тоже
Нормальные жсники (типа меня) вспомнят про TypeScript у которого тип переменной на этапе компиляции и то что в ней лежит в рантайме могут не совпадать вообще. Так что это уже не одно и тоже.
Leonid 🦇
вот у вас подгорело то. развели как детей
Alexander
не уверен, что подогрело
Alexander
Мысленный эксперимент. Возьмем компилятор хаскелля. Проапдейтим таким образом, чтобы типы игнорировались. Оставим недоопределенный код как "недопарсенный санк". Начнем выполнять те участки, которые можно выполнить. При наступлении на переменную будем допарсивать тип, доопределять словари, догенерировать код. и тайпчекать. Это возможно? Если да, то будет ли это типами?
Vladislav
у меня горит
Alexander
это "в интернете кто-то не прав"
Alexander
у Haskell есть defer-type-errorz
Vladislav
нет, это не типы уже
Vladislav
-fdefer-type-errors отключает типы
Alexander
с другой стороны он все равно все чекает при компиляции
Alexander
и вставляет error "bububu"
Alexander
где не чекнулось, с ошибкой тайпчеккера
Vladislav
типы от имплементации не зависят, но описанная система не является имплементацией типов
Антон
Секция 1.1, "Type theory versus set theory"
Кстати, какой бекграунд для этой книги нужен? А то я пытался читать - сложно
A64m
-fdefer-type-errors отключает типы
не отключает, просто генерирует код не как обычно
𝙱𝚎𝚒𝚉𝚎𝚛𝚘
И вот у слова Т И П в computer science тоже есть класс явлений, которые им называются, и те, которые им не называются. Даже если похожи. Если в рантайме — всё, не тип
В CS работая с типами мы вообще игнорируем существование и рантайма, и компайлтайма, у нас их нет, у нас есть сущность для которой верно единственное условие "Тип это то, что может в себе что-то содержать" и потом уже вводим необходимый нам перечень типов, операции над ними и т.д. CS вообще не про рантайм и компайлтайм, это когда вы CS прекладываете к чему-то, там к разработке компиляторов, к проектированию программ вот тогда у вас всё это появляется до этого этого нет, а типы всё ещё есть. Компиляции нет, а типы есть.
A64m
потому, кстати, есть такие ошибки типов, с которыми он не справится, и не сможет ничего выполняющегося нагенерить
A64m
> Тип это то, что может в себе что-то содержать вообще-то нет
A64m
тип - это то что справа от :
A64m
это множество - "может в себе что-то содержать"
Vladislav
не знаю какой бекграунд, но явно больше, чем мой я не смог читать дальше интродакшена в теорию типов, но зато из интродакшена узнал что такое пи и сигма типы
Vladislav
это было несколько лет назад, мой бекграунд был на уровне "умею на хаскеле писать" (наверное там же он и остался)
Andrey
“умею на хаскель писать” имхо дофига какой бэкграунд. не думаю, что во всем чатике более нескольких человек имеют такой
𝙱𝚎𝚒𝚉𝚎𝚛𝚘
> Тип это то, что может в себе что-то содержать вообще-то нет
Почему-то проклятые комьютерсаентисты вполне себе позволяют определять тип именно так, например, https://youtu.be/h53eFYkAN6I?t=7m31s
Vladislav
очень крутой программист строит из себя скромника
это не humblebrag, а факт, у меня очень поверхностные знания всего за пределами Haskell
Vladislav
из того же TAPL только ту же первую главу прочитал, которую скинул, а дальше распечатка так и валяется по теории категорий я понял, что такие категории и функторы, дальше уже не разобрался (всякие limits colimits не осилил) по HoTT прочитал только первую главу на Agda написал пару игрушечных программ на C++ писал в школе и из этого имею отдаленное представление о том, какова жизнь без GC и т.д.
Vladislav
то есть единственный реальный бэкграунд у меня в том, что я на Haskell пишу достаточно долго
Andrey
ну разве если они не начнут доказывать, что статический тип и динамический это одно и тоже
а почему бы не подоказывать? берем любой джаваскрипт, вешаем в синтаксис теги типизации, добавляем обработку получившегося текста препроцессором, чекающим эти теги, называем эту обработку компайл-тайм, и внезапно имеем статические типы и тайпскрипт
Alexander
js
Alexander
и теги могут по факту отличаться от типов
Alexander
Что есть рантайм?
Alexander
С точки зрения включенного компьютера - все рантайм
𝙱𝚎𝚒𝚉𝚎𝚛𝚘
Что есть рантайм?
С точки зрения работы тайпчекера он проверяет типы в своём рантайме.
A64m
поэтому для определения типов и не используются слова рантайм и компайл тайм
A64m
они используются тут для иллюстрации более-менее типичных случаев
Vladislav
С точки зрения включенного компьютера - все рантайм
рантайм статического анализатора и кодогенератора и рантайм самой программы это как бы разные вещи
Vladislav
я не знаю как их можно спутать
Vladislav
т.е. компайл-тайм это рантайм компилятора
Anonymous
Давайте уже каждый обозначит свою позицию на диаграмме и закончим на этом
Anonymous
Алексей
так там динамический "тип" и статический тип не одно и то же, как и везде
ну не везде, кстати говоря в той же Java к примеру просто невозможно нарушить типизацию
A64m
ну, рантайм кодогенератора и программы иной раз перепутать можно еще как
A64m
ну не везде, кстати говоря в той же Java к примеру просто невозможно нарушить типизацию
да, но из-за сабтайпинга разница между типами и тегами есть, все равно