Потаенный червизм F#
В F# есть набор вуду-функций, типизация которых у меня вызывает неадекватные ощущения. Конкретно, это функции форматированной печати, например sprintf:
sprintf "%s" : string->string //превращает строку в строку
sprintf "%s %d" : string->int->string //превращает строку и число в строку
Итд, соответственно формату.
Выглядит это весьма удобно и типобезопасно, т.е. неправильное сочетание строки формата и параметров не скомпилируется, но как реализована функция sprintf и аналогичные, я с ходу не соображу.
Там используется какое-то адское метапрограммирование на типах + дотнетовский Reflection, причем даже intellisense в студии показывает, что тип возвращаемый sprintf fmt меняется в зависимости в от того, что запишешь в fmt. И строковый литерал fmt явно где-то хитрой магией конвертируется не в строку, а в String.Format<'T>.
sprintf "%s" : string->string //превращает строку в строку
sprintf "%s %d" : string->int->string //превращает строку и число в строку
Итд, соответственно формату.
Выглядит это весьма удобно и типобезопасно, т.е. неправильное сочетание строки формата и параметров не скомпилируется, но как реализована функция sprintf и аналогичные, я с ходу не соображу.
Там используется какое-то адское метапрограммирование на типах + дотнетовский Reflection, причем даже intellisense в студии показывает, что тип возвращаемый sprintf fmt меняется в зависимости в от того, что запишешь в fmt. И строковый литерал fmt явно где-то хитрой магией конвертируется не в строку, а в String.Format<'T>.
no subject
(no subject)
no subject
жоunsafe-работу с памятью.Я когда-то переписывал его через макрос, но как-то лениво поддерживать было.
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
нет ли тут ошибки? вроде как два аргумента должно быть
(no subject)
no subject
для меня тож была загадка, но я F# так и не доучил.
как я понимаю, метапрограммирование -- строку для форматирования нужно в compile-time проанализировать и под это дело код подстроить. либо выдать ошибку.
no subject
Так держать!
no subject
(Anonymous) 2010-08-26 05:31 am (UTC)(link)