4 ms·
I have never used a Lisp Machine so forgive my naivety but I saw the demo and you seem to be referring to the ability of displaying images inline in a buffer. E
by abhirag 9y ago
I have never used a Lisp Machine so forgive my naivety but I saw the demo and you seem to be referring to the ability of displaying images inline in a buffer. Emacs can definitely do that, I have used Emacs IPython Notebook[1] which is a REPL supporting this. I could fire up a jupyter notebook and use pillow[2] to recreate the image manipulation part of the demo.
[1] -- (https://github.com/millejoh/emacs-ipython-notebook/blob/master/README.rst https://github.com/millejoh/emacs-ipython-notebook/blob/mast...)
[2] -- (https://python-pillow.org/ https://python-pillow.org/)
- pjmlp 9y agoThat is partially what I was referring to. The other part, which might not be visible on that video is the integration of debugger into the REPL, and the ability to redo a piece of code after breaking into the debugger and fixing it. So you can do something like, REPL => error (ask to start debugger) => track down and fix error => restart error expression => finish the execution of the original REPL expression with the respective result.
- abhirag 9y agoThe only debugging experience I find enjoyable in Emacs is debugging Clojure using cider[1] and I think it comes close to what you are describing but I think you might already be aware of that :) [1] -- (https://github.com/clojure-emacs/cider/blob/master/doc/debugging.md https://github.com/clojure-emacs/cider/blob/master/doc/debug...)
- bitwize 9y agoSLIME doesn't give you this?
- pjmlp 9y agoI don't know, back when I cared about Lisp development on Emacs, SLIME wasn't a thing, as you might understand from my XEmacs reference.
- juki 9y agoSLIME does let you redefine functions and restart a stack frame (assuming the Lisp implementation supports that). You can even do it without using Emacs/SLIME, although that's not very convenient of course. A silly example with SBCL, ~ $ rlwrap sbcl --noinform CL-USER> (defun foobar (x y) (if (evenp x) (/ x y) (* x y))) FOOBAR CL-USER> (foobar 10 0) debugger invoked on a DIVISION-BY-ZERO in thread #<THREAD "main thread" RUNNING {1001BB64C3}>: arithmetic error DIVISION-BY-ZERO signalled Operation was /, operands (10 0). Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL. restarts (invokable by number or by possibly-abbreviated name): 0: [ABORT] Exit debugger, returning to top level. (SB-KERNEL::INTEGER-/-INTEGER 10 0) 0] backtrace 3 Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1001BB64C3}> 0: (SB-KERNEL::INTEGER-/-INTEGER 10 0) 1: (FOOBAR 10 0) 2: (SB-INT:SIMPLE-EVAL-IN-LEXENV (FOOBAR 10 0) #<NULL-LEXENV>) 0] down (FOOBAR 10 0) 1] source 1 (IF (EVENP X) (#:***HERE*** (/ X Y)) (* X Y)) 1] (defun foobar (x y) (if (and (evenp x) (not (zerop y))) (/ x y) (* x y))) WARNING: redefining COMMON-LISP-USER::FOOBAR in DEFUN FOOBAR 1] restart-frame 0
- pjmlp 9y agoThanks for the example.