TODO - clic - Clic is an command line interactive client for gopher written in … | |
git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
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), name… | |
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.l… | |
104 | |
105 ### CFFI/C2FFI | |
106 | |
107 -> Generate wrappers for C inline function definitions (and maybe for so… | |
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. |