**
******************************************************
-There is at least 4 sub-projects in the tree:
-
- - XBT: eXtended Bundle of Tools (low-level toolbox: logging, datatypes).
- - SURF: a SimUlation aRtiFact. This is the simulation kernel.
- - MSG: originally MetaSimGrid, MSG is a simple distributed application
- simulator.
- - SMPI: Simulated MPI, to run MPI application using emulation technics.
-
-They are all in the same tree because they are complementary tools and
-having all of them in the same package makes the installation easier
-for end-users. Moreover, it enables to share the compilation chain and
-eases the development.
-
-The tree is not split on projects, but on file finality:
- include/ -> all *public* headers
- include/xbt/*.h -> one file per module
-
- src/include -> another location for protected headers. Used by SURF, and
- other should be converted, since this is the Right Thing.
-
- testsuite/ -> The more test the better.
- Same organization than src/ and include/
- Tests are allowed to load some headers of the module they test.
- All tests should be listed in run_test.in so that they get
- run on 'make check'.
-
examples/ -> Supposed to be copy/pastable by the user, so keep it clear and
avoid any kind of trick. In particular, do only include the
public headers here.
teshsuite/ -> The more test the better. Put in there any strange test
- doing things that the users are not supposed to do,
- just to see if our framework is robust to incorrect and
- unusual behaviors. All tests written in this section
- should leverage our tesh(1) utility.
-
- testsuite/ -> Old test suite, that should be converted to tesh and
- moved to teshsuite at some point.
-
-**
-** Indentation standard
-**
-*****************************************************
-
-Most files use the Kernighan & Ritchie coding style with 2 spaces of
-indentation. The indent program can help you to stick to it:
-
-indent -kr -l80 -nut -i2 -lps -npcs -br -brs -ce -cdw -bbo -npsl <myfile>
-
-The script ./tools/indent runs indent with the appropriate options.
-
-FIXME: this list of arguments is still to be discussed, maybe
-
-**
-** Type naming standard
-**
-*****************************************************
-
-It may sound strange, but the type naming convention was source of intense
-discussion between da SimGrid posse members. The convention we came to may not
-be the best solution, but it has the merit to exist and leave everyone work.
-So please stick to it.
-
- - ???_t is a valid type (built with typedef)
- - s_toto_t is a structure (access to fields with .)
- - s_toto is a structure needing 'struct' keyword to be used
- - e_toto_t is an enum
- - u_toto_t is an union
- - u_toto is an union needing 'union' keyword to be used
- - toto_t is an 'object' (struct*)
-
-Please to not call toto_t something else than an 'object' (ie, something you
-have to call _new and _free on it).
-
-Example:
- typedef struct s_toto {} s_toto_t, *toto_t;
- typedef enum {} e_toto_t;
-
-Moreover, only toto_t (and e_toto_t) are public. The rest (mainly s_toto_t)
-is private.
-
-If you see any part of the code not following this convention, this is a
-bug. Please report it (or fix it yourself if you can).
+ doing things that the users are not supposed to do,
+ just to see if our framework is robust to incorrect and
+ unusual behaviors. All tests written in this section
+ should leverage our tesh(1) utility.
**
-** Random bits about coding standards and portability
+** NEW type naming standard in SimGrid4
**
*****************************************************
-MALLOC:
- Don't use it, or you'll have to check the result (and do some dirty stuff
- on AIX). Use xbt_malloc (or even better, xbt_new) instead.
-
-SIZE_T (FIXME: obsolete?)
- If possible, avoid size_t and use unsigned long instead. If not,
- #include <sys/types.h> in all files manipulating size_t
- do cast it to unsigned long before printing (and use %lu),
- or use %zu.
-
-PRINTF pointer difference (FIXME: advertise %td instead?)
- printf ("diff = %ld\n", (long) (pointer2 - pointer1));
-
-INLINE functions
- The definition of a inline function must be visible when it is used.
- As such, an inline function should be defined (an not only declared)
- in header file (.h) with attributes 'static XBT_INLINE'. It should
- not be defined in source file (.c).
+SimGrid4 will follow the these rules:
+
+ - filenames are unique in the whole project
+ (because of a bug in Sonar coverage computation)
+ C++
+ - fields, methods and variables are in snake_case()
+ - Classes and Enum names are in UpperCamelCase
+ - Enum values are in UPPER_SNAKE_CASE (as constants)
+ - public filenames: api_Class.cpp and api/Class.hpp.
+ - Example: src/s4u/s4u_ConditionVariable.cpp and
+ include/simgrid/s4u/ConditionVariable.hpp
+ - If you prefer api_class.cpp, that's OK, too. Breath and relax.
+ Example: src/s4u/s4u_actor.cpp and include/simgrid/s4u/Actor.hpp
+ - internal/kernel filenames: Class.cpp and Class.hpp
+ - Example: src/kernel/activity/Activity.cpp
+ include/simgrid/activity/Activity.hpp
+ C
+ - variables and functions are in snake_case()
+ - typedefs do not hide the pointers, ie * must be explicit
+ char * sg_host_get_name(sg_host_t * host);
+
+
+This is different from the old convention (described below), that
+should not be used in S4U and its bindings, nor in the kernel.
**
** Commenting the source: doxygen
The documentation of each type and macro are also in the public header since
this is were they live.
-The documentation of each function must be in the C file were it lives.
+The documentation of each function must be in the C++ file were it lives.
Any public element (function, type and macro) must have a @brief part.
+We use @ as a command marker, not \ (so, use @brief not \brief)
+
**
-** XBT virtualization mechanism (FIXME: this section is deprecated)
+** OLD Type naming standard in SimGrid3
**
-****************************************************
-
-There is some functionalities that we want to virtualize in XBT. We
-want xbt_time to give the simulated clock when running on top of the
-simulator, and the host clock when running on a real system. This
-could be placed in GRAS (and was, historically), but there is some
-reason to lower it down to XBT.
-
-Here is the used naming scheme:
-
- - xbt_<module>_<func>(): functions working both in SG and RL
- - xbt_os_<module>_<func>(): RL functions usable even in simulator
-
- That way, in libsimgrid, we still can use native functions if we
- want to. It may for example be useful to get the real time when
- implementing the simulator. Think of the SIGINT handler, which
- wants to see if the user pressed the key twice in a 5 seconds
- interval. This is of little use to check the simulated time here.
+*****************************************************
-Here is the file layout:
+SimGrid3 legacy interfaces (ie, MSG and SimDag) are following these rules:
- - xbt_rl_<module>.c: native implementation (xbt_<module>_<func>()).
- Simply call the corresponding xbt_os_<module>_<func>.
- Part only of libgras.so
+ - ???_t is a valid type (built with typedef)
+ - s_toto_t is a structure (access to fields with .)
+ - s_toto is a structure needing 'struct' keyword to be used
+ - e_toto_t is an enum
+ - u_toto_t is an union
+ - u_toto is an union needing 'union' keyword to be used
+ - toto_t is an 'object' (struct*)
- - xbt_sg_<module>.c: SIMIX implementation xbt_<module>_<func>()).
- Simply call the corresponding SIMIX implementation.
- Part only of libsimgrid.so
+Please to not call toto_t something else than an 'object' (ie, something you
+have to call _new and _free on it).
- - xbt_os_<module>.c: body of the functions implementing natively the
- stuff (xbt_os_<module>_<func>()).
- Part of both libgras.so and libsimgrid.so
+Example:
+ typedef struct s_toto {} s_toto_t, *toto_t;
+ typedef enum {} e_toto_t;
-Since there is almost nothing in xbt_rl_module.c and xbt_sg_module.c,
-it'd be better to use symbol aliasing here (to declare in the object
-code that the same function have two names), but I'm still
-investigating the portability of the thing to windows.
+Moreover, only toto_t (and e_toto_t) are public. The rest (mainly s_toto_t)
+is private.
*
* SimGrid Hacker Survival Guide (FIXME: should be betterly placed)
********************************
-
-* Before pushing any change, don't forget to check if the compilation
- passes with compiler optimizations and warnings turned on:
- cmake -Denable_compile_optimizations=ON \
- -Denable_compile_warnings=ON
-
-* Your commit message should follow the git habits, explained eg here:
- http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
-
* When you add/remove files, and/or make changes in the lists of files to build,
please check that "make distcheck" still succeeds. This is needed to ensure
that the generated archive is consistent.
-
-* If you want to debug memory allocation problems, here are a few hints:
- - disable compiler optimizations, to have better backtraces;
- - disable the mallocators, or it will be hard to match malloc's with
- free's;
- - disable model checking, unless your problem lies in the model
- checker part of SimGrid (MC brings its own malloc implementation,
- which valgrind doesn't understand).
- All this is configured with:
- cmake -Denable_model-checking=OFF \
- -Denable_mallocators=OFF \
- -Denable_compile_optimizations=OFF
-
-* If you break the logs (for example while hacking in the dynars), you
- want to define XBT_LOG_MAYDAY at the beginning of log.h. It will
- deactivate the whole logging mechanism, switching to printfs
- instead. SimGrid becomes incredibly verbose when doing so, but it
- you let you fixing the dynars.
-
\ No newline at end of file