Code Monkey home page Code Monkey logo

lisp-interface-library's Introduction

lisp-interface-library

LIL: abstract interfaces and concrete data structures in Common Lisp

Features

  • LIL nicely combines ad-hoc polymorphism (CLOS-powered object oriented programming) and parametric polymorphism (as in ML functors, C++ templates, etc.). To our knowledge, only scalaz matches the expressiveness of LIL.

  • LIL sports both pure (persistent, immutable) and stateful (ephemeral, mutable) variants of data structures in Interface-Passing Style. This variants are in the respective packages PURE and STATEFUL; a common core is shared in package INTERFACE, covering read-only operations; automatic transforms allow bridging from stateful to pure and back.

  • LIL supports data structures in traditional Object-Oriented Style, in both stateful (the usual Object-Oriented kind) and pure variants, in the respective packages POSH and CLASSY. There too, automatic transforms to go from Interface-Passing Style to traditional Object-Oriented Style and back.

Building it

LIL needs to be built using ASDF 3.1 or later:

Indeed, LIL notably relies on ASDF 3.1's package-inferred-system. whereby instead of dependencies being listed in a central .asd file, each source file has a defpackage form from which the dependencies are deduced. While we think it's a great way to write Lisp code, you don't have to use it in your own code to use LIL.

LIL also depends on fare-utils, fare-memoization, closer-mop, alexandria.

Using it

See test/pure-map.lisp and test/stateful-map.lisp for examples of how to use LIL. Unhappily, no one is working on documentation at this time.

lisp-interface-library's People

Contributors

fare avatar drewc avatar guicho271828 avatar dalekbaldwin avatar

Stargazers

 avatar Akira avatar Andrei Duma avatar  avatar  avatar Vishal Belsare avatar bohonghuang avatar  avatar François Gallois avatar Shubhamkar Ayare avatar Michaël Le Barbier avatar  avatar phasmid avatar  avatar sameer gupta avatar  avatar Hordur Freyr Yngvason avatar YI YUE avatar Johannes Martinez Calzada avatar  avatar  avatar  avatar Agam Brahma avatar kchan! avatar Ashok Khanna avatar ebigram avatar  avatar  avatar  avatar  avatar  avatar  avatar Alexander Gutev avatar Reihar avatar Andrew avatar  avatar 忍者赤影 avatar Brennan Holten avatar Daniel Mahler avatar Józef Piątkiewicz avatar  avatar Zhao Xiaohong avatar Pierre Neidhardt avatar  avatar  avatar  avatar Andrejs Agejevs avatar Alexandre Rademaker avatar Alex avatar Orestis Ousoultzoglou avatar  avatar lagagain avatar Pa Mu Selvakumar avatar Second Datke avatar  avatar Jonathan McHugh avatar Pranav Vats avatar Kyle Root avatar  avatar  avatar Michael Levine avatar  avatar Sungbin Jo (조성빈) avatar Fernando Borretti avatar Samuel Gagnon avatar plops avatar Viktor Sovietov avatar Quentin Mathé avatar Spark Echo avatar Amar Sood avatar Marco Heisig avatar vân avatar  avatar Ben Lambert avatar Bo Yao avatar Yuya Kono avatar Ata Deniz Aydın avatar  avatar  avatar johann bestowrous avatar James Davidson avatar Break Yang avatar  avatar Fox Kiester avatar DiGiTAL_CuRSe avatar Jon Atack avatar  avatar  avatar  avatar Adlai avatar Thayne McCombs avatar hamlet avatar Cayman avatar  avatar Duarte Barreira avatar Ha-Duong Nguyen avatar  avatar David Vázquez Púa avatar Mark Safronov avatar David Chkhikvadze avatar

Watchers

 avatar Dan Lentz avatar Tony Rossini avatar Alexandre Rademaker avatar Sergey Katrevich avatar atsuo yamada avatar Javier Olaechea avatar Jason Aeschliman avatar  avatar johann bestowrous avatar Mike Selender avatar  avatar James Cloos avatar Break Yang avatar  avatar Gabriel Laddel avatar Ahmet Usal avatar Jon Atack avatar Liviu Vladutu avatar Viktor Sovietov avatar  avatar  avatar Pranav Vats avatar  avatar  avatar

lisp-interface-library's Issues

add user manual documentation

This looks like a really interesting library, and I like the interface passing style. However, I can't find any user documentation. The article referenced in the README does a good job of explaining interface passing style, but not how to actually use this library. I would like some documentation and examples of how to actually use lisp-interface-library, and what data structures are available.

License line in all ASDF files

Hi Fare,

would you mind putting :license "MIT" in all of the ASDF files so that a full dependency tree shows complete license coverage?

Thank you so much.

Some systems failed to build for Quicklisp dist

Building with SBCL 2.1.10 / ASDF 3.3.5 for quicklisp dist creation.

Trying to build commit id ac2e006

lil fails to build with the following error:

