diff options
Diffstat (limited to 'TODO.xgawk')
-rw-r--r-- | TODO.xgawk | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/TODO.xgawk b/TODO.xgawk new file mode 100644 index 00000000..78f26428 --- /dev/null +++ b/TODO.xgawk @@ -0,0 +1,148 @@ +To-do list for xgawk enhancements: + +- In gawkapi.c - review switch statements and use of default. + +- In extensions/configure.ac - add compiler warnings if GCC. + +- Consider adding a way to access gawk special vars read only. + +Low priority: + +- Enhance extension/fork.c waitpid to allow the caller to specify the options. + And add an optional array argument to wait and waitpid in which to return + exit status information. + +Possible future changes requiring (further) discussion: + +- Change from dlopen to using the libltdl library (i.e. lt_dlopen). + This may support more platforms. + +- Implement namespaces. Arnold suggested the following in an email: + - Extend the definition of an 'identifier' to include "." as a valid character + although an identifier can't start with it. + - Extension libraries install functions and global variables with names + that have a "." in them: XML.parse(), XML.name, whatever. + - Awk code can read/write such variables and call such functions, but they + cannot define such functions + function XML.foo() { .. } # error + or create a variable with such a name if it doesn't exist. This would + be a run-time error, not a parse-time error. + - This last rule may be too restrictive. + I don't want to get into fancy rules a la perl and file-scope visibility + etc, I'd like to keep things simple. But how we design this is going + to be very important. + +Unlikely: + +- Include a sample rpm spec file in a new packaging subdirectory. + +- Patch lexer for @include and @load to make quotes optional. + +Done: + +- Add AWKLIBPATH with default pointing to ${libexecdir}/$PACKAGE/$VERSION + +- Change default shared library extension from ".so" to ".$shlibext" + +- Patch build infrastructure so that the current code in the + extension subdirectory gets built and installed into the default $AWKLIBPATH + location. + +- Implement @load + +- Patch ERRNO handling to create a simple API for use by extensions: + extern void update_ERRNO_int(int) + enum errno_translate { TRANSLATE, DONT_TRANSLATE }; + extern void update_ERRNO_string(const char *string, enum errno_translate); + extern void unset_ERRNO(void); + +- Add valgrind-noleak target. + +- Fix minor bug in fork extension, and add wait function. + +- Patch filefuncs extension to read symbolic links more robustly. + +- Add shared library tests. + +- Delete extension/xreadlink.[ch] + +- Add a -i (--include) option. + +- Enable default ".awk" search in io.c:find_source(). The simple change + is to add this code inline in io.c: + #ifndef DEFAULT_FILETYPE + #define DEFAULT_FILETYPE ".awk" + #endif + +- The -f flag should not eliminate duplicates. + +- Eliminate libtool from the top-level configure.ac. Create a separate + configure.ac in the extensions subdirectory, and hide all the libtool + stuff in there. + +- Running "make install" should install gawkapi.h in /usr/include. + +- Add time extension to the gawk distro. This defines sleep and gettimeofday. + Renamed existing gettimeofday to getlocaltime. + +- Finish implementing new interface using gawkapi.h + - api_get_curfunc_param not honoring requested type in node_to_awk_value + - should api_sym_lookup also accept a type request? + - must update the API do_lint value when changed by set_LINT + - what is the proper return value for load_ext? It does not matter + unless called by the "extension" function that nobody uses. + +- Hide private parts of IOBUF from extensions. + +- Fix extension/rwarray.c. + +- Fix lint complaints about shared library functions being called without + having been defined. For example, try: + gawk --lint -lordchr 'BEGIN {print chr(65)}' + gawk: warning: function `chr' called but never defined + A + In ext.c, make_builtin needs to call awkgram.y:func_use. If done naively, + I think this would result in complaints about shared library functions + defined but not used. So there should probably be an enhancement to func_use + and ftable to indicate if it's a shared library function. + +- Develop a libgawk shared library for use by extensions. Should this + be hosted in a separate project? + + A few existing extensions use a hash API for mapping string + handles to structures. In xgawk, we had this API inside array.c, but it + probably belongs in a separate libgawk shared library: + + typedef struct _strhash strhash; + extern strhash *strhash_create P((size_t min_table_size)); + /* Find an entry in the hash table. If it is not found, the insert_if_missing + argument indicates whether a new entry should be created. The caller + may set the "data" field to any desired value. If it is a new entry, + "data" will be initialized to NULL. */ + extern strhash_entry *strhash_get P((strhash *, const char *s, size_t len, + int insert_if_missing)); + typedef void (*strhash_delete_func)(void *data, void *opaque, + strhash *, strhash_entry *); + extern int strhash_delete P((strhash *, const char *s, size_t len, + strhash_delete_func, void *opaque)); + extern void strhash_destroy P((strhash *, strhash_delete_func, void *opaque)); + +- Separate projects for major standalone extensions. We need to set up + hosting for these projects: + + - XML + + - PostgreSQL + + - GD + + - MPFR. This is probably not useful now that MPFR support has been + integrated into gawk. Are there any users who need this extension? + +- Review open hook implementation. + * Mostly done. + * Still to go: Rework iop_alloc, interaction with open hooks, and + skipping command line directories. + +- Attempting to load the same file with -f and -i (or @include) should + be a fatal error. |