]> pd.if.org Git - pdclib.old/blobdiff - Readme.rst
Convert readme to be in reStructuredText format (for nice formatting)
[pdclib.old] / Readme.rst
diff --git a/Readme.rst b/Readme.rst
new file mode 100644 (file)
index 0000000..b1143a9
--- /dev/null
@@ -0,0 +1,219 @@
+PDCLib - the `Public Domain C Library<http://pdclib.e43.eu>`_\r
+================================\r
+\r
+What is it\r
+----------\r
+\r
+This is a C Standard Library - what's defined in ISO/IEC 9899 "Information \r
+technology — Programming languages — C" or extensions to the above defined in\r
+ISO/IEC 14882 "Information technology — Programming languages — C++". A few \r
+extensions may optionally be provided.\r
+\r
+License\r
+-------\r
+\r
+Written in 2003-2012 by Martin "Solar" Baute,\r
+           2012-     by Owen Shepherd\r
+\r
+To the extent possible under law, the author(s) have dedicated all copyright \r
+and related and neighboring rights to this software to the public domain \r
+worldwide. This software is distributed without any warranty.\r
+\r
+You should have received a copy of the CC0 Public Domain Dedication along with \r
+this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.\r
+\r
+    **Exception:** Portions of the test suite are under different licenses. \r
+    Where this is the case, it is clearly noted in the relevant location.\r
+\r
+    The license of this code has no bearing upon the licensing of the built \r
+    library (as it does not comprise part of it).\r
+\r
+    At the time this was written, this exception only applies to portions of the\r
+    printf test suite, which are released under the terms of the 2-clause BSD\r
+    license (see testing/printf_testcases.h for full details)\r
+\r
+Terms for extensions\r
+--------------------\r
+Extensions are permitted only if they pass the following tests:\r
+\r
+Pre-existing wide usage\r
+    On most systems, the system C library must maintain its application binary\r
+    interface for long periods of time (potentially eternity). Existing wide \r
+    usage demonstrates utility\r
+\r
+In keeping with the spirit of the standard\r
+    The extension should respect the design, intentions and conventions of the C\r
+    standard, and feel like a natural extension to the offered capability. \r
+\r
+Not system dependent\r
+    The extension should not add any additional dependencies on the underlying \r
+    system\r
+\r
+Non-duplicative\r
+    Extensions should not duplicate functionality already provided by the \r
+    standard\r
+\r
+Disabled by default\r
+    PDCLib will always default to a "strictly conforming" mode exposing only\r
+    functionality offered by the version of the standard specified by the\r
+    __STDC_VERSION__, __STDC__ or __cplusplus macro; extensions will only be \r
+    exposed when requested.\r
+\r
+Additionally, extra consideration will be given to extensions which are \r
+difficult or impossible to implement without access to internal structures of \r
+the C library.\r
+\r
+Conrete Examples:\r
+\r
+strndup\r
+    **Included.** strndup is easily defined in terms of existing standard \r
+    functions, follows  the standard's naming conventions, is in wide usage, and\r
+    does not duplicate  features already provided.\r
+\r
+posix_memalign\r
+    **Rejected.** Has existing wide usage, is not system dependent (can be \r
+    implemented, albeit inefficiently, on top of malloc), but naming is not \r
+    consistent with the naming used by the standard (posix_ prefix) and \r
+    duplicates functionality provided by the C11 standard\r
+\r
+open, close, read, write, ...\r
+    **Rejected.** Widely used, but duplicates functionality provided by the \r
+    standard (FILE objects set to be unbuffered), and not able to implement full\r
+    semantics (e.g. in relation to POSIX fork and other functionality from the \r
+    same defining standard) in a platform-neutral way\r
+\r
+strl*\r
+    **Rejected.** Used somewhat widely, in keeping with the standard, not system\r
+    dependent, but duplicative of functionality provided by (optional) Annex K \r
+    of the C standard. \r
+\r
+flockfile, funlockfile, getc_unlocked, putc_unlocked, fwrite_unlocked, ...\r
+    **Accepted.** Provide functionality not provided by the standard (and \r
+    useful in light of the C11 addition of threading). Can be trivially \r
+    implemented in terms of the <threads.h> mutex functions and the bodies of \r
+    the existing I/O functions, and impossible to implement externally\r
+\r
+Internals\r
+---------\r
+\r
+As a namespace convention, everything (files, typedefs, functions,\r
+macros) not defined in ISO/IEC 9899 is prefixed with _PDCLIB.\r
+The standard defines any identifiers starting with '_' and a capital\r
+letter as reserved for the implementation, and since the chances of\r
+your compiler using an identifier in the _PDCLIB range are slim,\r
+any strictly conforming application should work with this library.\r
+\r
+PDCLib consists of several parts:\r
+\r
+1) standard headers;\r
+2) implementation files for standard functions;\r
+3) internal header files keeping complex stuff out of the standard\r
+   headers;\r
+4) the central, platform-specific file _PDCLIB_config.h;\r
+5) platform-specific implementation files;\r
+\r
+The standard headers (in ./includes/) only contain what they are\r
+defined to contain. Where additional logic or macro magic is\r
+necessary, that is deferred to the internal files. This has been done\r
+so that the headers are actually educational as to what they provide\r
+(as opposed to how the library does it).\r
+\r
+There is a seperate implementation file (in ./function/{header}/) for\r
+every function defined by the standard, named {function}.c. Not only\r
+does this avoid linking in huge amounts of unused code when you use\r
+but a single function, it also allows the optimization overlay to work\r
+(see below).\r
+\r
+(The directory ./functions/_PDCLIB/ contains internal and helper\r
+functions that are not part of the standard.)\r
+\r
+Then there are internal header files (in ./internal/), which contain\r
+all the "black magic" and "code fu" that was kept out of the standard\r
+headers. You should not have to touch them if you want to adapt PDCLib\r
+to a new platform. Note that, if you *do* have to touch them, I would\r
+consider it a serious design flaw, and would be happy to fix it in the\r
+next PDCLib release. Any adaption work should be covered by the steps\r
+detailed below.\r
+\r
+For adapting PDCLib to a new platform (the trinity of CPU, operating\r
+system, and compiler), make a copy of ./platform/example/ named\r
+./platform/{your_platform}/, and modify the files of your copy to suit\r
+the constraints of your platform. When you are done, copy the contents\r
+of your platform directory over the source directory structure\r
+of PDCLib (or link them into the appropriate places). That should be\r
+all that is actually required to make PDCLib work for your platform.\r
+\r
+Future directions\r
+-----------------\r
+Obviously, full C89, C99 and C11 conformance; and full support for the \r
+applicable portions of C++98, C++03 and C++11 (the version which acomplishes \r
+this will be christened "1.0").\r
+\r
+Support for "optimization overlays." These would allow efficient \r
+implementations of certain functions on individual platforms, for example \r
+memcpy, strcpy and memset. This requires further work to only compile in one\r
+version of a given function.\r
+\r
+Post 1.0, support for C11 Annexe K "Bounds checking interfaces"\r
+\r
+Development Status\r
+------------------\r
+\r
+v0.1 - 2004-12-12\r
+Freestanding-only C99 implementation without any overlay, and missing\r
+the INTN_C() / UINTN_C() macros. <float.h> still has the enquire.c\r
+values hardcoded into it; not sure whether to include enquire.c in the\r
+package, to leave <float.h> to the overlay, or devise some parameterized\r
+macro magic as for <limits.h> / <stdint.h>. Not thoroughly tested, but\r
+I had to make the 0.1 release sometime so why not now.\r
+\r
+v0.2 - 2005-01-12\r
+Adds implementations for <string.h> (excluding strerror()), INTN_C() /\r
+UINTN_C() macros, and some improvements in the internal headers.\r
+Test drivers still missing, but added warnings about that.\r
+\r
+v0.3 - 2005-11-21\r
+Adds test drivers, fixes some bugs in <string.h>.\r
+\r
+v0.4 - 2005-02-06\r
+Implementations for parts of <stdlib.h>. Still missing are the floating\r
+point conversions, and the wide-/multibyte-character functions.\r
+\r
+v0.4.1 - 2006-11-16\r
+With v0.5 (<stdio.h>) taking longer than expected, v0.4.1 was set up as\r
+a backport of bugfixes in the current development code.\r
+- #1  realloc( NULL, size ) fails           (fixed)\r
+- #2  stdlib.h - insufficient documentation (fixed)\r
+- #4  Misspelled name in credits            (fixed)\r
+- #5  malloc() splits off too-small nodes   (fixed)\r
+- #6  qsort() stack overflow                (fixed)\r
+- #7  malloc() bug in list handling         (fixed)\r
+- #8  strncmp() does not terminate at '\0'  (fixed)\r
+- #9  stdint.h dysfunctional                (fixed)\r
+- #10 NULL redefinition warnings            (fixed)\r
+\r
+v0.5 - 2010-12-22\r
+Implementations for <inttypes.h>, <errno.h>, most parts of <stdio.h>,\r
+and strerror() from <string.h>.\r
+Still no locale / wide-char support. Enabled all GCC compiler warnings I\r
+could find, and fixed everything that threw a warning. (You see this,\r
+maintainers of Open Source software? No warnings whatsoever. Stop telling\r
+me it cannot be done.) Fixed all known bugs in the v0.4 release.\r
+\r
+Near Future\r
+-----------\r
+Current development directions are:\r
+\r
+Implement portions of the C11 standard that have a direct impact on the way \r
+that PDCLib itself is built. For example, in order to support multithreading,\r
+PDCLib needs a threading abstraction; therefore, C11's thread library is being\r
+implemented to provide the backing for this (as there is no purpose in \r
+implementing two abstractions)\r
+\r
+Cleanup portions of <stdio.h>, particularly the backend. _PDCLIB_fillbuffer and\r
+_PDCLIB_flushbuffer in particular do not feel 'well' factored and need to know\r
+too much about FILE's internals. \r
+\r
+Modularize the library somewhat. This can already be seen with components under \r
+"opt/". This structure is preliminary; it will likely change as the process \r
+continues.
\ No newline at end of file