IRC channel logs
2024-09-06.log
back to list of logs
<dpk>the prefixing is not because of lack of namespacing (which is universally supported now) but because Scheme is monomorphic <dpk>or, indeed, because we don’t put import other libraries with single names whose exports you access through some kind of dot syntax or whatever, but if you don’t like that you can do a prefixing import <robin>not just monomorphism imo; you wouldn't want to coalesce null? and json-null? into a generic function even where it's possible, i'd think <flatwhatson>also in the case of json->scheme, a distinctly typed json-null is necessary, as scheme doesn't have a null like that. if you chose scheme's '() (aka null), you couldn't differentiate nulls from empty lists. if you chose scheme's #f, you couldn't differentiate nulls from booleans <robin>guile does have a lispy #nil, but that's one case where you do want some amount of non-differentiability (i'm not yet convinced it'll be adequate for lisp interoperability, but it's an interesting compromise) <robin>(for guile-elisp and later other dialects; guile-emacs is being rebased and resurrected atm, with three volunteers so far) <dthompson>we're trying to get into the habit of holding community video calls to discuss and help people with all things spritely. <dthompson>the first one is on the 18th. join if you can. pre-registration is an open but our office hours are an open door. drop by if you want to hang out or ask a question. :) <robin>flatwhatson, want to be on my list for people to ping when there's more to say? (nothing too interesting til i debug the rebase) <dthompson>robin: cool to hear that guile-emacs lives again <robin>dthompson, thanks :) it's been hibernating for far too long <dthompson>curious how the various "advancements" emacs has made will be dealt with <robin>me too :p (though most c-side things have obvious guile equivalents) <dthompson>they introduced some kind of concurrency thing awhile ago right? <robin>yes, it has veeery basic thread support now. plus bignums, record/struct types, nativecomp, a few extra features along those lines <robin>very cool to hear that hoot's getting real eval support soon <dthompson>you may want to keep an eye on this channel tomorrow then <robin>oh, before saturday? that's when wingo's presenting at icfp iirc <robin>oh, that *would* be tomorrow locally, 3am EST :) <dthompson>weary-traveler: it's on the roadmap, nothing to report yet. gonna have to get written sooner or later, though. <dthompson>robin: yeah we'd like to have a little something to share before andy's keynote <dthompson>the talk is on saturday and yeah, it will be 3am here on the US east coast. <dthompson>I plan to watch the stream replay later in the day. 3am is too early for me. <jmes>Oooo, guile-emacs lives? Yippee! <jmes>I've been toying with some guile code to replace/improve org-tables (just for fun), but something like it have a place in guile-emacs later on. <jmes>Also spritely office hours sounds fun. I think I can make it to listen in :) <dpk>robin: i proposed standardizing Guile’s #nil for JSON and SQL interop, but others were not impressed – 'null it shall be <jfred>I hope I can make it to the first office hours, it's in the middle of my workday so depends on whether or not I have overlapping meetings <jfred>but would be fun to hang out and listen in <jfred>if only I could convince folks at work to try out spritely tools so it could be actually a work thing :P but lol, big companies like boring tech <dthompson>jfred: lol yeah I'd say we are a long way from mainstream <dthompson>it would be great if you can attend office hours, but no worries if you can't. maybe we can do a future meeting at a different time <jfred>looks like I don't have a meeting scheduled for that time yet so I've blocked it off on my calendar haha <jfred>I think I'll have to write something goblins-y that might be useful for my particular workplace before I have a chance at getting folks here interested <jfred>which is actually part of why I was working on that horton implementation a while back, but that's low-level building blocks and I need to layer higher-level stuff on top of it <dthompson>oops, seems our temp macro expander recognizes procedure definition syntax but not the regular variable definition syntax. >.< we'll fix for next time! <dthompson>might try to fix that real quick, though we can put all the blame on wingo ;) <dpk>who among us has not made a silly mistake like that before pushing our code :D <dpk>apropos a real macro expander for Hoot, next week i hope we will *finally* have a release of the R7RS Large fascicle on macros <dpk>just mentioning it :D since it includes my favourite new feature in all of R7RS Large (identifier properties) :D <dthompson>dpk: I look forward to reading about identifier properties. <dpk>i get a syntax error when evaluating ((lambda (x) (x x)) (lambda (x) (x x))) <dpk>ACTION tries (let loop () (loop)) instead … great, a new way to make a browser tab hang <dthompson>I expected people to break it instantly but wanted to share anyway :) <dpk>it would surely already be among the top entries on the leaderboard. the main reason it would lose points would likely be failing benchmarks due to not supporting this or that feature needed by some of them <dthompson>dpk: I have a fork for that repo where I've been testing. at one point I had 56/57 tests passing, but we seem to have regressed a bit lately and now only 53 or 54 pass. I believe all the failures are due to timeouts, though, not missing support. <dthompson>we even pass some tests that the guile vm fails <dthompson>however, for the most part, I don't think hoot will benchmark very favorably compared to other implementations. this is due to a mix of things, but mostly due to limitations in webassembly <dthompson>but every now and then a benchmark will be like 4x faster than the guile vm for me... idk lol <dthompson>we haven't spent really any time on performance optimization, we've been more focused on correctness, so I think we're leaving plenty of opportunity on the floor right now <dthompson>we know that our partial evaluation pass is leaving low hanging fruit behind <dthompson>but anyway, if you use node 22 you can run the benchmarks on hoot <dpk>it would be useful for me to have a REPL command or a procedure or something to be able to inspect the output of the partial evaluator and other optimizers! <dpk>like ,optimize in Guile and expand/optimize in Chez and Loko <dthompson>yeah I'd like more insight here, too. we have --dump-tree-il which will show the results of peval <dthompson>and --dump-cps, but that's the result of all the cps passes so not helpful if you're interested in a specific one <dpk>mostly, so far, i’ve been looking at ,optimize in Guile and expand/optimize in Chez, because those are the only implementations that both run on my own computer and actually have a way to view the output of their optimization passes run on Scheme code <dpk>however, this is like developing an impression of how good the average rugby player is at conversions by counting how often Jonny Wilkinson and and Owen Farrell get their kicks between the bars <dthompson>guile does very little optimization at the tree-il level like constant folding and stuff. I always look at ,x output when I want to make sure a match is compiling the way I hope it is. <dpk>Chibi technically has an optimize procedure in (chibi ast), but it does almost nothing (which is part of why Chibi is slower on ecraven’s benchmarks even than tree-walking interpreters like s7 – they’re ‘fast’ despite a slow implementation strategy because their standard libraries are mostly C, whereas Chibi’s standard library is mostly Scheme and it doesn’t optimize it very well) <dthompson>ah yeah, I noticed that s7 performs surprisingly well. makes sense that it's mostly C. <dthompson>in the most recent game jam I saw a noticeable uptick in s7 usage. s7 + raylib in particular. <dthompson>I'm interested in maximizing the use of scheme rather than having a ton of c with a sprinkling of scheme as a "scripting" language <dthompson>but can't deny that they achieved scheme web deployment very cheaply compared to us <dpk>huh, i didn’t know s7 ran in the browser <dthompson>since it's a c program you compile with emscripten <dpk>ah, same as Chibi in the browser <dpk>assuming Hoot’s expander gets identifier properties (hint, hint) i want to make a page like that showing the expansion from extensible-match and a visualization of the decision tree, so people can see that it’s just as fast or faster than if they’d written a load of ifs and conds themselves <dpk>side note: if anyone knows any infamously complex patterns used in real pattern matching code, please let me know so i can add them to a suite of ‘torture tests’ for my optimizer :-) <dpk>i already have Okasaki’s red-black tree balancing function and the virtual machine interpreter from Maranget’s paper on compiling good decision trees <dthompson>if I run across one I'll let you know. I use pattern matching all the time but I don't know if I have anything particularly brutal <larry_schemer>is it possible to port elisp pcase to guile? It is already almost accessible through guile-elisp <dpk>larry_schemer: see extensible-match, above <dpk>which will work on Guile soon, i hope <dpk>it’s not pcase itself but it’s the same functionality, and hygienic :-)