Forked newLISP – Meet Rebel

Started by ufko, November 15, 2025, 04:43:59 AM

Previous topic - Next topic

ufko

Hi guys,

I've forked newLISP 10.7.6 and made a few targeted changes:

    Removed compiler warnings
    Fixed or double-checked known bugs from the forum
    Refactored some internal structures for clarity
    Renamed files to match the new project name Rebel
    On BSD platforms, rebel-math.c now uses arc4random() for random numbers

Reasons for the fork, refactor, and renaming:

    Clear project identity 
    Wider adoption if it's not called newLISP 
    Less hate and flamewars 
    End of endless comparisons with LISP 
    Lutz had revolutionary thinking and was a rebel in his own way 
    Independence of development and ability to make internal changes 
    Better communication with new users 
    Motivation for contributors 
    Clear distinction for documentation, tutorials, and community

Just like most users, for example, don't perceive Clojure as a "new Lisp" but as a language with Lisp-like syntax that integrates smoothly into the JVM world, Rebel can be perceived similarly, as a Lisp-like tool that integrates smoothly with the C world.

It now runs cleanly on OpenBSD 7.8, 64-bit, UTF-8, with libffi support.

⚡gringo ~/me/c/rebel/src $: make
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-symbol.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-math.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-list.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-liststr.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-string.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-filesys.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-sock.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-import.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-xml-json.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-web.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-matrix.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-debug.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI rebel-utf8.c
cc -m64 -Wall -fno-strict-aliasing -O2 -c -g  -I/usr/local/include -DREADLINE -DREBEL64 -DSUPPORT_UTF8 -D_BSD -DFFI pcre.c
cc rebel.o  rebel-symbol.o  rebel-math.o  rebel-list.o  rebel-liststr.o  rebel-string.o  rebel-filesys.o  rebel-sock.o  rebel-import.o  rebel-xml-json.o  rebel-web.o  rebel-matrix.o  rebel-debl
ld: warning: rebel-web.c:1389(rebel-web.o:(handleHTTPcgi)): warning: random() may return deterministic values, is that what you want?
strip rebel

⚡gringo ~ $: rebel -n
rebeL v.0.1 64-bit on BSD IPv4/6 UTF-8 libffi, options: rebel -h

>

Functionality remains fully compatible with newLISP.

If you edit your Makefile contents, it should compile without problems.

I've bought the domain
https://rebel-lang.org

I've created an empty GitHub organization at
github.com/rebellang

For now, the repository is hosted under my account:
https://github.com/ufko-org/rebel

I fully respect GPL3 and Lutz's copyright.
Everyone is welcome to test the code.
Everyone is welcome to provide feedback, and share suggestions here in the forum for now.

And so I don't forget: scripts have the .rbl extension... Surprisingly 😄

Cheers, Ufko

itistoday

Woah this is awesome! Congrats Ufko! I'm excited to see where this goes, please keep us posted of updates!
Get your Objective newLISP groove on.

ufko

Thank you for your kind words, itistoday :)

Rebel runs on OpenBSD 7.8 and Ubuntu Linux.
For Linux test builds, I use GitHub Actions
(https://github.com/ufko-org/rebel/actions)
because I don't have a Linux machine.

I would appreciate it if someone could test it
on a real Linux machine and report the results:

1. Clone the repo
2. cd src
3. Run `make -f Makefile.linux`
4. Start `./rebel`

:)

There are some compiler warnings and notes on Linux,
but I'm working on fixing them.


ufko

#3
OK, Rebel v1.0 is out.

Clean build on OpeBSD 7.8 Lenovo x270
Clean build on Ubuntu Linux using Github Actions

$: rebel
Rebel v.1.0 64-bit on BSD IPv4/6 UTF-8 libffi, options: rebel -h

rebel: /home/ufko/me/c/rebel/src
main >
Buffer/Memory overflow warnings/potential errors eliminated.
Strings truncation warnings eliminated.
Ignored return values eliminated.
No linker warnings.
Lutz's Park & Miller algo in my_random() unused now.
C function random() replaced with arc4random() everywhere.

Build Report HERE

I believe Rebel v1.0 is currently the most stable incarnation of the newLISP codebase.
...

itistoday

Quote from: ufko on November 16, 2025, 09:53:32 AMI believe Rebel v1.0 is currently the most stable incarnation of the newLISP codebase.

That's awesome. Following  8)
Get your Objective newLISP groove on.

itistoday

I'd love to see some improvements to interacting with CLI programs. It's been a long time since I've done this but I remember that newLISP had issues when it came to managing the input / output of running programs, especially when combining piping data in to the program and getting data back out from both stdout and stderr, and handling errors.
Get your Objective newLISP groove on.

ufko

Too bad you don't remember, maybe they're already solved by now :)
I've been using newLISP for a short time and hadn't worked with
any Lisp-like language before, so I'm a newbie, but those parens
really drew me in :D

My priorities are as follows:

1. fix all warnings under strict compilation, e.g., with -Wextra
2. create tests for built-in functions
3. create examples for new users
4. create/modify/rebrand documentation (markdown)