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.