Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
A quest for safe text formatting API (zverovich.net)
33 points by ingve on June 19, 2021 | hide | past | favorite | 9 comments


Should mention type-safe printf in dependently-typed languages like Idris[0] or F*[1]:

[0]: https://zgcoder.net/ramblings/typesafe-printf/ [1]: https://fstarlang.github.io/general/2017/11/23/sprintfstar.h...


"Formatting facilities in languages other than C are usually type-safe. For example, in Python you get an exception when trying to format a string as an integer"

Seems like that section could use more examples. A fair amount of dynamic languages won't bomb if you try to format a string as a number with their s/printf equivalent. They coerce the string into a number, with sometimes unexpected (though documented) results. Perl, PHP, and awk all do this.


First heard about consteval. This is cool, but every time C++ adds new and obscure features like this I cannot stop feeling helpless. Rust-like macros are fine, and old languages like Java have linter checks that provides type safety to the format string [1].

Aren't these enough? Apparently no.

There could be a world where people stick with this kind of "pragmatic" solution and stay away from without doing spec-puzzle-solving. C++ is not that world and I've accepted that, but let's make sure the other side holds the majority vote.

[1] https://errorprone.info/bugpattern/FormatString


consteval isn't really obscure or confusing, it does more or less what you would expect based on the name.

There are plenty of esoterically templates shenanigans in C++ but this isn't one of them.


That's good to know. I think I have a fight-or-flight response for every C++ new features :-/


Zig's std.fmt is pretty fantastic doing compile-time type resolution, and has an API used across many parts of the zig std library


Printf is type-safe in Haskell and OCaml. The format-string is not a regular string, it must be literal and is type-checked specifically.


Which printf in Haskell are you thinking of? This one doesn't fit your description, for example:

https://www.stackage.org/haddock/lts-18.0/base-4.14.1.0/Text...


absl::StrFormat provides compile-time safety: https://abseil.io/docs/cpp/guides/format




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: