TODO - clic - Clic is an command line interactive client for gopher written in Common LISP
 (HTM) git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/clic/
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
       TODO (4692B)
       ---
            1 -*- Text -*-
            2 
            3 This is a collection of TODO items and ideas in no particular order.
            4 
            5 ### Testing
            6 
            7 -> Test uffi-compat with more UFFI libraries.
            8 -> Write more FOREIGN-GLOBALS.SET.* tests.
            9 -> Finish tests/random-tester.lisp
           10 -> Write benchmarks comparing CFFI vs. native FFIs and also demonstrating
           11    performance of each platform.
           12 -> Write more STRUCT.ALIGNMENT.* tests (namely involving the :LONG-LONG
           13    and :UNSIGNED-LONG-LONG types) and test them in more ABIs.
           14 -> Run tests with the different kinds of shared libraries available on
           15    MacOS X.
           16 
           17 ### Ports
           18 
           19 -> Finish GCL port, port to MCL.
           20 -> Update Corman port. [2007-02-22 LO]
           21 
           22 ### Features
           23 
           24 -> Implement a declarative interface for FOREIGN-FUNCALL-PTR, similar to
           25    DEFCUN/FOREIGN-FUNCALL.
           26 -> Implement the proposed interfaces (see doc/).
           27 -> Extend FOREIGN-SLOT-VALUE and make it accept multiple "indices" for
           28    directly accessing structs inside structs, arrays inside structs, etc...
           29 -> Implement EXPLAIN-FOREIGN-SLOT-VALUE.
           30 -> Implement :in/:out/:in-out for DEFCFUN (and FOREIGN-FUNCALL?).
           31 -> Add support for multiple memory allocation schemes (like CLISP), namely
           32    support for allocating with malloc() (so that it can be freed on the C
           33    side)>
           34 -> Extend DEFCVAR's symbol macro in order to handle memory (de)allocation
           35    automatically (see CLISP).
           36 -> Implement byte swapping routines (see /usr/include/linux/byteorder)
           37 -> Warn about :void in places where it doesn't make sense.
           38 
           39 ### Underspecified Semantics
           40 
           41 -> (setf (mem-ref ptr <aggregate-type> offset) <value>)
           42 -> Review the interface for coherence across Lisps with regard to
           43    behaviour in "exceptional" situations. Eg: threads, dumping cores,
           44    accessing foreign symbols that don't exist, etc...
           45 -> On Lispworks a Lisp float is a double and therefore won't necessarily
           46    fit in a C float. Figure out a way to handle this.
           47 -> Allegro: callbacks' return values.
           48 -> Lack of uniformity with regard to pointers. Allegro: 0 -> NULL.
           49    CLISP/Lispworks: NIL -> NULL.
           50 -> Some lisps will accept a lisp float being passed to :double
           51    and a lisp double to :float. We should either coerce on lisps that
           52    don't accept this or check-type on lisps that do. Probably the former
           53    is better since on lispworks/x86 double == float.
           54 
           55 ### Possible Optimizations
           56 
           57 -> More compiler macros on some of the CFFI-SYS implementations.
           58 -> Optimize UFFI-COMPAT when the vector stuff is implemented.
           59 -> Being able to declare that some C int will always fit in a Lisp
           60    fixnum. Allegro has a :fixnum ftype and CMUCL/SBCL can use
           61    (unsigned-byte 29) others could perhaps behave like :int?
           62 -> An option for defcfun to expand into a compiler macro which would
           63    allow the macroexpansion-time translators to look at the forms
           64    passed to the functions.
           65 
           66 ### Known Issues
           67 
           68 -> CLISP FASL portability is broken. Fix this by placing LOAD-TIME-VALUE
           69    forms in the right places and moving other calculations to load-time.
           70    (eg: calculating struct size/alignment.) Ideally we'd only move them
           71    to load-time when we actually care about fasl portability.
           72      (defmacro maybe-load-time-value (form)
           73        (if <we care about fasl portability>
           74            `(load-time-value ,form)
           75            form))
           76 -> cffi-tests.asd's :c-test-lib component is causing the whole testsuite
           77    to be recompiled everytime. Figure that out.
           78 -> The (if (constantp foo) (do-something-with (eval foo)) ...) pattern
           79    used in many places throughout the code is apparently not 100% safe.
           80 -> On ECL platforms without DFFI we need to build a non-linked version
           81    of libtest.
           82 -> foreign-enum-keyword/value should have their own error condition?
           83    <http://article.gmane.org/gmane.lisp.cffi.devel/975> [2007-02-22 LO]
           84 
           85 ### Documentation
           86 
           87 -> Fill the missing sections in the CFFI User Manual.
           88 -> Update the CFFI-SYS Specification.
           89 -> have two versions of the manual on the website
           90 
           91 ### CFFI-Grovel
           92 
           93 -> Look into making the C output more concise.
           94 
           95 ### CFFI-Toolchain
           96 
           97 -> Port the toolchain parameter detection to more implementations
           98 -> Port the static linking support to more implementations
           99 -> Add a mechanism to configure and/or detect dynamic libraries against
          100    which to link for instance.
          101    It could be a variable in which flags are accumulated,
          102    or an autodetection after loading everything, see
          103     https://github.com/borodust/cl-bodge/blob/0.3.0/distribution/build.lisp#L79
          104 
          105 ### CFFI/C2FFI
          106 
          107 -> Generate wrappers for C inline function definitions (and maybe for some
          108    #define's?)
          109 -> It would be nice if c2ffi emitted its output in a stable order
          110    for details see https://github.com/rpav/c2ffi/issues/28
          111 -> Handle va_list. For now it's treated as any other argument.
          112 
          113 ### Other
          114 
          115 -> Type-checking pointer interface.