|
Boost : |
Subject: Re: [boost] [PREDEF] Review for the Boost.Predef library by Rene Riviera
From: Artyom Beilis (artyomtnk_at_[hidden])
Date: 2012-02-20 03:06:47
Hello,
This is my review:
> - What is your evaluation of the design?
I personally do not like it for two reasons:
When you include a header like <boost/predef.h>
you get 103 files included... 103 stats, fopen, fclose,
read parse and so on.
More then that, consider build systems that should stat 103 files
for each cpp file compiled.
I know that this library created as "header only" but Boost has
enough header-only configurations and not a single normal compile
time configuration.
I assume that better configuration can be created using compilation
rather then explicit defines test, also it would be much more expendable
for future directions.
I think it would be great if a single file like <boost/conf_predef.h>
would include all definitions. Something that can be generated
at build time and it would include all needed defines making
the "include" much faster and easier to read.
Also I'd merge multiple files like boost/prefef/os/* to a single
one to improve compilation times.
Also generating compiled time header would allow to to extend the
macros to new definitions that can't be done today for example:
- BOOST_POINTER_SIZE 4 or 8 (or even 2)
- BOOST_WCHAR_T_SIZE 2 or 4
And so on.
Basically two things I'd like to see improved:
1. Do not create 103 files but several maybe bigger files.
2. Add compile time configuration generation for stuff
that can't be generated using headers only.
> - What is your evaluation of the implementation?
I think some stuff can be more fine grained.
--------------------------------------------
For example OS Version for
Windows... There are macros like _WIN32_WINNT (AFAIR) that gives you
quite nice OS version.
Another thing is for example libstdc++ version. I'd rather expect to
have for example SO version like 6.x - similar to libstdc++.so.6.x
It can be configured by mapping year -> version.
Or use compiler version - library binded to specific compiler.
It is not really intuitive because I do not remember in what year
gcc-4.5 was released but I do know when for example unique_ptr was
introduced.
In this case I think it can be derived from gcc version and the
fact that libstc++ library is used.
Other things like for example LANGUAGE_STDCPP... We already have
__cplusplus that does almost exactly the same as this macro. Why
do we need it and what added value it gives us?
Architecture
------------
I notices several problems:
1. Arm has several architectures ARM, ARMEL should be distinguished
2. There are MIPS and MIPSEL - Little Endian MIPS (debian has both for example)
I'd suggest to check carefully all acrchitecures.
Compiler:
---------
There is no "Cygwin" compiler or "MINGW" compiler, it is GCC. Should be fixed
OS:
---
- I'd rather like to See Darwin then MACOS
- MACOS not good.
It should be MACOSCLASSIC and MACOS or even better:
MACOS and DARWIN
Mac OS 9 and Mac OS 10 share amlost nothing, on the other hand
Darwin and Mac OX 10 is almost the same.
Testing...
---------
1. Unfortunately I see none on this. I understand that is is not simple but
you may probably use some tools like `uname` and compare their output
any maybe use for example bjam toolset and bjam os and compare it with detected
compiler.
From what I can see all tests are manual. It is not good.
2. I'd like to read how did you tested this project... I don't see any of it
in the documentation.
Have you setup at least several VMs using for example qemu with different
architectures? Have to tested this on several OSs?
> - What is your evaluation of the documentation?
It needs to be improved, for example what BOOST_LIBSTD_CXX version means?
Does BOOST_OS_WINDOWS defined when CYGWIN is used
Only from looking at the source I could figure this out.
I think each macro should display exact meaning for user who is interested.
> - What is your evaluation of the potential usefulness of the library?
It should be very useful. Because it standardizes different macros
and makes it easier to figure out for example how to check if we are
using Solaris
> - Did you try to use the library? With what compiler? Did you have any problems?
Yes, I did and I had some problems.
1. Almost all tests do not even compile on Cygwin...
2. Under mingw gcc-4.5.3 I see following output of info_as_cpp
For example:
** Detected **
....
BOOST_LIBSTD_GNU = 410400028 (41,4,28) | GNU
...
How should I treat it?
However I mostly read the code and the documentation.
> - How much effort did you put into your evaluation? A glance? A quick reading? In-depth study?
2-3 hours of code and documentation reading + writing this e-mail.
> - Are you knowledgeable about the problem domain?
>
Yes, I needed such macros many times and created such configurations.
>And finally, every review should answer this question:
>
> - Do you think the library should be accepted as a Boost library?
>
>Be sure to say this explicitly so that your other comments don't obscure your overall opinion.
>
>
Unfortunately, No.
But I strongly recommend to improve the library and submit it for further review.
Problems:
1. Too many macros are not fine grained as they should be
or they generate unexpected or surprising definitions.
2. Documentation must be improved because for now it is very unclear.
3. Many problems with different definitions like there is no such
thing like Cygwin compiler should be fixed.
4. 103 files in headers that would slow down the build process.
5. No real test suite exists
So general direction is good but the library is far from being
production ready.
Artyom Beilis
--------------
CppCMS - C++ Web Framework: http://cppcms.com/
CppDB - C++ SQL Connectivity: http://cppcms.com/sql/cppdb/
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk