naive typing ©
Sep. 14th, 2009 06:42 pmтем временем я все более и более прихожу к выводу что наличие массивов в языке как встроенных типов, а не библиотеки, есть жуткая ересь
тем временем я все более и более прихожу к выводу что наличие массивов в языке как встроенных типов, а не библиотеки, есть жуткая ересь
no subject
Date: 2009-09-14 03:54 pm (UTC)no subject
Date: 2009-09-14 07:48 pm (UTC)Если язык не позволяет создать эффективный и удобный массив как библиотеку, значит он не позволит создать свою структуру данных, эффективную и удобную.
Впрочем, я не до конца согласен с автором поста. 90% объектов-контейнеров использующихся в коде - это одномерный список, который хочется фильтровать, итерироваться, склеивать, надеятся на помощь оптимизатора, использовать сжатый удобный синтаксис для всего этого.
no subject
Date: 2009-09-14 08:39 pm (UTC)no subject
Date: 2009-09-14 08:48 pm (UTC)no subject
Date: 2009-09-14 09:15 pm (UTC)Всё-равно не вижу противоречия. Как изменится реализация от множеств-очереди-etc в зависимости от наличия/отсутствия встроенного типа "массив" (кстати, если будет встроенный список -- тоже нормально)?
Понятно, что наличие такого встроенного типа несколько усложняет транслятор. Но есть мнение что профит от краткого синтаксиса оказажется более весомым, нежели это усложнение.
(with-troll-mode (:fat t)
Хотя в правильных языках мы всегда можем добавить нужную нам языковую конструкцию средствами самого языка... )
no subject
Date: 2009-09-15 07:10 am (UTC)no subject
Date: 2009-09-15 10:15 am (UTC)no subject
Date: 2009-09-15 02:11 pm (UTC)no subject
Date: 2009-09-15 06:20 pm (UTC)no subject
Date: 2009-09-15 07:58 pm (UTC)no subject
Date: 2009-09-16 04:18 am (UTC)no subject
Date: 2009-09-16 06:24 am (UTC)Просто смущает, когда у иерархии типов несколько вершин.
Патологический случай - Java, например :) (все value-типы - не обьекты)
В C# вот массивы - это "отдельный" тип данных (там есть concrete types, generic types и arrays)
В питоне списки отдельный тип, но при этом они не претендуют на особое место в системе типов, а вот old-style классы - претендуют.
no subject
Date: 2009-09-14 09:45 pm (UTC)no subject
Date: 2009-09-14 11:09 pm (UTC)Как простейший вариант подобной системы, можно сделать язык, позволяющий использовать в качестве систем типов произвольные Pure Type Systems. Это колоссальная свобода - можно в каждом модуле декларировать, какую именно PTS он использует. Где-то можно ограничиться импредикативным полиморфным ЛИ (System F):
S * #
A * #
R (* *) (# *)
А где-то понадобится calculus of constructions с зависимыми типами:
S * #
A * #
R (* *) (# *) (* #) (# #)
А где то вообще простым типизированным ЛИ даже без констант типов:
S *
A 0 *
R (* *)
Т.е. на основе обобщенных систем типов (PTS я привел как пример системы, в которой выражается множество разных систем типов) можно сделать весьма универсальный (и простой!) тайпчекер, покроющий огромное количество известных систем типов.
Ну, или можно пойти дальше и вообще произвольные статические валидации разрешить писать в языке, а также определять для языка произвольную семантику. Compiler compilers так и делают, прецедентов много.
no subject
Date: 2009-09-15 07:11 am (UTC)Да, еще a must чтобы типы были first-class citizens, вот. Иначе скучно и никакой meta-extensibility
no subject
Date: 2009-09-15 02:09 pm (UTC)отнюдь. В сложных универсальных системах типов пропадают важные свойства - например, principal typing.
> Иначе скучно и никакой meta-extensibility
Meta-extensibility можно достичь и без мудрёной системы типов, путем quoting в стиле лиспа.
Поэтому в принципе для разных задач оптимальны разные системы типов и разные средства метапрограммирования.
no subject
Date: 2009-09-14 11:37 pm (UTC)Если не делать низкоуровневых фич в языке, то массивы - один из важных (для достижения производительности) встроенных строительных блоков.
no subject
Date: 2009-09-15 07:09 am (UTC)no subject
Date: 2009-09-15 01:39 pm (UTC)