I’m focusing on something highly specific right now: a dirty, hack-riddled attempt at turning python into a usable live-programming environment. This is a far cry from my general interest of building an OS ( or “operating environment” ) which effectively has a reflective understanding of its own internals, programming language and operations.
This splits into many sub-problems; so the one I’m primarily fascinated by is how to construct a programming language that a computer not only can execute but understands the semantics of in various dimensions and at varying conceptual levels ( hence creating potential for manipulating the machine at using abstract concepts that are not necessarily rigorously defined beforehand ).
For one thing I need to be able to run it on on a server without x-windows on it; so I need to be able to change code on my own machine, have a script upload it to the remote server and update the running code without halting any running processes. I also need the input source code to be transformed so every variable assignment, function-call or generator call is wrapped in a logging function which can be switched on or off, and for the output of the logs to be viewable by something basically resembling an Excel spreadsheet, where rows and columns can be filtered out according to the source and nature of the logging message; so I can examine the operational trace of a complex running program to find the source of a bug without having to manually write logging statements and try/except blocks throughout the whole system. I don’t know to what extent Jupyter’s feature-set intersects with what I need but when I checked it out it seemed to be basically browser-based.
“Something like a Smalltalk environment”—yes. Pharo looks a lot like what I would want and I have toyed with it slightly.
Lively Kernel is a Smalltalk-like environment that runs in the browser. It might be better for that server-side stuff than normal Smalltalk.
Unfortunately, it’s written in JavaScript, which is not a good language, but I think it can also compile ClojureScript, which is much better. Cloxp is a related project that’s more Clojure-based.
Amber Smalltalk also runs in-browser. The maintainer has kind of gone off in a weird direction, but it still works. PharoJS was supposed to be an alternative with a different approach, but I’m not sure if it was ever completed.
Emacs is the closest Lisp has to a Smalltalk environment. There are emacsen written in other lisps, like EdWin and Hemlock. These can be run in a terminal over ssh.
update the running code without halting any running processes
That’s more a function of the way you code up the running processes and less a function of the language involved, but I suspect that systems where a language can be combined with, essentially, a VM and an OS (LISP, Smalltalk) can make that a lot easier. Wrangling Python to become LISP is going to be… quite an exercise.
But if all you need is to change the values of some variables and/or what some functions so, that looks doable.
wrapped in a logging function
So basically you want to run your code inside a debugger?
That’s more of a function of the way you code up the running processes
Well not necessarily, depending on what kind of transforms you can apply to the source before feeding it to the interpreter, and the degree of fuss you’re willing to put up with in terms of defining global functions with special names to handle resurrection of state and so on.
Python wasn’t picked specifically because it’s ideal for doing this kind of thing but just because it’s easy for hacking prototypes together and useful for many things. At the risk of overstating my progress—some of the things that seemed to me like they would be the most difficult do now work at some level.
want to run your code inside a debugger
I want the option to do that if I want to. There’s no reason it has to be done that way if the overhead added seems to be excessive. It’s also a case of being able to specify the degree to which it’s running in a debugger ( in otherwords the level of resolution of the logs ).
I am also interested in that. I’m interested if you are trying to solve a single problem or whether you are trying to do something more general.
I’m focusing on something highly specific right now: a dirty, hack-riddled attempt at turning python into a usable live-programming environment. This is a far cry from my general interest of building an OS ( or “operating environment” ) which effectively has a reflective understanding of its own internals, programming language and operations.
This splits into many sub-problems; so the one I’m primarily fascinated by is how to construct a programming language that a computer not only can execute but understands the semantics of in various dimensions and at varying conceptual levels ( hence creating potential for manipulating the machine at using abstract concepts that are not necessarily rigorously defined beforehand ).
Better than ipython/Jupyter in which way?
Something like a Smalltalk environment?
For one thing I need to be able to run it on on a server without x-windows on it; so I need to be able to change code on my own machine, have a script upload it to the remote server and update the running code without halting any running processes. I also need the input source code to be transformed so every variable assignment, function-call or generator call is wrapped in a logging function which can be switched on or off, and for the output of the logs to be viewable by something basically resembling an Excel spreadsheet, where rows and columns can be filtered out according to the source and nature of the logging message; so I can examine the operational trace of a complex running program to find the source of a bug without having to manually write logging statements and try/except blocks throughout the whole system. I don’t know to what extent Jupyter’s feature-set intersects with what I need but when I checked it out it seemed to be basically browser-based.
“Something like a Smalltalk environment”—yes. Pharo looks a lot like what I would want and I have toyed with it slightly.
Lively Kernel is a Smalltalk-like environment that runs in the browser. It might be better for that server-side stuff than normal Smalltalk.
Unfortunately, it’s written in JavaScript, which is not a good language, but I think it can also compile ClojureScript, which is much better. Cloxp is a related project that’s more Clojure-based.
Amber Smalltalk also runs in-browser. The maintainer has kind of gone off in a weird direction, but it still works. PharoJS was supposed to be an alternative with a different approach, but I’m not sure if it was ever completed.
Emacs is the closest Lisp has to a Smalltalk environment. There are emacsen written in other lisps, like EdWin and Hemlock. These can be run in a terminal over ssh.
Sounds like you need to look into erlang.
That’s more a function of the way you code up the running processes and less a function of the language involved, but I suspect that systems where a language can be combined with, essentially, a VM and an OS (LISP, Smalltalk) can make that a lot easier. Wrangling Python to become LISP is going to be… quite an exercise.
But if all you need is to change the values of some variables and/or what some functions so, that looks doable.
So basically you want to run your code inside a debugger?
Well not necessarily, depending on what kind of transforms you can apply to the source before feeding it to the interpreter, and the degree of fuss you’re willing to put up with in terms of defining global functions with special names to handle resurrection of state and so on.
Python wasn’t picked specifically because it’s ideal for doing this kind of thing but just because it’s easy for hacking prototypes together and useful for many things. At the risk of overstating my progress—some of the things that seemed to me like they would be the most difficult do now work at some level.
I want the option to do that if I want to. There’s no reason it has to be done that way if the overhead added seems to be excessive. It’s also a case of being able to specify the degree to which it’s running in a debugger ( in otherwords the level of resolution of the logs ).
Edit: lighttable is also very close to what I would consider a good operating environment.