Fork of maxima for make it more embeddable.



1. Yes, I know, it is next step to isolate maxima thread. May be
redefining function, disabling common lisp mode...
2. I protect global variables by "let" form. But there are so many
global variables, and I will think about how can I do it by one silver
bullet.

You are right, I need "sandbox" in my lisp process. Another example,
server solution powered by lisp also needs it (e.g. hunchentoot, for
its worker-threads, that processes http requests).

Anyway web UI for maxima can not replace desktop UI (wxMaxima,
xmaxima, emacs-modes), and I am searching for task, that "online
maxima" can solve, may be online plotting.

Nowadays asdf and quicklisp become de-facto standard for distributing
common lisp application in opensource community, and I think maxima is
good addition in quicklisp repository. Also it will become simpler
deploying process in win*, mac*, (e.g.:
download sbcl
sbcl
(ql:quickload :maxima)
(save-lisp-and-die (lambda() (cl-user::run)))

Some non-mathematical parts of maxima can be replaced by analogs from
quicklisp repos. I did it for fortran to cl compiler. In future it
will be nice using external-programm for gnuplot communication.

2011/12/22 Richard Fateman <fateman at eecs.berkeley.edu>:
> There are a number of issues that you don't mention. Perhaps you have
> taken care of them?
>
> 1. Security. Anyone running Maxima on your server can run arbitrary lisp
> programs
> with access to whatever resources the server has. ?For example, writing or
> deleting files,
> or allocation huge amounts of memory.
>
> 2. Depending on how SBCL handles multiple users and global variables, they
> may
> interfere with each other.
>
> The most appealing solution to these problems is to run some kind of virtual
> machine.
> RJF
>
>
> On 12/21/2011 10:38 PM, Michael Filonenko wrote:
>>
>> Hello;
>>
>> I try to do web interface for maxima. Web interface must be multiuser.
>> First time I used maxima process per user. But sbcl runtime make big
>> overhead.
>> Second time my web application (hunchentoot&restas stack) load maxima
>> using mk:defsystem and make maxima repl thread per user. Every time I
>> update sbcl, I need to recompile maxima manually. Also, I daemonize my
>> application and I need to control binary-output paths. This are the
>> reasons
>> I chose asdf. Also asdf is supported by quicklisp - the most powerful
>> common
>> lisp package manager.
>> I forked maxima and refactor it to make more embeddable into another
>> common lisp application.
>>
>> Here it is git repo:
>> https://github.com/filonenko-mikhail/maxima
>>
>> Changes
>>
>> ? remove all mk:defsystem
>> ? remove archive/
>> ? create full asdf package (main package, share fortran packages)
>> ? refactor file system
>> ? refactor set-pathnames function
>> ? add fortran libraries on-fly compiling (thanks to f2cl/packages/*asd)
>> ? move quadpack from slatec to standalone package
>>
>> USING
>>
>> ? git clone git://github.com/filonenko-mikhail/maxima.git
>> ? cd maxima
>> ? (pushnew "/path/to/maxima/" asdf:*central-registry*)
>> ? (ql:quickload :maxima)
>> ? (cl-user::run)
>> ? ? run_testsuite();
>>
>> You can use this version with restmax web repl for maxima:
>> https://github.com/filonenko-mikhail/restmax
>>
>> Sometimes you can see web repl here: http://asvil.dyndns.info
>>
>



-- 
With best regards, Michael Filonenko