X-Git-Url: http://git.csclub.uwaterloo.ca/?p=kopensolaris-gnu%2Fglibc.git;a=blobdiff_plain;f=PROJECTS;h=0d4b744f69b77d750d2ae24533b7de5754068c3a;hp=dc0a6701e901466e3eb675ab49ca915c2650b9a1;hb=55111e974ba84681294ac4855ba00d5b00b15489;hpb=73c435dc3a09b736e9631d38badbd5465dc1dc3d diff --git a/PROJECTS b/PROJECTS index dc0a6701e9..0d4b744f69 100644 --- a/PROJECTS +++ b/PROJECTS @@ -1,9 +1,9 @@ Open jobs for finishing GNU libc: --------------------------------- -Status: March 1997 +Status: February 2001 If you have time and talent to take over any of the jobs below please -contact +contact . ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -33,22 +33,13 @@ contact users can immediately benefit from this. Take a look at the matrix in - ftp://prep.ai.mit.edu/pub/gnu/ABOUT-NLS - for the current status (of course better use a mirror of prep). + ftp://ftp.gnu.org/pub/gnu/ABOUT-NLS + for the current status (of course better use a mirror of ftp.gnu.org). -[ 5] Write wordexp() function; this is described in POSIX.2, the - header already exists. +[ 6] Write `long double' versions of the math functions. - Implementation idea: use some functions from bash. - -**** Somebody is working on this. Help may or may not be appreciated. - - -[ 6] Write `long double' versions of the math functions. This should be - done in collaboration with the NetBSD and FreeBSD people. - - The libm is in fact fdlibm (not the same as in Linux libc). + The libm is in fact fdlibm (not the same as in Linux libc 5). **** Partly done. But we need someone with numerical experiences for the rest. @@ -57,36 +48,12 @@ contact [ 7] Several math functions have to be written: - exp2 - - log2 - each with float, double, and long double arguments. Writing these - functions should be possible when following the implementation of - the existing exp/log functions for other bases. + with long double arguments. Beside this most of the complex math functions which are new in - ISO C 9X. gcc already has support for numbers of complex type so the - implementation should be possible today. I mention here the names - and the way to write them (argument is z = x + iy): - - - cexp(z) = e^x (cos y + i sin y) - - sin(z) = 1/(2i) (e^(iz) - e^-(iz)) = sin(x) cosh(y) + i cos(x) sinh(y) - - cos(z) = 1/2 (e^(iz) + e^-(iz)) = cos(x) cosh(y) - i sin(x) sinh(y) - - tan(z) = 1/i (e^(iz) - e^-(iz))/(e^(iz) + e^-(iz)) - - cot(z) = i (e^(iz) + e^-(iz))/(e^(iz) - e^-(iz)) - - asin(z) = -i ln(iz + sqrt(1-z^2)) - - acos(z) = -i ln(z + sqrt(z^2-1)) - - atan(z) = 1/(2i) ln((1+iz)/(1-iz)) - - acot(z) = -1/(2i) ln((iz+1)/(iz-1)) - - sinh(z) = 1/2 (e^z - e^-z) - - cosh(z) = 1/2 (e^z + e^-z) - - tanh(z) = (e^z - e^-z)/(e^z + e^-z) - - coth(z) = (e^z + e^-z)/(e^z - e^-z) - - All functions should we written with all the parallelism in mind. - And assembler versions are highly expreciated since, e.g., the ix87 - FPU provides an `fsincos' instructions which is certainly useful for - the `sin' function. The implementations for the normal math functions - shows other optimization techniques. + ISO C99 should be improved. Writing some of them in assembler is + useful to exploit the parallelism which often is available. [ 8] If you enjoy assembler programming (as I do --drepper :-) you might @@ -104,48 +71,131 @@ contact work. -[ 9] Write nftw() function. Perhaps it might be good to reimplement the - ftw() function as well to share most of the code. +[10] Extend regex and/or rx to work with wide characters and complete + implementation of character class and collation class handling. -**** Almost done! + It is planned to do a complete rewrite. +*** We have now multibyte character support. But a rewrite is still + necessary. -[10] Write AVL-tree based tsearch() et.al. functions. Currently only - a very simple algorithm is used. - There is a public domain version but using this would cause problems - with the assignment. +[11] Write access function for netmasks, bootparams, and automount + databases for nss_files and nss_db module. + The functions should be embedded in the nss scheme. This is not + hard and not all services must be supported at once. -[11] Extend regex and/or rx to work with wide characters and complete - implementation of character class and collation class handling. - It is planed to do a complete rewrite. +[15] Cleaning up the header files. Ideally, each header style should + follow the "good examples". Each variable and function should have + a short description of the function and its parameters. The prototypes + should always contain variable names which can help to identify their + meaning; better than + + int foo (int, int, int, int); + + Blargh! + +*** The conformtest.pl tool helps cleaning the namespace. As far as + known the prototypes all contain parameter names. But maybe some + comments can be improved. -[12] Write access function for netmasks, bootparams, and automount - databases for nss_files and nss_db module. - The functions should be embedded in the nss scheme. This is not - hard and not all services must be supported at once. +[16] The libio stream file functions should be extended in a way to use + mmap to map the file and use it as the buffer to user sees. For + read-only streams this should be rather easy and it avoids all read() + calls. + + A more sophisticated solution would use mmap also for writing. The + standards do not demand that the file on the disk is always in the + correct form so it would be possible to enlarge it always according + to the page size and install the correct length only for fclose() and + fflush() calls. + + +[18] Based on the sprof program we need tools to analyze the output. The + result should be a link map which specifies in which order the .o + files are placed in the shared object. This should help to improve + code locality and result in a smaller foorprint (in code and data + memory) since less pages are only used in small parts. + + +[19] A user-level STREAMS implementation should be available if the + kernel does not provide the support. + +*** This is a much lower priority job now that STREAMS are optional in + XPG. + +[20] More conversion modules for iconv(3). Existing modules should be + extended to do things like transliteration if this is wanted. + For often used conversion a direct conversion function should be + available. -[13] Rewrite utmp/wtmp functions to use database functions. This is much - better than the normal flat file format. -**** There are plans for a new approach to this problem. Please contact - bug-glibc@prep.ai.mit.edu before starting to work.) +[21] The nscd program and the stubs in the libc should be changed so + that each program uses only one socket connect. Take a look at + http://www.cygnus.com/~drepper/nscd.html + An alternative approach is to use an mmap()ed file. The idea is + the following: + - the nscd creates the hash tables and the information it stores + in it in a mmap()ed region. This means no pointers must be + used, only offsets. + OR + if POSIX shared memory is available use a named shared memory + region to put the data in + - each program using NSS functionality tries to open the file + with the data. + - by checking some timestamp (which the nscd renews frequently) + the programs can test whether the file is still valid + - if the file is valid look through the nscd and locate the + appropriate hash table for the database and lookup the data. + If it is included we are set. + - if the data is not yet in the database we contact the nscd using + the currently implemented methods. -[14] Several more or less small functions have to be written: - + tcgetid() and waitid() from XPG4.2 - + grantpt(), ptsname(), unlockpt() from XPG4.2 - + getdate() from XPG4.2 - + fmtmsg() from SVID +[22] It should be possible to have the information gconv-modules in + a simple cache which is faster to access. Using libdb is probably + overkill and loading it would probably be slower than reading the + plain text file. But a file format with a simple hash table and + some data it points to should be fine. Probably it should be + two tables, one for the aliases, one for the mappings. The code + should start similar to this: - More information are available on request. + if (stat ("gconv-modules", &stp) == 0 + && stat ("gconv-modules.db", &std) == 0 + && stp.st_mtime < std.st_mtime) + { + ... use the cache ... + { + else + { + ... use the plain file if it exists, otherwise the db ... + } -[15] We need to write a library for on-the-fly transformation of streams - of text. In fact, this would be a recode-library (you know, GNU recode). - This is needed in several places in the GNU libc and I already have - rather concrete plans but so far no possibility to start this. +[23] The `strptime' function needs to be completed. This includes among + other things that it must get teached about timezones. The solution + envisioned is to extract the timezones from the ADO timezone + specifications. Special care must be given names which are used + multiple times. Here the precedence should (probably) be according + to the geograhical distance. E.g., the timezone EST should be + treated as the `Eastern Australia Time' instead of the US `Eastern + Standard Time' if the current TZ variable is set to, say, + Australia/Canberra or if the current locale is en_AU. + + +[25] Sun's nscd version implements a feature where the nscd keeps N entries + for each database current. I.e., if an entries lifespan is over and + it is one of the N entries to be kept the nscd updates the information + instead of removing the entry. + + How to decide about which N entries to keep has to be examined. + Factors should be number of uses (of course), influenced by aging. + Just imagine a computer used by several people. The IDs of the current + user should be preferred even if the last user spent more time. + + +[26] ...done