Giter Site home page Giter Site logo

shen-cl's People

Contributors

billstclair avatar cryptorick avatar cxxxr avatar drainful avatar rkoeninger avatar tizoc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

shen-cl's Issues

Pre-built macOS releases

All releases 2.1-2.5 are missing pre-built binaries for macOS.

Need someone with a mac to build these. Should be as easy as checking out the tag, fetching kernel sources, and running make release. See the readme.

Replace shen-clisp and shen-sbcl with this combined repo?

@tizoc So I made this repo today with CL code that uses reader conditionals (if that's what they're called in CL) to distinguish with CL implementation is being built. This allows the same code to be used for CLisp, SBCL and potentially more.

#+CLISP (EXT:SAVEINITMEM
  (FORMAT NIL "~A~A" *NATIVE-PATH* "shen.mem")
  :INIT-FUNCTION 'shen.byteloop)

#+SBCL (SAVE-LISP-AND-DIE
  (FORMAT NIL "~A~A" *NATIVE-PATH* #+WIN32 "shen.exe" #-WIN32 "shen")
  :EXECUTABLE T
  :SAVE-RUNTIME-OPTIONS T
  :TOPLEVEL 'SHEN-TOPLEVEL)

After working on both CL ports in parallel for a while, (two text editors side by side), I noticed how similar they were and keeping them in sync was getting annoying.

What do you think about just having a combined repo?

CLisp segfault during test ch.13 (Linux)

Expected Behavior

make build-clisp
(...)

make test-clisp
(tests pass)

Current Behavior

make build-clisp
(...)

make test-clisp
(tests before ch.13 pass)

Qi interpreter - chapter 13: (tc +) = true
run time: 7.62939453125e-6 secs
passed
Qi interpreter - chapter 13: (load "interpreter.shen") = loaded
type#num : symbol
type#primitive_object : symbol
type#pattern : symbol
type#l_formula : symbol
l_interpreter : (A --> B)
read_eval_print_loop : (string --> A)
normal_form : (l_formula --> l_formula)
make: *** [Makefile:151: test-clisp] Segmentation fault

Full output here:
https://pastebin.com/hS2U9CZC

Steps to Reproduce

  1. clone https://github.com/Shen-Language/shen-cl
  2. cd shen-cl
  3. make fetch
  4. make build-clisp
  5. make test-clisp

Context

Operating System: NixOS 18.09.1399.51076ed20c5 (Jellyfish) x86_64
CLisp version:

GNU CLISP 2.49.60+ (2017-06-25) (built on localhost [127.0.0.1])
Software: GNU C 7.3.0 
gcc -g -O2 -no-integrated-cpp -W -Wswitch -Wcomment -Wpointer-arith -Wreturn-type -Wmissing-declarations -Wimplicit -Wno-sign-compare -Wno-format-nonliteral -Wno-shift-negative-value -O -fwrapv -pthread -fno-strict-aliasing -DNO_ASM -DNO_ARI_ASM -DNO_SP_ASM -DENABLE_UNICODE -DMULTITHREAD -DPOSIX_THREADS -DDYNAMIC_FFI -DDYNAMIC_MODULES  libgnu.a  -lreadline -lncurses -ldl -lffcall  -lsigsegv  
SAFETY=0 TYPECODES WIDE_HARD GENERATIONAL_GC SPVW_BLOCKS SPVW_PURE SINGLEMAP_MEMORY
libsigsegv 2.12
libreadline 6.3
libffcall 2.1
Features: 
(READLINE REGEXP WILDCARD SYSCALLS I18N LOOP COMPILER CLOS MOP CLISP ANSI-CL COMMON-LISP LISP=CL INTERPRETER
 LOGICAL-PATHNAMES MT SOCKETS GENERIC-STREAMS SCREEN FFI GETTEXT UNICODE BASE-CHAR=CHARACTER WORD-SIZE=64 PC386
 UNIX)
C Modules: (clisp i18n syscalls regexp readline)
Installation directory: /nix/store/w83xmbkvyqsn87di9c5y6dglymf1lmy9-clisp-2.50pre20171114/lib/clisp-2.49.60+/
User language: ENGLISH

Lots of warnings when running shen-ecl in OSX

It seems to work fine in that it compiles and executes the code, but it keeps printing warnings constantly:

/private/var/folders/sy/4w247kq176z5n2k37nn3lblw0000gn/T/ecl062dRXZ8B.eclh:25:108: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
{0,0,3,0,ecl_make_fixnum(5),ecl_make_fixnum(4),(cl_objectfn)L1_shen_type_signature_of_shen_prhush_,ECL_NIL,ecl_make_fixnum(-1)},
                                                                                                           ^~~~~~~~~~~~~~~~~~~
/usr/local/Cellar/ecl/16.1.3_2/include/ecl/object.h:131:62: note: expanded from macro 'ecl_make_fixnum'
#define ecl_make_fixnum(n)      ((cl_object)(((cl_fixnum)(n) << 2) | t_fixnum))
                                              ~~~~~~~~~~~~~~ ^
1 warning generated.

It is always the same warning (because of ecl_make_fixnum), which seems to be coming from Clang. I'm not familiar with ECL, is it normal that it is generating and compiling C code while evaluating Shen code?

Reintroducing Shen code

Brought up in Shen-Language/shen-sources#82 (comment)

When moving this codebase into GitHub, I replaced files written in Shen, like backend.shen with their CL equivalents as Shen binaries were not as readily accessible and bootstrapping made the build process more difficult.

Now that there are hosted binaries for all major platforms, Shen code can be re-introduced to this repo. backend is a clear choice for being written in Shen, as it originally was, and is written in a way that is idiotic idiomatic to Shen and noisy in CL.


Considering another goal was mine was to:

  • produce a source distribution of shen-cl, a shen.lisp or package of .lisp files (shen -l build-kernel.shen)
  • that shen.lisp can then be loaded up by SBCL and use SB-EXT:SAVE-LISP-AND-DIE to generate an executable (sbcl --load build-executable.lisp)

Given this was the design, we need a program that generates CL from KL and writes it to a series of files. This should be doable without having any CL source code.

Could the project be 100% Shen?

Trouble loading common lisp libraries

I was wondering if there was an accepted way to load external common lisp libraries for use in Shen code through the "lisp." macro. I realize that the "lisp." macro allows the evaluation of lisp code, but the case restriction makes loading common lisp libraries troublesome. How do other people deal with this issue?

Thank you.

EDIT: I have opened a pull request with changes I believe will reduce this trouble. #25

Using the (lisp.sin...) capability fails

I had a problem calling LISP from Shen in the shen-cl GitHub OS Shen,
with the (lisp.sin...) capability.

Examples below.

==================================================

Shen, copyright (C) 2010-2015 Mark Tarver
www.shenlanguage.org, Shen 21
running under Common Lisp, implementation: Clozure CL
port 2.2 ported by Mark Tarver


(0-) (lisp.sin 1.5)
0.9974949866040544

(1-) (lisp.print "Hellou")

"Hellou" "Hellou"

(2-) (lisp.format () "Hellou")
Too few arguments in call to #<Compiled-function FORMAT #x30000009CA2F>:
1 argument provided, at least 2 required. 

(3-) (lisp.* 3 3 3 3 3 3)
Too few arguments in call to #<Compiled-function shen.multiply #x30000118AAAF>:
1 argument provided, at least 2 required. 

(4-) (lisp.list a b c d e f)
(a) is not of type (OR SYMBOL FUNCTION), and can't be FUNCALLed or APPLYed

(5-) (QUIT)

Process inferior-shen finished

==================================================

This was said to work inside function definitions (because the
protect wrapper is stripped), only in the REPL it fails.

Outside of function definitions, the result is a symbol, and because
of that it gets compiled to a call to shen.apply and thats where it
fails.

Inside function definitions: (lisp.some-func 1 2 3 4) -> (SOME-FUNC 1
2 3 4)

In the REPL: (lisp.some-func 1 2 3 4) -> ((protect SOME-FUNC) 1 2 3 4)
-> (shen.apply (QUOTE SOME-FUNC) (LIST 1 2 3 4))

yours, Dr A. J. Y.
Finland, the EU

Error with the Shen properties

Dr Tarver made the "o-o.shen" OO capability. I have in my hands the Paul
Graham book On Lisp, and its Ch 25 contains a discussion of object
oriented LISP.

I have been tinkering with making a Paul Graham type version of the
o-o.shen. This one would be called oo.shen.

The file oo.shen is what I have made so far. The file ooEx.shen are
some examples.

There is something strange here. Below is a copy of the output.

Shen, copyright (C) 2010-2015 Mark Tarver
www.shenlanguage.org, Shen 21
running under Common Lisp, implementation: SBCL
port 2.2 ported by Mark Tarver


(0-) \\ If I begin by loading the file ooEx.shen, it works:
(load "ooEx.shen")
File begins.
[]

defclass definitions
[]
The function COMMON-LISP-USER::object is undefined.

(1-) \\ But if I first load oo.shen and then ooEx.shen, the below happens:
(load "oo.shen")
defclass-macro
process-slots
instance
oo.type#o-o
attribute-type
class?
oo.create-class
instance
assign
cl-slots
cl-parents
cl-name
make-instance
iget
iput
[]

run time: 1.2080000415444374 secs
loaded

(2-) (load "ooEx.shen")
value not found


(3-) \\ Mysterious "value not found" error
(QUIT)

Process inferior-shen finished

Attachments: oo.shen ooEx.shen

File oo.shen

(package oo [defclass defclass-macro assign instance attribute class
              make-instance iget iput object
	      cl-slots cl-parents cl-name process-slots
	      attribute-type class? ]

(defmacro defclass-macro
  [defclass Class SuperClasses | Slots] 
  -> (create-class Class SuperClasses (process-slots Class Slots)))


\\ AJY 2018-04-24 (shen.typecheck ...) removed, changed in Shen 20 -->.
\\ Must be possible to have no (new) slots

(define process-slots
  Class [Attribute Type Value] -> \\ one slot?
      (do (put Class Attribute Type) \\ stored as properties
          [[Attribute Value]])
  Class [Attribute Type] -> 
      (do (put Class Attribute Type) [[Attribute]]) 
  Class [Attribute Type Value , | Slots] -> \\ a list of slots?
      (do (put Class Attribute Type)
          [[Attribute Value] | (process-slots Class Slots)])
  Class [Attribute Type , | Slots] -> \\ list of slots?
      (do (put Class Attribute Type)
          [[Attribute] | (process-slots Class Slots)])
  Class [] -> [[]] \\ no slots: modify nothing
  Class _  -> \\ otherwise: there is a syntax error
      (error "syntax error in class definition of ~A~%" Class))
  
(declare instance [[class Class] --> [instance Class]])

(datatype o-o

  if (class? Class)
  ______________________
  Class : (class Class);

  if (= (attribute-type Class Attribute) Type)
  __________________________________
  Attribute : (attribute Class Type);
  
  Instance : (instance Class);
  Value : A;
  Attribute : (attribute Class A);
  _____________________________________________________ 
  (assign Instance Attribute Value) : (instance Class);)
  
(define attribute-type
  Class Attribute -> (trap-error (get Class Attribute) (/. E [])))     
  
(define class?
  Class -> (cons? (trap-error (get Class slots) (/. E false))))  

(define create-class
  Class SuperClasses Slots ->
      (let SuperSlots (mapcan (function instance) SuperClasses)
           ClassSlots (append Slots SuperSlots)
           Create (put Class slots ClassSlots) \\ property slots: list
	   Paren (put Class parents SuperClasses) \\ super i e parents
	   Name (put Class class-name Class) \\ her name
           Class))


\\ instance creates an instance of the class,
\\ which is a list of lists

(define instance
  Class -> (get Class slots))

\\ assign assigns the value of a slot of an instance
  
(define assign
  [[Attribute | _] | Slots] Attribute Value ->
      [[Attribute Value] | Slots]
  [Slot | Slots] Attribute Value ->
      [Slot | (assign Slots Attribute Value)])

(define cl-slots
    Class -> (get Class slots))

(define cl-parents
    Class -> (get Class parents))

(define cl-name
    Class -> (get Class class-name))

(define make-instance
    Class InstanceName ->
    (do
        (put InstanceName instanceSlots (instance Class))
	InstanceName))

(define iget
    InstanceName SlotName ->
    (head (tail (head (assoc SlotName (get InstanceName instanceSlots))))))

(define iput
    InstanceName SlotName Val ->
    (let
        Lst (get InstanceName instanceSlots)
	NewLst (assign Lst SlotName Val)
	(put InstanceName instanceSlots NewLst)))

(do
    (put object slots [place-holder])
    (put object parents [object]) \\ super i e parents: Its own super
    (put object class-name object) \\ her name
    (put object place-holder list) \\ Program requires at least one slot
    [])

)

File ooEx.shen

(do (output "File begins.~%") [])

(do (output "~%defclass definitions~%") [])

(defclass int (object) val number 0) \\ integer class

(defclass fl (int)) \\ float class

(defclass cmx (fl)) \\ complex class

(do (output "~%make-instance definitions~%") [])

(set o (make-instance object o))

(set i (make-instance int i))

(set f (make-instance fl f))

(set c (make-instance cmx c))

ECL not working with kernel version 22

Error when trying to run the tests is:

!!! FATAL ERROR: The variable |*macros*| is unbound.
Exiting Shen.

Probably has something to do with the changes introduced by the dynamic code expansion.

Error defining macro-defining macro

(let w (gensym W) x (gensym X) y (gensym Y) zs (gensym Zs)
  (defmacro declare-reduce-binary
    [declare [reduce-binary Name] | Declarations] ->
      (let macro-name (gensym Name)
        [[lambda x [lambda y y]]
         [defmacro macro-name
           [query reduce-binary Name] -> macro-name
           [Name w x y | zs] -> [Name w [Name x y | zs]]]
         [declare | Declarations]])))

error: The function SHEN::V154 is undefined.
version:

Shen, copyright (C) 2010-2015 Mark Tarver
www.shenlanguage.org, Shen 22.2
running under Common Lisp, implementation: SBCL
port 3.0.3 ported by Mark Tarver, Robert Koeninger and Bruno Deferrari

I/O error in underlying platform while running on Clozure

I m creating a Shen OO capability based on Paul Graham's book On Lisp,
Ch 25, Object-Oriented LISP.

A version of this capability is in the file oo.shen.

An attempt to track the function (create-class...) makes Shen crash:

Shen, copyright (C) 2010-2015 Mark Tarver
www.shenlanguage.org, Shen 21
running under Common Lisp, implementation: Clozure CL
port 2.2 ported by Mark Tarver


(0-) (load "oo.shen")
putp
getp
defclass-macro
oo.process-slots
instance
oo.type#o-o
oo.attribute-type
class?
oo.create-class
instance
assign
cl-slots
cl-parents
cl-name
make-instance
iget
iput
[]

run time: 0.4719999972730875 secs
loaded

(1-) (track oo.create-class)
oo.create-class

(2-) (step +)
true

(3-) (defclass int (object) val number 0) \\ integer class

 <1> Inputs to oo.create-class 
 int, [object], [[val 0]],  ==>The value #<BASIC-CHARACTER-INPUT-STREAM UTF-8 (TTY/0) #x3020006233FD> is not of the expected type (AND INPUT-STREAM CCL::BINARY-STREAM).

yours, Dr Antti J Ylikoski
Helsinki, Finland, the EU

I did not find a way to attach a file, I will insert the Shen code below:

(package oo [defclass defclass-macro assign instance attribute class
              make-instance iget iput object
	      cl-slots cl-parents cl-name
	      class?
	      putp getp ]

(define putp
    Obj Prop Val ->
        (lisp.setf (lisp.get Obj Prop) Val))

(define getp
    Obj Prop ->
        (lisp.get Obj Prop))

\\ (defclass class-name (list of superclasses) (list of slots))

(defmacro defclass-macro
  [defclass Class SuperClasses | Slots] 
  -> (create-class Class SuperClasses (process-slots Class Slots)))

(define process-slots
  Class [Attribute Type Value] -> \\ one slot?
      (do
          (putp Class Attribute Type) \\ stored as properties
          [[Attribute Value]])
  Class [Attribute Type] -> \\ without the value
      (do
          (putp Class Attribute Type) [[Attribute]]) 
  Class [Attribute Type Value , | Slots] -> \\ a list of slots?
      (do
          (putp Class Attribute Type)
          [[Attribute Value] | (process-slots Class Slots)])
  Class [Attribute Type , | Slots] -> \\ list of slots?
      (do
          (putp Class Attribute Type)
          [[Attribute] | (process-slots Class Slots)])
  Class [] -> [[]] \\ no slots: modify nothing
  Class _  -> \\ otherwise: there is a syntax error
      (error "syntax error in class definition of ~A~%" Class))

(declare instance [[class Class] --> [instance Class]])

(datatype o-o

  if (class? Class)
  ______________________
  Class : (class Class);

  if (= (attribute-type Class Attribute) Type)
  __________________________________
  Attribute : (attribute Class Type);
  
  Instance : (instance Class);
  Value : A;
  Attribute : (attribute Class A);
  _____________________________________________________ 
  (assign Instance Attribute Value) : (instance Class);)
  
(define attribute-type
  Class Attribute -> (trap-error (getp  Class Attribute) (/. E [])))     
  
(define class?
  Class -> (cons? (trap-error (getp  Class slots) (/. E false))))  

(define create-class
  Class SuperClasses Slots ->
      (let SuperSlots (mapcan (function instance) SuperClasses)
           ClassSlots (append Slots SuperSlots)
           Create (putp Class slots ClassSlots) \\ property slots: list
	   Paren (putp Class parents SuperClasses) \\ super i e parents
	   Name (putp Class class-name Class) \\ her name
           Class))

\\ instance creates an instance of the class,
\\ which is a list of lists

(define instance
  Class -> (getp  Class slots))

\\ assign assigns the value of a slot of an instance
  
(define assign
  [[Attribute | _] | Slots] Attribute Value ->
      [[Attribute Value] | Slots]
  [Slot | Slots] Attribute Value ->
      [Slot | (assign Slots Attribute Value)])

\\ Call: (cl-slots classname)

(define cl-slots
    Class -> (getp Class slots))

(define cl-parents
    Class -> (getp Class parents))

(define cl-name
    Class -> (getp Class class-name))


\\ Call: (set my-instance (make-instance object))
\\ Returns the class object which is the representation of the
\\ class instance

(define make-instance
    Class ->
    (let
        Ignore (putp
	           Class
		   instanceSlots
		   (instance (value Class)))
	Class))

\\ Call: (iget (value my-instance) slot-name)

(define iget
    InstanceName SlotName ->
    (head (tail (head (assoc SlotName
                             (getp  InstanceName instanceSlots))))))

\\ Call: (iput (value my-instance) slot-name value)

(define iput
    InstanceName SlotName Val ->
    (let
        Lst (getp  InstanceName instanceSlots)
	NewLst (assign Lst SlotName Val)
	(putp InstanceName instanceSlots NewLst)))

\*

object is the common superclass of all objects.  The class object is
its own superclass, ie. parent AJY 2018-04-18

*\

(do
    (putp object slots [])
    (putp object parents [object]) \\ super i e parents: her own super
    (putp object class-name object) \\ her name
    [])

)

Add Dockerfile

  • Add a Dockerfile to the repo root that copy Linux SBCL build into container.
    • Can be based on small alpine image
    • Can host different image for each release of each port
    • Could also just refer to shen-cl build as shen as that's the most widely used one
    • Just shen-cl for now?
  • Make shen organization on DockerHub, name is still available

Publicly hosted docker image would allow one to start working with Shen by running:

docker run -it --rm shen/shen:latest

shen-clisp fails to start on OSX when using the generated binary

It fails with this error: module 'syscalls' requires package OS.

But loading the generated shen.mem file works fine.

Something I noticed is that the generated shen binary's size is 7MB, while the lisp.run binary (that the 33KB clisp one seems to call) I have in my system is just 2.9MB in size.

After investigating a bit more, I found that the "OS" package is just an alias to the "POSIX" package. Also that when an image is saved, by default the packages listed in CUSTOM:*SYSTEM-PACKAGE-LIST* are saved with the image. I checked what that list looks like on my system and "POSIX" is in there:

("REGEXP" "POSIX" "I18N" "EXPORTING" "CS-COMMON-LISP" "SYSTEM" "COMMON-LISP" "EXT" "GRAY" "CHARSET" "CLOS" "SOCKET" "GSTREAM" "SCREEN")```

I haven't figured out what the problem is yet, what I have described is what I found so far.

Add Support for ASDF, Quicklisp

As mentioned in #25 by @Drainful, we should look at adding support for ASDF and maybe Quicklisp.

The current design of the source code is only suited for building a binary. Many programs (perhaps most programs?) using Shen won't want to be built on a Shen foundation and would rather be build on a native CL foundation that hosts components built with Shen.

I also think having a library distribution that supports all major Common Lisp implementations would be better than the way it's set up now, where the Makefile is generating binaries for every platform. Having it in library form as shen.lisp and just a single SBCL prebuilt binary would make more sense.

Ideally, one could add Shen to an existing CL project with a Quicklisp command.

On windows source-release creates a zip without a subdirectory.

This is what is being done right now:

$(PS) "Compress-Archive -Force -DestinationPath release\\$(SourceReleaseName)$(ArchiveSuffix) -LiteralPath src, assets, Makefile, boot.lsp, bootstrap.lsp, build.lsp, LICENSE.txt, README.md, CHANGELOG.md, INTEROP.md, PREREQUISITES.md"

But this leaves everything at the root of the zip. Has to be fixed before the next release (for the current one I just made a zip on my computer and uploaded that)

The Shen CLOS, and the Shen/LISP interface

I have been planning an object oriented capability for Shen.

One way to do this, which seems very good, would be to import the
CLOS, id est the Common LISP Object System, of the underlying LISP to
Shen, exemplaris gratis by using the (lisp.defun...) capability.

But there are problems.

The first one to mention is that this would break the universal
portability of Shen to multiple language environments.

Another problem is that the Shen does not understand the LISP keyword
symbols, beginning with the : character.

Shen, copyright (C) 2010-2015 Mark Tarver
www.shenlanguage.org, Shen 21
running under Common Lisp, implementation: SBCL
port 2.2 ported by Mark Tarver


(0-) :symbol
:
symbol

(1-)

More problems will occur if one tries this one:

[File clos.demo.shen]

\\ CLOS Shen AJY 2018-05-20

(defmacro setf-macro
    [setf Form Val] ->
        [lisp.setf Form Val])

(defmacro defclass-macro
    [defclass ClassName Superclasses ListOfSlots]
    ->
    [lisp.defclass ClassName
		   Superclasses
		   ListOfSlots])

(defmacro make-instance-macro
    [make-instance ClassName] ->
        [lisp.make-instance ClassName])

(defmacro defmethod-macro
    [defmethod ClassName ArgumentList MethodCode]
    ->
        [lisp.defmethod
	    ClassName
	    ArgumentList
	    MethodCode])

\*

Demo

Winston-Horn: LISP, 3rd Edition ISBN 0-201-08319-1
Addison-Wesley 1993

Examples pp. 183--205

*\

(defclass article []
  [[title :accessor article-title :initarg nil]
   [author :accessor article-author]])

(defclass computer-article [article])

(defclass business-article [article])

(defclass political-article [article])

This will happen:

Shen, copyright (C) 2010-2015 Mark Tarver
www.shenlanguage.org, Shen 21
running under Common Lisp, implementation: SBCL
port 2.2 ported by Mark Tarver


(0-) (load "clos.demo.shen")
setf-macro
defclass-macro
make-instance-macro
defmethod-macro
The function COMMON-LISP-USER::defclass is undefined.

(1-)

The (lisp.defclass...) function will look for the (defclass...)
function from the COMMON-LISP-USER package, whereas the defclass is
in the #<PACKAGE "COMMON-LISP"> package.

The main point of this entry is actually not the Shen CLOS, but the
usability of the Shen/LISP interface (lisp.defclass...) style.

yours, AJY
Finland, the EU

Fully standalone Shen/SCBL binary for Linux (with Nix or Guix)

Non-FHS compliant operating systems like Nix and Guix won't be able to run the SBCL binary as is since the linker and the zlib library are not in /usr...

After patching the binary with patchelf, I get the following error:

> ./shen-cl-v3.0.3-linux-prebuilt/shen
fatal error encountered in SBCL pid 26743(tid 140737350383424):
can't find core file at /usr//lib/sbcl//sbcl.core

If I recall correctly, the error message is misleading and caused by the patchelf trick.

If you want to distribute a truly standalone binary, consider using guix pack -RR. This is what I do for https://next.atlas.engineer. It works on all GNU/Linux distributions.

Ideally, we would not need a binary to build Shen and bootstrap it from source completely.

Add Support For ABCL

It would be nice to have the roadblocks laid out here so that if someone wanted to -- or as I get enough experience to -- add ABCL support, it could be referenced here. Any thoughts/suggestions you could share @tizoc?

Bootstrapping?

According to the readme, an existing Shen binary is required to build Shen.
How can we boostrap Shen then? Is there an older version that can build without Shen?

Boostrapping is important to avoid the Thompson compiler attack.

Get repo set up on Travis-CI

@tizoc When you have a minute, could you get this repo set up on Travis-CI?

There's an included .travis.yml file which I imagine will work, but if not, I can get it building. I just can't configure anything on travis.

Changes required for Shen 21.0

List of changes:

  • add (import-kl "dict") after the "sys" load in boot.lsp. Should there be an if so that it only happens for versions >= 21?
  • rename exit to something else? (it is not part of the kernel anymore)
  • rename read-char-code to shen.read-char-code.

I think thats all is needed, haven't found anything else so far.

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.