diff options
| author | Mhd Sulhan <m.shulhan@gmail.com> | 2014-07-27 20:22:12 +0700 |
|---|---|---|
| committer | Mhd Sulhan <m.shulhan@gmail.com> | 2014-07-27 20:22:12 +0700 |
| commit | a5817d2410f65c3a055e4c1ec212270aed50186d (patch) | |
| tree | 60b4f7f0bf5684a8a950ec7602e8536ccc8d456c /doc/dev/NOTES | |
| parent | 69d5c74cb37f32588d78e09fcffb947cd74d9c13 (diff) | |
| download | vos-a5817d2410f65c3a055e4c1ec212270aed50186d.tar.xz | |
Add documentation.
Diffstat (limited to 'doc/dev/NOTES')
| -rw-r--r-- | doc/dev/NOTES | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/doc/dev/NOTES b/doc/dev/NOTES new file mode 100644 index 0000000..92bf86c --- /dev/null +++ b/doc/dev/NOTES @@ -0,0 +1,122 @@ + sometimes i forgot why i write code like this. + -- S.T.M.L + +- follow linux coding style + +- priority of source code (4S) : + + stable + + simple + + small + + secure (this option does not need for this program) + +- keep as small as possible: + + remove unneeded space + + remove unneeded variable + +- write comment/documentation as clear as possible + +- learn to use: + + if (1 == var) + +- learn to avoid: + + (i < strlen(str)) + on loop statement because strlen() need temporary variable. + try, + l = strlen(str); + while (i < l) { ... } + +- use function in libc as much as possible; if not, wrap it! + + + +001 - I/O Relation between Statement +----------------------------------------------------------------------------- +LOAD is an input statement. + +SORT, CREATE, JOIN is an output statement, but it can be an input. +i.e: + + 1 - load abc ( ... ) as x; + 2 - sort x by a, b; + 3 - create ghi ( x.field, ... ) as out_x; + +file output created by sort statement in line 2 will be an input by create +statement in line 3. + + +002 - Why we need '2nd-loser' +----------------------------------------------------------------------------- + +to minimize comparison and insert in merge tree. + + + +003 - Why we need 'level' on tree node +----------------------------------------------------------------------------- + +list of input file to merge is A, B, C contain sorted data : + + A : 10, 11, 12, 13 (1st file) + B : 1, 12, 100, 101 (2nd file) + C : 2, 13, 200, 201 (3rd file) + +if we use tree insert algorithm: + + if (root < node) + insert to left + else + insert to right + +after several step we will get: + +B-12 + \ + C-13 + / +A-12 + +which result in not-a-stable sort, + + B-1 C-2 A-10 A-11 B-12 A-12 ... + +they should be, + + B-1 C-2 A-10 A-11 A-12 B-12 ... + +Even if we choose different algorithm in insert: + + if (root <= node) + insert to left + else + insert to right + +there is also input data that will violate this, i.e: + + A : 2, 13, 200, 201 (1st file) + B : 1, 12, 100, 101 (2nd file) + C : 10, 11, 12, 13 (3rd file) + + +004 - recursives call + thread + free on SunOS 5.10 +----------------------------------------------------------------------------- + +i did not investigate much, but doing a recursive call + thread + free cause +SIGSEGV on SunOS 5.10 system, but not in GNU/Linux system. This odd's found +whee testing on Solaris and by using dbx the SIGSEGV "sometimes" catched in +str_destroy, + + if (str->buf) + free(str->buf); <= dbx catch here + +and "sometimes" below that (but not in vos function/stack). + +i.e: + list_destroy(**ptr) + { + if (! (*ptr)) + return; + list_destroy((*ptr)->next); + free((*ptr)); + } + +and no, it's not about double free. |
