SPEC.md - 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 --- SPEC.md (2474B) --- 1 TRIVIAL-FEATURES 2 ================ 3 4 This is a first *draft* of a description of what symbols should be 5 present in `CL:*FEATURES*` for various platforms. A possible future 6 direction of this documentation might be a CDR document, if it turns 7 out to be a good idea. (Making the language of this document much 8 more precise will be necessary then.) 9 10 We will start by limiting ourselves to OS, CPU and endianness features 11 on Windows and POSIX platforms. 12 13 There are various possible implementation strategies ranging from null 14 implementations (when the host Lisp already pushes the wanted feature) 15 to using FFI (e.g. calling uname() to grab system information. 16 17 18 Specification 19 ------------- 20 21 ### ENDIANNESS 22 23 Either `:LITTLE-ENDIAN` or `:BIG-ENDIAN` should present in 24 `\*FEATURES\*`. For the time being, we will not concern ourselves 25 with other orderings, switchable endianness, etc. 26 27 28 ### OPERATING SYSTEM 29 30 On Windows, `:WINDOWS` should be present in `*FEATURES*`. 31 32 On POSIX systems, the "sysname" information from uname(3) should be 33 used to push the appropriate symbol to `*FEATURES*` by upcasing that 34 string (or downcasing for the "modern" lisps) and interning it in the 35 keyword package. 36 37 Examples: 38 39 - `:DARWIN` 40 - `:LINUX` 41 - `:NETBSD` 42 - `:OPENBSD` 43 - `:FREEBSD` 44 45 For convenience, `:UNIX` should be pushed when running on 46 POSIX/UNIX-like operating system (that doesn't include Windows) and 47 `:BSD` should be present when running on BSD-based systems (that 48 includes Darwin) 49 50 [add `:MACH` too?] 51 52 53 ### CPU 54 55 These features should be mutually exclusive: 56 57 - `:X86` 58 - `:X86-64` 59 - `:PPC` 60 - `:PPC64` 61 - `:MIPS` 62 - `:ALPHA` 63 - `:SPARC` 64 - `:SPARC64` 65 - `:HPPA` 66 - `:HPPA64` 67 68 [add more ...] 69 70 [note: it's debatable whether `:X86` shouldn't also be exported on 71 x86-64, and `:PPC` on ppc64. SBCL doesn't. Other ways 72 to handle, for example, the x86/x86-64 case would be to export 73 something like `:PC386` in both cases or have an additional `:X86-32`. Or 74 finally, have just `:X86`, `:PPC`, etc, and add `:32-BIT-CPU` and 75 `:64-BIT-CPU` features.] 76 77 ### Register Size 78 These features denote the size of a register on the CPU and are mutually exclusive. 79 80 - `:64-bit` 81 - `:32-bit` 82 83 84 Unreferenced References 85 ----------------------- 86 87 * [CLHS: Variable \*FEATURES\*][1] 88 * [Maintaining Portable Lisp Programs][2], by Christophe Rhodes 89 90 91 [1]: http://www.lispworks.com/documentation/HyperSpec/Body/v_featur.htm 92 [2]: http://www-jcsu.jesus.cam.ac.uk/~csr21/papers/features.pdf