freenode/#sicl - IRC Chatlog
Search
6:26:36
beach
This time it was Emacs suddenly taking nearly 100% of the CPU and none of my Emacs windows were refreshed. It went on for several minutes, and I finally decided to restart.
6:27:24
beach
Other times it has been Xorg basically grinding my computer to a halt. I am guessing because it is leaking memory.
6:28:03
no-defun-allowed
I've had weird race (possibly) conditions running some code in the REPL and M-dotting some other function while I wait, which end up in Emacs halting.
6:28:09
beach
And Firefox that does an automatic update, but does not preserve (it can't) the workspace of each window, so when it comes back, the windows are all in one workspace.
6:30:04
no-defun-allowed
Yeah, Firefox also weirds out sometimes, but it's usually it crashing for no reason and the "Please restart Firefox now that you updated it" messages.
6:34:21
no-defun-allowed
Do you remember what the first free Common Lisp implementation was, and when it was released?
6:35:55
beach
So there must have been a time when there were several partial implementations, and of CLtL1 at the time.
6:35:56
jackdaniel
(I remember when I was making the CL implementation graph, I've memorized some of such information)
6:36:50
no-defun-allowed
Firefox was released in 2002, Mozilla 1998, Netscape 1994. My guess is someone didn't want to rewrite all that browser stuff in a higher language at some point (or to update the browser for new standards).
6:38:08
beach
Well, they are programming C++ which changes all the time. They could have used Franz Lisp and then followed evolution to CLtL1 and then CLtL2.
6:40:11
jackdaniel
thank you; the grand plan was more ambitious, I've planned to attach some historical notes to each node (like an original release year, origination etc) but I've never got to that
6:40:32
no-defun-allowed
Then I'm not sure why it could have been, since the CMUCL/SPICE compiler is pretty decent. Maybe something to do with image or memory size.
6:40:50
jackdaniel
also over time some people pointed out small inaccuracies (but only related to obsolete platforms about which I had very little info, like lisp-to-c)
6:42:01
jackdaniel
no-defun-allowed: common lisp (especially in early '90) was not very fast from what I've read. or, to be more accurate, it was very easy to write non-performant code while writing performnat code required intimate knowledge about the compiler
6:42:47
jackdaniel
add garbage-collection-phobia to that (because people didn't like stop-the-world pauses, what was more frequent on 128MB RAM machines) and there you have it
6:43:11
jackdaniel
C++ was by these metrics better choice (not to mention it was less messy language than it is today)
6:45:11
beach
So, software written more than (say) 25 years ago would not have a sufficiently good Lisp implementation available.
6:46:19
beach
And of course, it is not the case that people instantly realize that suddenly such an implementation is available, so inertia can account for another 10 years of C or C++.
6:46:19
jackdaniel
that, and the hardware was not performant enough, I'm sure even if we take today SBCL and put it on PC from that time same issues would arise
6:46:56
jackdaniel
the best indicator that "hardware is good enough" now is the fact that people write complex software with a very suboptimal (performance-wise) language like javascript
6:51:26
no-defun-allowed
(One other quirk is that I would expect that the tabs run in independent threads, but something strange happens and if I have a video playing and reload another bloated page, the video skips 200ms or so.)
6:51:27
jackdaniel
that's a nice turnaround compared to the rotten mood remarks from time to time :)
6:51:48
jackdaniel
that said I'll get back to the medium protocol documentation (from the backend writer perspective)
6:53:25
jackdaniel
I will brag a little while I'm here: I plan to make a console-medium which renders to the character cells (and to have bezier rendering and such on the medium too)
6:54:19
jackdaniel
and there is that: https://files.mastodon.social/media_attachments/files/018/554/072/small/b580c24032c9c573.png
6:55:36
jackdaniel
(motivation is as follows: console medium is an oddball enough for documenting mediums that we'll cover plenty of edge cases which are important when implementing medium)
6:57:27
beach
So I think that, with a decent development environment (for which we have certain components and a plan for the others), and a few killer applications (Climaxima is one, and I hope Clovetree can become another one), we have a good basis for claiming that Common Lisp can be used for many things, in particular for developing end-user applications.
7:00:33
jackdaniel
no-defun-allowed: n.b, gimp is a nice case study. it was originally started with CL and then they have switched to c++. afaik Xach was involved in gimp community at that time and he might have some interesting remarks
7:00:54
jackdaniel
there is a document *somewhere* where gimp authors provide a rationale why they have switched
7:10:50
jackdaniel
this may be a good start: https://docs.gimp.org/2.8/en/gimp-introduction-history.html I remember reading also explanation from authors, but I have no memory where I did find it
14:44:59
beach
In section 26.4 of the SICL specification, I describe how different dynamic-environment entries are represented on the stack.
14:47:36
beach
First, I have a type code for different entries, but I think I will just make the entries into ordinary SICL general instances, i.e. with a header and a rack. They can still be stored in the stack, but that would just be with the same mechanism as any other object with dynamic extent.
14:48:24
beach
Second, I am thinking of using an ordinary list for the dynamic environment, so that there would be an additional CONS cell as well.
14:50:34
beach
Third, I mention changing the time stamp to 0 to invalidate an entry, but I am now thinking I should add a VALID-P field. Then, better error messages can be emitted. Currently, there is no way to distinguish between a non-existing entry and an existing entry that has been invalidated.
14:59:52
beach
3. The entry does not exist, meaning that an attempt is made to use it after it was completely removed.
15:00:25
beach
If I alter the time stamp (which determines the identity of the entry), I can't distinguish between 2 and 3.
15:02:45
beach
By having a different slot for validity, I can correctly identify situation 2 because of the time stamp, but it can't be used because it has been invalidated.
15:06:36
beach
I am proposing this change so that I have a more uniform representation of all objects, and so that it will be possible to allocate the dynamic environment entries on the heap, at least initially, to facilitate debugging and such.