; caught WARNING:
;   The function COMPARE is called with four arguments, but wants exactly three.
...
Unhandled UIOP/LISP-BUILD:COMPILE-FILE-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING {1001C08103}>: COMPILE-FILE-ERROR while compiling #<CL-SOURCE-FILE "lil/pure/lexicographic" "file-type">

lil/test fails to build with the following error:

; caught WARNING:
;   The function COMPARE is called with four arguments, but wants exactly three.
...
Unhandled UIOP/LISP-BUILD:COMPILE-FILE-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING {1001C08103}>: COMPILE-FILE-ERROR while compiling #<CL-SOURCE-FILE "lil/pure/lexicographic" "file-type">

lisp-interface-library fails to build with the following error:

; caught WARNING:
;   The function COMPARE is called with four arguments, but wants exactly three.
...
Unhandled UIOP/LISP-BUILD:COMPILE-FILE-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING {1001C08103}>: COMPILE-FILE-ERROR while compiling #<CL-SOURCE-FILE "lil/pure/lexicographic" "file-type">

Full log here

Some systems failed to build for Quicklisp dist

Building with SBCL 2.3.6.173-55d27b14b / ASDF 3.3.5 for quicklisp dist creation.

Trying to build commit id ac2e006

lil fails to build with the following error:

; caught WARNING:
;   The function COMPARE is called with four arguments, but wants exactly three.
...
Unhandled UIOP/LISP-BUILD:COMPILE-FILE-ERROR in thread #<SB-THREAD:THREAD tid=1290945 "main thread" RUNNING {1001710003}>: COMPILE-FILE-ERROR while compiling #<CL-SOURCE-FILE "lil/pure/lexicographic" "file-type">

lil/test fails to build with the following error:

; caught WARNING:
;   The function COMPARE is called with four arguments, but wants exactly three.
...
Unhandled UIOP/LISP-BUILD:COMPILE-FILE-ERROR in thread #<SB-THREAD:THREAD tid=1290941 "main thread" RUNNING {1001710003}>: COMPILE-FILE-ERROR while compiling #<CL-SOURCE-FILE "lil/pure/lexicographic" "file-type">

lisp-interface-library fails to build with the following error:

; caught WARNING:
;   The function COMPARE is called with four arguments, but wants exactly three.
...
Unhandled UIOP/LISP-BUILD:COMPILE-FILE-ERROR in thread #<SB-THREAD:THREAD tid=1290949 "main thread" RUNNING {1001710003}>: COMPILE-FILE-ERROR while compiling #<CL-SOURCE-FILE "lil/pure/lexicographic" "file-type">

Full log here

Add stateful sets.

Currently there are pure sets, and there are set interfaces defined in lil/interface/set that say they are for both pure and stateful, but it doesn't look like there are any stateful sets defined.

Using <classy>

I have a short question regarding how the interface is supposed to be implemented. I usually define my interfaces in two files. Say some interface in file car.lisp with implementation in car-implementation.lisp. I want to have the interface bound to the class car which I have until now typically defined in car.lisp. On compiling I get an error that the class is not defined yet. I could move the class definition to a third file (in car-implementation.lisp causes circularity) but this seems a bit superfluous. Any ideas? Also would it not make sense to implement as parametric. One could then bind it to a variable and include it in the superinterface list as a mixin of sorts.

Some systems failed to build for Quicklisp dist

Building with SBCL 2.3.6.173-55d27b14b / ASDF 3.3.5 for quicklisp dist creation.

Trying to build commit id 9b8f3cf

lil fails to build with the following error:

; caught WARNING:
;   The function EMPTY is called with two arguments, but wants exactly one.
...
Unhandled UIOP/LISP-BUILD:COMPILE-FILE-ERROR in thread #<SB-THREAD:THREAD tid=2323792 "main thread" RUNNING {1001710003}>: COMPILE-FILE-ERROR while compiling #<CL-SOURCE-FILE "lil/transform/linearized-map" "file-type">

lil/test fails to build with the following error:

; caught WARNING:
;   The function EMPTY is called with two arguments, but wants exactly one.
...
Unhandled UIOP/LISP-BUILD:COMPILE-FILE-ERROR in thread #<SB-THREAD:THREAD tid=2323788 "main thread" RUNNING {1001710003}>: COMPILE-FILE-ERROR while compiling #<CL-SOURCE-FILE "lil/transform/linearized-map" "file-type">

lisp-interface-library fails to build with the following error:

; caught WARNING:
;   The function EMPTY is called with two arguments, but wants exactly one.
...
Unhandled UIOP/LISP-BUILD:COMPILE-FILE-ERROR in thread #<SB-THREAD:THREAD tid=2323796 "main thread" RUNNING {1001710003}>: COMPILE-FILE-ERROR while compiling #<CL-SOURCE-FILE "lil/transform/linearized-map" "file-type">

Full log here

Is LIL alive?

This is actually two questions:
1 Is it ready for daily usage?
2. Any plans for further contributions?

benchmark results

runtime overhead over pure arrays etc. should be measured in the future

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.