X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c9b21bada62fe43b7e1cbb84a8eb44963aba8743..589ed30a21a139bc5735627ed82e23df0318230d:/README.coding diff --git a/README.coding b/README.coding index bcb4240543..b4f2b2f697 100644 --- a/README.coding +++ b/README.coding @@ -1,18 +1,106 @@ +** +** Source tree organization +** +****************************************************** + +There is 4 projects in the tree: + + - GROS: no fancy name yet (low-level toolbox: logging, datatypes). + - GRAS: Grid Reality And Simulation (message passing API with two + implementations allowing to compile programs on top of the + simulator or for the real life without code modification) + - SURF: Server for the Use of Resource Fictions (the simulator used + in GRAS and more) + - AMOK: Advanced Metacomputing Overlay Kit (high level toolbox; Grid + application elements such as distributed database, topology + discovery service, and so on) + +They are all in the same tree because GRAS depends on SURF which depends on +GRAS (that's the only cycle here, we're not *that* vicious). + +The tree is not splited on projects, but on file finality: + include/ -> all *public* headers + include/gros/*.h -> one file per module + include/gros.h -> file including all modules headers + (same for gras, surf and amok instead of gros) + + src/Makefile.am -> main makefile. All projects should fit in only one + library (I mean 2, RL+SG), which is compiled here. + + Since all object.o files are placed here, you should + choose the name of c files carfully to avoid + conflict. + + src/gras/DataDesc -> typical project module + src/gras/DataDesc/datadesc_interface.h -> visible to any GRAS modules; + masked to the user and GROS/AMOK/SURF + src/gras/DataDesc/datadesc_private.h -> visible only from this module + + So, the modules have 3 levels of publicity for their interface. + Private, internal to GRAS, public. Of course, I try to keep as much stuff + private as possible. + + 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'. + They are not listed directly in the check_PROGRAMS part of + the makefile because run_test knows about the gras logging + features and relaunch with full details the failed tests. + + 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. + +** +** Type naming standard +** +***************************************************** + +It may sound strange, but the type naming convention was source of intense +discution between da GRAS 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 (builded 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). + +Exemple: + 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). + ** ** Random bits about coding standards and portability +** +***************************************************** MALLOC: You must cast the result of malloc on AIX. It's even better to use gras_new when possible. SIZE_T - If possible, avoid size_t and use unsigned long instead. + If possible, avoid size_t and use unsigned long instead. If not, #include in all files manipulating size_t do cast it to unsigned long before printing (and use %lu) - - PRINTF pointer difference printf ("diff = %ld\n", (long) (pointer2 - pointer1)); + +