X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e83582ddbc62ff2bf8dc35cf64612df0713ac690..135f798edba6bcb47842fd17318485bd226ea196:/README.coding diff --git a/README.coding b/README.coding index dd18e227d5..6b3d048dde 100644 --- a/README.coding +++ b/README.coding @@ -1,12 +1,101 @@ ** -** Random bits about coding standards and portability +** Source tree organization +** +****************************************************** + + 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. -MALLOC: - You must cast the result of malloc on AIX. - It's even better to use gras_new when possible. + 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. -SIZE_T - #include in all files manipulating size_t - do cast it to unsigned long before printing (and use %lu) - +** +** NEW type naming standard in SimGrid4 +** +***************************************************** + +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 global structure of the documentation is in doc/modules.doc + +The structure of each module (xbt, msg, etc) is in doc/module-.doc + +The structure of a module is in its public header. This way, you're sure to +see all the public interface (and only it). The different parts of the +interface are grouped using the @name construct, even if it's buggy. Since +parts often get reordered, it's better to add numbers to the parts (so that +users can see the intended order). + +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. + +Any public element (function, type and macro) must have a @brief part. + +We use @ as a command marker, not \ (so, use @brief not \brief) + +** +** OLD Type naming standard in SimGrid3 +** +***************************************************** + +SimGrid3 legacy interfaces (ie, MSG and SimDag) are following these rules: + + - ???_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. + + +* +* SimGrid Hacker Survival Guide (FIXME: should be betterly placed) +******************************** +* 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.