начал изучать F# сегодня после обеда. похоже, что к концу дня уже и закончил. никакой дополнительной гибкости по сравнению с C# не наблюдается. взять tuples. ок, я могу сматчить первый элемент как (x, _), аналогично head в списке. а как мне сматчить остаток (e.g. tail)? или как итерировать по тупелу заранее неизвестного типа? или как динамически создать тупел, имея, скажем, список типов элементов? а ведь без перечисленного мной ничего осмысленно реляционного не написать. вот у них ничего не пошевелилось в душе, когда они хуярили эти конструкторы?
Tuple(T1)
Tuple(T1, T2)
Tuple(T1, T2, T3)
Tuple(T1, T2, T3, T4)
Tuple(T1, T2, T3, T4, T5)
Tuple(T1, T2, T3, T4, T5, T6)
Tuple(T1, T2, T3, T4, T5, T6, T7)
Tuple(T1, T2, T3, T4, T5, T6, T7, T8)
bonus: Action(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
видимо, Билл Гейтс сказал, что 16 параметров должно быть достаточно для любого метода.
Tuple(T1)
Tuple(T1, T2)
Tuple(T1, T2, T3)
Tuple(T1, T2, T3, T4)
Tuple(T1, T2, T3, T4, T5)
Tuple(T1, T2, T3, T4, T5, T6)
Tuple(T1, T2, T3, T4, T5, T6, T7)
Tuple(T1, T2, T3, T4, T5, T6, T7, T8)
bonus: Action(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
видимо, Билл Гейтс сказал, что 16 параметров должно быть достаточно для любого метода.
(no subject)
Date: 2010-08-20 09:04 am (UTC)Статическая система типов F# в данном случае не поможет ничем и никак.
Хотя у меня есть идея реализовать именно для этого use case собственный фреймворк с инкрементальной типизацией и кодогенерацией-компиляцией в рунтайме. Пока отложено в долгий ящик, т.к. решение задачи требует сначала реализовать то же самое в более простом варианте, с предварительной кодогенерацией.
Ну и единственное место в продакшене где у меня динамическая и статическая типизации пересекаются - это когда из такого грида нужно отобразить написанный руками конкретно под данную таблицу редактор или выполнить какой-нибудь расчет, тоже исходя из данных таблицы. Приходится заниматься приведениями типов, обращениями по имени к полям, итд :)
(no subject)
Date: 2010-08-21 01:48 am (UTC)это классный kitchen sink, мне только непонятно зачем нужно ещё что-то, если использовать кодогенерацию (на лету в рантайме, я так понимаю?)
и что такое инкрементальная типизация, не расскажете в двух словах, на пальцах?
(no subject)
Date: 2010-08-21 06:16 am (UTC)Чтобы на ходу из данных создавать типы. Например, из списка типов и имен, загруженных из метаданных БД создать тупл. И то, чего в имеющихся под руками нормальных языках пока нет.
(no subject)
Date: 2010-08-21 03:11 pm (UTC)