I agree with the notion that having multiple passes makes compilers easier to understand and maintain but finding the right number of passes is the real challenge here.
The optimal number of passes/IRs depends heavily on what language is being compiled. Some languages naturally warrant this kind of an architecture that would involve a lot of passes.
Compiling Scheme for instance would naturally entail several passes.
It could look something like the following:
may be a better version of what you propose, depending on what you're looking for. On my system, this also gives me entries from sections like '3x' and '3ossl' and '3bsd'.
Cool. And GNU "info" is a hyperlinked doc viewer system. Some GNU and other projects promote info doc as more authoritative than man pages. Man pages are expanded cheat sheets.
For in-depth doc, I do appreciate docset-based indexed search apps like Dash that can download and update comprehensive doc locally with greater performance and less internet dependency than internet only. There's even vim and nvim plugins to bring that to them too without leaving the terminal.
It does actually have a lot of R7RS support (like #!fold-case) however it doesn't seem to work with polar complex numbers (e.g; 2@1.5) or complex numbers with infnan (e.g; 3+inf.0i or +inf.0+3i).
Author from LispPad here... Polar complex number literals are actually not part of R7RS and (make-polar ...) would need to be used for writing portable code. Complex number literals with infinite parts are supported, but I noticed that LispPad might behave differently as it does apply mathematical equivalences that are being ignored in other Scheme implementations. Let me know if you see a behavior that violates the R7RS spec. Thanks!
Thanks for working on LispPad, I'm really enjoying using it.
> Polar complex number literals are actually not part of R7RS
I actually thought they were part of the spec. Specifically, I am referring to the last paragraph from section 6.2.5 of R7RS small <https://small.r7rs.org/attachment/r7rs.pdf>
This is the excerpt from the pdf:
6.2.5. Syntax of numerical constants
...
There are two notations provided for non-real complex
numbers: the rectangular notation a+bi, where a is the
real part and b is the imaginary part; and the polar no-
tation r@θ, where r is the magnitude and θ is the phase
(angle) in radians. These are related by the equation
a + bi = r cos θ + (r sin θ)i. All of a, b, r , and θ are real
numbers.
I'm sure this is really smart but boy is this a pain to read. I even tried holding the orbs in hopes of reading the text but it kept reflowing so much that I gave up after 5 minutes.
Edit: I just realized that clicking once freezes the orbs.
I was clicking and clicking hoping for the reflow madness to stop.
Thanks for this tip -- BTW we need to click _each_ orb.
Occationally a previously untamed orb will start making its presence known until it is stopped. OK I think I have been able to catch every orb now. Now onto read about the future of text layout.
> I’ve been using Copilot - and more recently Claude - as a sort of “spicy autocomplete” and occasional debugging assistant for some time, but any time I try to get it to do anything remotely clever, it completely shits the bed.
This seems like a really disingenuous statement. If claude can write an entire C compiler that is able to compile the linux kernel, I think it has already surpassed an unimaginable threshold for "cleverness"
The optimal number of passes/IRs depends heavily on what language is being compiled. Some languages naturally warrant this kind of an architecture that would involve a lot of passes.
Compiling Scheme for instance would naturally entail several passes. It could look something like the following:
Lexer -> Parser -> Macro Expander -> Alpha Renaming -> Core AST (Lowering) -> CPS Transform -> Beta / Eta Reduction -> Closure Conversion -> Codegen
reply