Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EusLisp ver. 10 #493

Draft
wants to merge 388 commits into
base: master
Choose a base branch
from
Draft

EusLisp ver. 10 #493

wants to merge 388 commits into from

Conversation

Affonso-Gui
Copy link
Member

@Affonso-Gui Affonso-Gui commented Aug 11, 2022

This PR sums up over four years of continuous development to make EusLisp a little bit more common while adding crucial features related to condition handling and memory stability.

Comments on the above:

Add an easy way to regress changes and test with different environments

I couldn't find a way to easily enable this directly on the implementation.
Maybe we could add some script to git checkout and make two binaries, eus9.29 and eus10.0, and then link to one of them?

Integrate and automate ansi-tests into the CI

The ansi-test has helped me a lot during debugging the new compiler. I think that integrating this into the pipeline would be nice to have, and https://github.com/Affonso-Gui/ansi-test/tree/eus-handler should be stable enough to handle it (potentially with some minor tweaks).

The changelog is as follows. I have also included some fixes that are not fully backward compatible (refactor section below), so we might need some more discussion on those (potentially reverting some?)

# New features
> Condition Handler
> Fully functional Closures
> Supports supplied-p for &key / &optional arguments
> Allow returns and tagbody on dolist, dotimes, do-symbols
> Allow resetting to previous stacks
> Add name to compiled-code
> Check compiler and compiled version at load-time

> More builtins
  - macrolet fmakunbound cxr *-if *-if-not
  - sys:list-callstack sys:list-all-blocks sys:list-all-tags sys:list-all-function-bindings
> Other minor improvements
  - Catch 0 when loading files from command line
  - Add &optional n in last
  - Allow to use nil as reduce :initial-value
  - Allow null lists at mapc
  - Unlink .o files on 'compile' function
  - Export char functions
  - Supports short float notation
  - Add llib/logger.l
  - Updates to unittest.l engine
  - Add .gitignore (#354)
  - Allow to type-check declared variables on compiled functions

# Bugfix
> Fix segmentation faults and undefined return values
  > 78790863 Fix quotient for one int argument
  > da6904e3 Return T when AND has no arguments
  > ad4b6bf4 Fix logand return value for zero arguments
  > 53431121 Fix * return value for zero arguments
  > e121c42e Avoid segfault on #S() and #J()
  > 2dbcce05 Avoid segfault on 'slot' for non-objects
  > a1f2a390 Avoid segfaults and fix formating in E_NOPACKAGE
  > 8f6d7518 Fix segfaults in get
  > bb26d7d3 Fix segfaults in nbutlast
  > 9a2986de Avoid segmentation faults when copying objects with less than two slots

> Fix memory faults
  > 8149b410 Do not check for unix signals during gc to avoid dead_lock on signal handlers
  > 2183de88 Unwind callframes to avoid memory faults on TAGBODY
  > f62b5ce4 Add eussigobj to shield eussigvec handlers from gc

> Fix locks and irresponsiveness
  > 3074dff0 Check for thread existance in get_free_thread to avoid unnecessary dead locks
  > c1564bb9 Check for interruptions on while loop
  > aaf6352c Add breakck on unix::select
  > Fix hash-table and package symcount (#492)

> Fix other misbehaviors
  > Raise less errors on read_cond (#342)
  > 399506f6 Fix SETELT for array values
  > 6e826f76 Fix &aux compilation when there is &allow-other-keys
  > a6b0f48f Fix: (instance object) is considered as list


# Refactor
> Fix assoc :key behavior (#313) (#436)
> Fix remove/delete/substitute sequence with :end :count (#296)
> Use destructive operations in list-insert and list-delete for 0 index too (#361)
> Raise errors on assert (#363)
> Raise an actual error in the object :error method
> Remove eussig, *signal-handlers*, *error-handler*

> Other minor changes
  > Changes to sys:*gc-hook*, lisp::install-error-handler (still mostly compatible)
  > Return variable name in defconstant
  > Don't overwrite gensym name
  > Prioritize symbol evaluation over function evaluation in the interpreter

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants