generic-cl
ccl
Our great sponsors
generic-cl | ccl | |
---|---|---|
13 | 18 | |
123 | 814 | |
- | 2.0% | |
0.0 | 7.3 | |
over 2 years ago | 6 days ago | |
Common Lisp | Common Lisp | |
MIT License | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
generic-cl
-
Compiling a Lisp
for those wanting generic +, equality and comparison in CL, there's a nice library: https://alex-gutev.github.io/generic-cl/
-
Adding new types and operators to Lisp
If performance is not a concern, then you can create CLOS classes corresponding to vec3 or mat44, and dispatch the appropriate functions from the generic-cl project by specializing on them.
-
Emacs-like editors written in Common Lisp
> And Lisp is almost uniquely able to handle transitions to later standards as I described above. You don't actually have to forfeit backwards compatibility entirely or at all if the changes are handled by moving to a new default base package. :cl-user/:cl become :cl##-user/:cl##
Go use cl21[0] if you care for this sort of thing.
> more generic functions would open up more interesting developments later
generic-cl[1]. But in a prefix-oriented language, I just don't see this as particularly important.
> you don't necessarily want to bless a particular concurrency model
You do[2]; this is one of the notable deficiencies in the cl standard that really bites, today. It is being worked on.
0. http://cl21.org/
1. https://github.com/alex-gutev/generic-cl
2. https://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf
-
From Common Lisp to Julia
So, the article is harsh on CL: YMMV. Also, your goal may vary: I want to build and ship (web) applications, and so far Julia doesn't look attractive to me (at all). Super fast incremental development, build a standalone binary and deploy on my VPS or ship an Electron window? done. Problem(s) solved, let's focus on my app please.
The author doesn't mention a few helpful things:
- editor support: https://lispcookbook.github.io/cl-cookbook/editor-support.ht... Emacs is first class, Portacle is an Emacs easy to install (3 clicks), Vim, Atom support is (was?) very good, Sublime Text seems good (it has an interactive debugger with stack frame inspection), VSCode sees good work underway, the Alive extension is new, usable but hard to install yet, LispWorks is proprietary and is more like Smalltalk, with many graphical windows to inspect your running application, Geany has simple and experimental support, Eclipse has basic support, Lem is a general purpose editor written in CL, it is Emacs-like and poorely documented :( we have Jupyter notebooks and simpler terminal-based interactive REPLs: cl-repl is like ipython.
So, one could complain five years ago easily about the lack of editor support, know your complaint should be more evolved than a Emacs/Vim dichotomy.
- package managers: Quicklisp is great, very slick and the ecosystem is very stable. When/if you encounter its limitations, you can use: Ultralisp, a Quicklisp distribution that ships every 5 minutes (but it doesn't check that all packages load correctly together), Qlot is used for project-local dependencies, where you pin each one precisely, CLPM is a new package manager that fixes some (all?) Quicklisp limitations
> [unicode, threading, GC…] All of these features are left to be implemented by third-party libraries
this leads to think that no implementation implements unicode or threading support O_o
> most of the language proper is not generic
mention generic-cl? https://github.com/alex-gutev/generic-cl/ (tried quickly, not intensively)
Documentation: fair points, but improving etc. Example of a new doc generator: https://40ants.com/doc/
Also I'd welcome a discussion about Coalton (Haskell-like type system on top of CL).
-
Modern sequence abstractions
Does generic-cl work for you? In recent months, u/alex-gutev worked on it to separate it out into smaller subsystems.
-
Common Lisp polymorphic stories.
Compared to generic-cls equality generic here: https://github.com/alex-gutev/generic-cl/blob/master/src/comparison/equality.lisp
-
alex-gutev/cl-form-types - Library for determining the types of Common Lisp forms based on information stored in the environment.
Thanks for sharing. I'm planning to use it in static-dispatch to further optimize generic function calls in generic-cl. It's also used in the lisp-polymorph project, work in progress not yet completed, which aims to provide an extensible generic interface, though not based on generic functions, to functions in the Common Lisp standard, like generic-cl however built from the ground up with performance and optimization and performance in mind.
-
Static-Dispatch 0.5: Improved inlining on SBCL and performance improvements for generic-cl
Release 0.5 adds a specialized implementation for SBCL which leverages the compiler's type inference engine, using DEFTRANSFORM, to allow for generic function inlining in a much broader range of scenarios. Any generic function call for which the types of the arguments can be determined by SBCL, can now be inlined by static-dispatch. This means even generic function calls with arguments consisting of complex expressions can be inlined. This also provides a performance boost for generic-cl where theoretically on SBCL, generic-cl:= should be equivalent in performance to cl:= in most cases where the type of the argument can be vaguely inferred by SBCL.
-
State of the Common Lisp ecosystem, 2020
If you want to regain performance, add-in type declarations, cl-generic will inline its functions: https://github.com/alex-gutev/generic-cl/#optimization
-
Re-export renamed symbols from other packages.
This example makes me think of generic-cl: https://github.com/alex-gutev/generic-cl/#add-nary
ccl
-
Don't Invent XML Languages (2006)
There's plenty of history of s-expression formats for documentation. One example is: https://github.com/Clozure/ccl/tree/master/doc/manual
But, also, there's plenty of uses of XML that are not "artcles and books". For example, Maven's pom.xml and log4j2.xml.
-
The IDEs we had 30 years ago and we lost
The descendant of CCL runs on modern Intel Macs. (It also runs on Linux and Windows but without the IDE.) The modern IDE is quite a bit different from the original. In particular, it no longer has the interface builder. But it's still pretty good. It is now called Clozure Common Lisp (so the acronym is still CCL) and you can find it here:
https://ccl.clozure.com/
If you want to run the original that is a bit of a challenge, but still possible. The original was never ported directly to OS X so you have to run it either on old hardware or an emulator running some version of the original MacOS, or on an older Mac running Rosetta 1. In the latter case you will want to look for something called RMCL. Also be aware that Coral Common Lisp was renamed Macintosh Common Lisp (i.e. MCL) before it became Clozure Common Lisp (CCL again).
This looks like it might be a promising place to start:
https://github.com/binghe/mcl
If you need more help try this mailing list:
https://lists.clozure.com/mailman/listinfo/openmcl-devel
- The Saga of the Closure Compiler, and Why TypeScript Won
-
Clozure CL 1.12.2
Download: https://github.com/Clozure/ccl/releases/tag/v1.12.2
-
plain-common-lisp: a lightweight framework created to make it easier for software developers to develop and distribute Common Lisp applications on Microsoft Windows
I was not aware that UIOP provided that function. plain-common-lisp used to be implemented with Clozure CL but eventually moved to SBCL due to the lack of maintenance of CCL. But now there is a hard dependency on SBCL.
- Clozure Common Lisp Wiki
-
Consuming HTTP endpoint using Common Lisp
I have decided it is time to have some fun and use Common Lisp to create algorithm representation that deals with parallel execution. For this I decided to use Clozure common lisp, put basic Qucklisp there and load some libraries to do this.
-
The Origins of Lisp
Lisp must be read outside->in to understand what it is saying. Given (foo (a) (b c)), if you don't know what foo is and just start reading (b c), which is inside, hoping that later you can work out what is foo, you could be going down a blind alley. foo could be a macro or special operator which entirely controls what (b c) means.
To understand what is calculated in Lisp, given that you understand what the syntax means, the evaluation is inside->out.
That's no different from math. In any languages that have math-like nested expressions with bracketing, you have inside-out evaluation.
The alternative are catenative languages and such, which have never been mainstream.
There are assembly languages which go line by line.
Imperative languages with statements and expressions tend to have small expressions where evaluation is followed inside-out; the rest of the control flow is just top down, with some forward and backward skips.
Lisp has all of the above in it. Lisp can be assembly language. For instance, in thsi source file from Clozure Common Lisp:
https://github.com/Clozure/ccl/blob/master/level-0/ARM/arm-h...
(defarmlapfunction fast-mod-3 ((number arg_x) (divisor arg_y) (recip arg_z))
- Corman Lisp development environment for MS Windows
What are some alternatives?
coalton - Coalton is an efficient, statically typed functional programming language that supercharges Common Lisp.
sbcl - Mirror of Steel Bank Common Lisp (SBCL)'s official repository
static-dispatch - Static generic function dispatch for Common Lisp
sketch - A Common Lisp framework for the creation of electronic art, visual design, game prototyping, game making, computer graphics, exploration of human-computer interaction, and more.
reagent - A minimalistic ClojureScript interface to React.js
lisp-interface-library - LIL: abstract interfaces and supporting concrete data-structures in Common Lisp
inlined-generic-function - Bringing the speed of Static Dispatch to CLOS. Succeeded by https://github.com/marcoheisig/fast-generic-functions
data-lens - Functional utilities for Common Lisp
drracket - DrRacket, IDE for Racket
plain-common-lisp - A trivial way to get a native Common Lisp environment on Windows
land-of-lisp-using-hunchentoot - Convert code for "Dice of Doom" from Barski's "Land of Lisp" to use Hunchentoot web server.