Entry tags:
naive typing ©
тем временем я все более и более прихожу к выводу что наличие массивов в языке как встроенных типов, а не библиотеки, есть жуткая ересь
тем временем я все более и более прихожу к выводу что наличие массивов в языке как встроенных типов, а не библиотеки, есть жуткая ересь
no subject
no subject
Если язык не позволяет создать эффективный и удобный массив как библиотеку, значит он не позволит создать свою структуру данных, эффективную и удобную.
Впрочем, я не до конца согласен с автором поста. 90% объектов-контейнеров использующихся в коде - это одномерный список, который хочется фильтровать, итерироваться, склеивать, надеятся на помощь оптимизатора, использовать сжатый удобный синтаксис для всего этого.
no subject
no subject
no subject
Всё-равно не вижу противоречия. Как изменится реализация от множеств-очереди-etc в зависимости от наличия/отсутствия встроенного типа "массив" (кстати, если будет встроенный список -- тоже нормально)?
Понятно, что наличие такого встроенного типа несколько усложняет транслятор. Но есть мнение что профит от краткого синтаксиса оказажется более весомым, нежели это усложнение.
(with-troll-mode (:fat t)
Хотя в правильных языках мы всегда можем добавить нужную нам языковую конструкцию средствами самого языка... )
no subject
no subject
no subject
no subject
no subject
no subject
no subject
Просто смущает, когда у иерархии типов несколько вершин.
Патологический случай - Java, например :) (все value-типы - не обьекты)
В C# вот массивы - это "отдельный" тип данных (там есть concrete types, generic types и arrays)
В питоне списки отдельный тип, но при этом они не претендуют на особое место в системе типов, а вот old-style классы - претендуют.
no subject
no subject
Как простейший вариант подобной системы, можно сделать язык, позволяющий использовать в качестве систем типов произвольные Pure Type Systems. Это колоссальная свобода - можно в каждом модуле декларировать, какую именно PTS он использует. Где-то можно ограничиться импредикативным полиморфным ЛИ (System F):
S * #
A * #
R (* *) (# *)
А где-то понадобится calculus of constructions с зависимыми типами:
S * #
A * #
R (* *) (# *) (* #) (# #)
А где то вообще простым типизированным ЛИ даже без констант типов:
S *
A 0 *
R (* *)
Т.е. на основе обобщенных систем типов (PTS я привел как пример системы, в которой выражается множество разных систем типов) можно сделать весьма универсальный (и простой!) тайпчекер, покроющий огромное количество известных систем типов.
Ну, или можно пойти дальше и вообще произвольные статические валидации разрешить писать в языке, а также определять для языка произвольную семантику. Compiler compilers так и делают, прецедентов много.
no subject
Да, еще a must чтобы типы были first-class citizens, вот. Иначе скучно и никакой meta-extensibility
no subject
отнюдь. В сложных универсальных системах типов пропадают важные свойства - например, principal typing.
> Иначе скучно и никакой meta-extensibility
Meta-extensibility можно достичь и без мудрёной системы типов, путем quoting в стиле лиспа.
Поэтому в принципе для разных задач оптимальны разные системы типов и разные средства метапрограммирования.
no subject
Если не делать низкоуровневых фич в языке, то массивы - один из важных (для достижения производительности) встроенных строительных блоков.
no subject
no subject