└── README.org /README.org: -------------------------------------------------------------------------------- 1 | #+title: Common Lisp: Numerical and Scientific Computing - Call for Needs 2 | 3 | There are numerous numerical and scientific computing libraries in Common Lisp - the [[https://github.com/CodyReichert/awesome-cl?tab=readme-ov-file#numerical-and-scientific][awesome-cl]] list is given [[id:awesome-cl-list][below]]. And yet, it always feels insufficient. 4 | 5 | The following repository is an effort to consolidate the needs of multiple individuals and organizations who are using or want to use Common Lisp to meet their numerical and scientific (numsci) computing needs. To contribute, simply create an [[https://github.com/digikar99/common-lisp-numsci-call-for-needs/issues][issue]] with the following details: 6 | 7 | 1. What problems or end-goals do you plan to use the numsci ecosystem for? Examples may include: graphics, physics, biology, etc. Try to be specific, but if it's difficult to be specific because, say, you are still in an exploratory phase, that's okay. 8 | 2. What current libraries from those listed [[id:awesome-cl-list][below]] are the closest to meeting your needs? 9 | 3. What non-lisp libraries and framework do you think are the closest to meeting your needs? 10 | 4. Do you think your needs can be met by a thin CFFI wrapper around the foreign libraries? Did you try [[https://github.com/rpav/cl-autowrap][cl-autowrap]]? If you tried cl-autowrap but ran into difficulties, could you describe the issues you faced? 11 | 5. What problems do you face while using the lisp numsci libraries, and what is your wish-list for them? When was the last time you wanted to drop Common Lisp in favour of another ecosystem? What made you want to switch, what made you stick? 12 | 6. Any other details you wish to provide. 13 | 14 | The issues may eventually be consolidated into this README by issuing [[https://github.com/digikar99/common-lisp-numsci-call-for-needs/pulls][Pull requests]]. If you feel the consolidation process can be improved in some way, feel free to create an issue for that too, and tag it as Meta. 15 | 16 | * Remarks 17 | 18 | ** OpenCV 19 | 20 | - https://www.reddit.com/r/computervision/comments/axvjfb/comment/ei16ant/?utm_source=share&utm_medium=web2x&context=3 21 | - Alternatives to OpenCV: 22 | - ccv: https://github.com/liuliu/ccv 23 | - libvips: https://github.com/libvips/libvips 24 | 25 | * awesome-cl list 26 | 27 | Source: [[https://github.com/CodyReichert/awesome-cl?tab=readme-ov-file#numerical-and-scientific][awesome-cl]] 28 | 29 | ** Graphics 30 | 31 | These are libraries for working with graphics, rather than making GUIs 32 | (i.e. widget toolkits), which have their own section. 33 | 34 | - ⭐ [[https://github.com/vydd/sketch][Sketch]] - A CL framework for the 35 | creation of electronic art, graphics, and lots more. [MIT][200]. 36 | - [[https://github.com/wmannis/cl-svg][cl-svg]] - A basic library for 37 | producing SVG files. [Expat][14]. 38 | - [[https://github.com/privet-kitty/dufy][dufy]] - exact color 39 | manipulation and conversion in various color models. [MIT][200]. 40 | - [[https://github.com/slyrus/opticl][opticl]] - a library for 41 | representing and processing images. [BSD_2Clause][17]. 42 | - [[https://github.com/cbaggers/varjo][Varjo]] - Lisp to GLSL 43 | translator. [BSD_2Clause][17]. 44 | - [[http://www.xach.com/lisp/vecto/][Vecto]] - Simple vector drawing 45 | library. [FreeBSD][39]. 46 | - [[http://www.xach.com/lisp/zpng/][zpng]] - A library for creating PNG 47 | files. [FreeBSD][39]. 48 | - [[https://git.mfiano.net/mfiano/pngload][pngload-fast]] - A PNG 49 | (Portable Network Graphics) image format decoder in portable Common 50 | Lisp with an emphasis on speed. [MIT][200]. 51 | 52 | Those are bindings: 53 | 54 | - [[https://github.com/bohonghuang/claw-raylib][cl-raylib]] NEW in 55 | 2023 - fully auto-generated Common Lisp bindings to Raylib and Raygui 56 | using claw and cffi-object. Apache 2.0. 57 | 58 | - [[https://github.com/shirakumo/glfw][glfw]] NEW in 2023 - An 59 | up-to-date Common Lisp bindings library to the most recent GLFW OpenGL 60 | context management library. 61 | 62 | - [[https://github.com/byulparan/common-cv][common-cv]] - the OpenCV 63 | (Open Source Computer Vision Library) binding library for CommonLisp. 64 | No license specified. 65 | 66 | - [[https://github.com/rpav/cl-cairo2][cl-cairo2]] - Cairo bindings. 67 | [Boost 1.0][54] 68 | 69 | - [[http://weitz.de/cl-gd/][cl-gd]] - A library providing an interface 70 | to the GD graphics library. [FreeBSD][39]. 71 | 72 | - [[https://github.com/anwyn/cl-horde3d/][cl-horde3d]] - FFI bindings to 73 | the Horde3D graphics library. Not available on Quicklisp. [EPL 74 | 1.0][59] 75 | 76 | - [[https://github.com/sharplispers/cl-jpeg][cl-jpeg]] - Baseline JPEG 77 | encoder and decoder library. [3-clause BSD][15]. 78 | 79 | - [[https://github.com/resttime/cl-liballegro][cl-liballegro]] - 80 | Interface and bindings to the Allegro 5 game programming library. 81 | [zlib][33]. 82 | 83 | - [[https://github.com/3b/cl-opengl][cl-opengl]] - CFFI bindings to 84 | OpenGL, GLU and GLUT APIs. [3-clause BSD][15]. 85 | 86 | - [[https://github.com/lispgames/cl-sdl2][cl-sdl2]] - Bindings for SDL2 87 | using C2FFI. [Expat][14]. 88 | 89 | - [[https://github.com/BradWBeer/CLinch][CLinch]] - Common Lisp 2D/3D 90 | graphics engine for OpenGL. [FreeBSD][39]. 91 | 92 | - [[https://github.com/tkych/donuts][donuts]] - Graphviz interface for 93 | Common Lisp. [Expat][14]. 94 | 95 | - [[https://github.com/lispbuilder/lispbuilder][lispbuilder-sdl]] - A 96 | set of bindings for SDL. [Expat][14]. 97 | 98 | - [[https://github.com/TBRSS/lisp-magick-wand][lisp-magick-wand]] - 99 | ImageMagick bindings. [BSD][15]. Not in Quicklisp. 100 | 101 | - [[https://www.common-lisp.net/project/okra/manual.html][okra]] - CFFI 102 | bindings to Ogre. Not available on Quicklisp. [3-clause BSD][15]. 103 | 104 | - [[https://github.com/takagi/cl-cuda][cl-cuda]] - A library to use 105 | NVIDIA CUDA in Common Lisp programs. [LLGPL][8]. 106 | 107 | ** Machine Learning 108 | 109 | - [[https://github.com/melisgl/mgl][MGL]] - a machine learning library 110 | for backpropagation neural networks, boltzmann machines, gaussian 111 | processes and more. [MIT][200]. 112 | 113 | - some parts originally contributed by Ravenpack International. 114 | - used by its [[https://github.com/melisgl][author]] to 115 | [[https://github.com/melisgl/higgsml][win]] the Higgs Boson Machine 116 | Learning Challenge. 117 | - more about the author: he also won the Google 118 | [[https://en.wikipedia.org/wiki/AI_Challenge][AI Challenge]] in 2010 119 | using Common Lisp, but without MGL, as no machine learning was 120 | needed. A [[https://www.youtube.com/watch?v=7sgERtZkycU][related 121 | talk]] (59', 2013). 122 | 123 | - [[https://github.com/mmaul/clml][clml]] - originally developed by 124 | Mathematicl Systems Inc., a Japanese company. With a 125 | [[https://mmaul.github.io/clml.tutorials//2015/08/08/CLML-Time-Series-Part-1.html][tutorial]]. 126 | [LLGPL][8]. 127 | - [[https://www.common-lisp.net/project/antik/][antik]] - a foundation 128 | for scientific and engineering computation in Common Lisp. GPL. Also 129 | [[https://github.com/melisgl/mgl-mat][mgl-mat]] and 130 | [[https://github.com/tpapp/lla][LLA]]. 131 | 132 | 133 | 134 | 135 | ** Numerical and Scientific 136 | :PROPERTIES: 137 | :ID: awesome-cl-list 138 | :END: 139 | 140 | - ⭐ [[http://maxima.sourceforge.net/][maxima]] - Computer Algebra 141 | System. [GNU GPL3][2]. 142 | 143 | - [[https://wxmaxima-developers.github.io/wxmaxima/][wxMaxima]]: a 144 | graphical frontend. 145 | - [[https://play.google.com/store/apps/details?id=jp.yhonda][Maxima on 146 | Android]], built with ECL. 147 | - [[https://github.com/robert-dodier/maxima-jupyter][Maxima on 148 | Jupyter]] 149 | - it can be used via [[https://www.sagemath.org/][SageMath]] and 150 | [[https://apps.kde.org/cantor/][KDE Cantor]]. Of course, with Emacs: 151 | [[https://gitlab.com/sasanidas/maxima][maxima-mode]] 152 | ([[https://community.linuxmint.com/img/screenshots/maxima-emacs.png][screenshot]]) 153 | and [[https://github.com/jmbr/maxima-interface][maxima-interface]] 154 | to ease the interface between Maxima and Common Lisp. 155 | - it can be used 156 | [[https://mahmoodsheikh36.github.io/post/20230510181916-maxima_in_lisp/][from 157 | a Lisp REPL]]. 158 | 159 | - [[https://github.com/numcl/numcl][numcl]] - Numpy clone in Common 160 | Lisp. [LGPL3][9]. 161 | - [[https://common-lisp.net/project/gsll/][GSLL]] - GNU Scientific 162 | Library for Lisp; allows the use of the GSL from Common Lisp. [GNU 163 | LGPL2.1][11]. 164 | - [[https://github.com/pkhuong/Xecto][Xecto]] - A library for regular 165 | array parallelism. [3-clause BSD][15]. 166 | - [[https://github.com/marcoheisig/Petalisp][Petalisp]] - an attempt to 167 | generate high performance code for parallel computers by JIT-compiling 168 | array definitions. It works on a more fundamental level than NumPy, by 169 | providing even more powerful N-dimensional arrays, but just a few 170 | building blocks for working on them. [AGPL-3.0][agpl3]. 171 | - [[https://github.com/ghollisjr/cl-ana][cl-ana]] - Common Lisp data 172 | analysis library with emphasis on modularity and conceptual clarity. 173 | It aims to be a general purpose framework for analyzing small and 174 | large scale datasets, including binned data analysis and 175 | visualization. [GNU GPL3][2]. 176 | - [[https://neil-lindquist.github.io/linear-programming/][linear-programming]] 177 | -- a library for solving linear programming problems. [MIT][200]. 178 | - [[https://github.com/takagi/avm][avm]] - Efficient and expressive 179 | arrayed vector math library with multi-threading and CUDA support. 180 | [MIT][200]. 181 | - [[https://github.com/bendudson/array-operations][array-operations]] - 182 | a collection of functions and macros for manipulating Common Lisp 183 | arrays and performing numerical calculations with them. [MIT][200]. 184 | - [[https://github.com/Ramarren/cl-geometry/][cl-geometry]] - a system 185 | for two dimensional computational geometry for Common Lisp. 186 | [MIT][200]. 187 | - [[https://github.com/sirherrbatka/vellum][Vellum]] - Data Frames for 188 | Common Lisp. BSD_2Clause. 189 | - [[https://github.com/cbaggers/rtg-math/][rtg-math]] - a selection of 190 | the math routines most commonly needed for making realtime graphics in 191 | lisp (2, 3 and 4 component vectors, 3x3 and 4x4 matrices, quaternions, 192 | spherical and polar coordinates). BSD_2Clause. 193 | - [[https://github.com/mfiano/origin][origin]] - A native Lisp graphics 194 | math library with an emphasis on performance and correctness. 195 | Includes: vectors, matrices (up to 4x4), quaternions, 196 | single/double-float support, destructive/non-destructive operations, 197 | shaping & intersections. [MIT][200]. 198 | 199 | *** Matrix libraries 200 | :PROPERTIES: 201 | :CUSTOM_ID: matrix-libraries 202 | :END: 203 | 204 | - [[https://github.com/quil-lang/magicl][magicl]] - Matrix Algebra 205 | proGrams In Common Lisp based on BLAS/LAPACK and Expokit, by Rigetti 206 | Computing. [BSD_3Clause][15]. 207 | - [[https://github.com/blindglobe/lisp-matrix][lisp-matrix]] - A matrix 208 | package. [FreeBSD][39]. 209 | - [[https://shinmera.github.io/3d-matrices][3d-matrices]] - A library 210 | implementing common matrix calculations, with an emphasis on 2x2,3x3, 211 | and 4x4 matrices as commonly used in graphics. It provides some 212 | numerical functions as well, but those are not the focus. The library 213 | is heavily optimised, so it is not made of pretty code. [zlib][33]. 214 | - [[https://github.com/slyrus/clem][clem]] - a matrix library. 215 | [BSD_2Clause][17]. 216 | 217 | *** Statistics 218 | :PROPERTIES: 219 | :CUSTOM_ID: statistics 220 | :END: 221 | 222 | - [[https://github.com/lisp-stat][lisp-stat]] - an environment for 223 | statistical computing, conceptually similar to R, that is also 224 | suitable for front-line production deployments. "It grew out of a 225 | desire to have an environment for rapidly prototyping analytical and 226 | A.I. solutions, and move directly to production environments with 227 | minimal friction." 228 | 229 | - https://lisp-stat.dev/ 230 | - ships Luke Tierney's 231 | [[https://homepage.stat.uiowa.edu/~luke/xls/xlsinfo/][XLisp-Stat]] 232 | (a predecessor of R) as well as newer libraries. 233 | 234 | - [[https://github.com/blindglobe/common-lisp-stat/][common-lisp-stat]] - 235 | Common Lisp statistics library. [FreeBSD][39]. 236 | 237 | *** Units 238 | :PROPERTIES: 239 | :CUSTOM_ID: units 240 | :END: 241 | 242 | - [[https://github.com/mrossini-ethz/physical-quantities][physical-quantities]] - 243 | a library that provides a numeric type with optional unit and/or 244 | uncertainty for computations with automatic error propagation. GPL2 245 | 246 | *** Utils 247 | :PROPERTIES: 248 | :CUSTOM_ID: utils 249 | :END: 250 | 251 | - [[https://github.com/rigetti/cmu-infix][cmu-infix]] - A library for 252 | writing infix mathematical notation in Common Lisp. See also 253 | [[https://github.com/mrcdr/polisher][polisher]]. 254 | --------------------------------------------------------------------------------