metaclass: (Default)
[personal profile] metaclass
В F# есть набор вуду-функций, типизация которых у меня вызывает неадекватные ощущения. Конкретно, это функции форматированной печати, например sprintf:
sprintf "%s" : string->string //превращает строку в строку
sprintf "%s %d" : string->int->string //превращает строку и число в строку
Итд, соответственно формату.
Выглядит это весьма удобно и типобезопасно, т.е. неправильное сочетание строки формата и параметров не скомпилируется, но как реализована функция sprintf и аналогичные, я с ходу не соображу.
Там используется какое-то адское метапрограммирование на типах + дотнетовский Reflection, причем даже intellisense в студии показывает, что тип возвращаемый sprintf fmt меняется в зависимости в от того, что запишешь в fmt. И строковый литерал fmt явно где-то хитрой магией конвертируется не в строку, а в String.Format<'T>.

Date: 2010-08-25 02:18 pm (UTC)
From: [identity profile] potan.livejournal.com
bash$ ocaml
        Objective Caml version 3.10.2

# Printf.printf;;
- : ('a, out_channel, unit) format -> 'a = <fun>
# let s : ('a, out_channel, unit) format = "%d" in s;;
- : (int -> unit, out_channel, unit) format = <abstr>


Я не знаю, как такое сделать в camlp4 :-).

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 12th, 2025 04:55 pm
Powered by Dreamwidth Studios