Hacker News new | past | comments | ask | show | jobs | submit login

It's the standard library. It's not a library for graphics. Might as well credit your OS as well for providing a kernel that runs the program, and your CPU manufacturer for making a CPU that executes the instructions.

https://www.youtube.com/watch?v=5_vVGPy4-rc




Sure, but where does the standard state that a #include of a standard header is a more proper atom than any other #include?


Common sense states what a "proper atom" is.

If someone claimed "a string formatting tool in 2 lines of C++" and it was just fprintf, that's clearly the standard library doing the work, not the promoted file. In this case the standard library is not doing any global illumination or anything related. It's just doing IO.


For instance, in the C++ draft standard doc n3690. 17.6.1.3 you get

'The facilities of the C standard Library are provided in 26 additional headers, as shown in Table 15.'

'<cassert> <cinttypes> <csignal> <cstdio> <cwchar> <ccomplex> <ciso646> <cstdalign> <cstdlib> <cwctype> <cctype> <climits> <cstdarg> <cstring> <cerrno> <clocale> <cstdbool> <ctgmath> <cfenv> <cmath> <cstddef> <ctime> <cfloat> <csetjmp> <cstdint> <cuchar>'

and

'Except as noted in Clauses 18 through 30 and Annex D, the contents of each header c name shall be the same as that of the corresponding header name .h, as specified in the C standard library (1.2) or the C Unicode TR, as appropriate, as if by inclusion'

Among other bits. It's made very clear that the standard libraries are valid 'C++'.

Even that aside, here are the used symbols from those libs:

atoi fopen FILE fprintf M_PI fabs sqrt cos sin erand48

Which are all resonable functionality to expect in any programming environment. The first 4 are only used for I/O which are not exposed in the language otherwise. And can also be safely removed and "GI" still functions. It's just nice to be able to see the result.

The rest of the math functions are generally replaceable with varying amounts of code or by calling platform native instructions.

The only real stand out is erand48 which isn't actually part of the standard, but is easily replaceable by many other standard pseudo random implementations something like 'double erand48(){return (double)rand()/(double)MAX_RAND;}' or some such, or by implementing one of many pseudo random number generators.

In all, it's very fair to consider this 99 lines of C++ all the algorithmic components of a path tracer are shown in the code. External code is well within expectations. And there is no reason to consider the usage of stdio.h as something to be counted, while discounting all the code that goes into actually compiling and executing the code. Where the line is now is the most obvious place to draw it and where all sane C++ programmers would.


> atoi fopen FILE fprintf M_PI fabs sqrt cos sin erand48

They finally standardized M_PI? Sweet, that was always awkward.


Nowhere. The restrictions are arbitrary, but that's not the point. The point is that given the restrictions placed on it, it's a neat piece of code.




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

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

Search: