HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
oxinabox
MagneticReadHead.jl
HTML2019–2021
oxinabox / MagneticReadHead.jl

MagneticReadHead.jl

A cassette-based debugger | The Other Debugger

5Distinct people
5Mentions
0Explicit recommenders
50GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A cassette-based debugger | The Other Debugger

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by month5 dated mentions

Observed mentions: 2019-03-21 20:40:04 UTC to 2021-01-09 18:08:14 UTC.

01232019-03-01 00:00:00 UTC to 2019-04-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 commentsMar 20192019-04-01 00:00:00 UTC to 2019-05-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-05-01 00:00:00 UTC to 2019-06-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-06-01 00:00:00 UTC to 2019-07-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-07-01 00:00:00 UTC to 2019-08-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-08-01 00:00:00 UTC to 2019-09-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2019-09-01 00:00:00 UTC to 2019-10-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-10-01 00:00:00 UTC to 2019-11-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-11-01 00:00:00 UTC to 2019-12-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-12-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-01-01 00:00:00 UTC to 2020-02-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-02-01 00:00:00 UTC to 2020-03-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsFeb 20202020-03-01 00:00:00 UTC to 2020-04-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-04-01 00:00:00 UTC to 2020-05-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-05-01 00:00:00 UTC to 2020-06-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-06-01 00:00:00 UTC to 2020-07-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-07-01 00:00:00 UTC to 2020-08-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-01 00:00:00 UTC to 2020-09-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-09-01 00:00:00 UTC to 2020-10-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-10-01 00:00:00 UTC to 2020-11-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-11-01 00:00:00 UTC to 2020-12-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-12-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2021-01-01 00:00:00 UTC to 2021-02-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsJan 2021

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Mar 20192019-03-01 00:00:00 UTC2019-04-01 00:00:00 UTC303
Apr 20192019-04-01 00:00:00 UTC2019-05-01 00:00:00 UTC000
May 20192019-05-01 00:00:00 UTC2019-06-01 00:00:00 UTC000
Jun 20192019-06-01 00:00:00 UTC2019-07-01 00:00:00 UTC000
Jul 20192019-07-01 00:00:00 UTC2019-08-01 00:00:00 UTC000
Aug 20192019-08-01 00:00:00 UTC2019-09-01 00:00:00 UTC101
Sep 20192019-09-01 00:00:00 UTC2019-10-01 00:00:00 UTC000
Oct 20192019-10-01 00:00:00 UTC2019-11-01 00:00:00 UTC000
Nov 20192019-11-01 00:00:00 UTC2019-12-01 00:00:00 UTC000
Dec 20192019-12-01 00:00:00 UTC2020-01-01 00:00:00 UTC000
Jan 20202020-01-01 00:00:00 UTC2020-02-01 00:00:00 UTC000
Feb 20202020-02-01 00:00:00 UTC2020-03-01 00:00:00 UTC000
Mar 20202020-03-01 00:00:00 UTC2020-04-01 00:00:00 UTC000
Apr 20202020-04-01 00:00:00 UTC2020-05-01 00:00:00 UTC000
May 20202020-05-01 00:00:00 UTC2020-06-01 00:00:00 UTC000
Jun 20202020-06-01 00:00:00 UTC2020-07-01 00:00:00 UTC000
Jul 20202020-07-01 00:00:00 UTC2020-08-01 00:00:00 UTC000
Aug 20202020-08-01 00:00:00 UTC2020-09-01 00:00:00 UTC000
Sep 20202020-09-01 00:00:00 UTC2020-10-01 00:00:00 UTC000
Oct 20202020-10-01 00:00:00 UTC2020-11-01 00:00:00 UTC000
Nov 20202020-11-01 00:00:00 UTC2020-12-01 00:00:00 UTC000
Dec 20202020-12-01 00:00:00 UTC2021-01-01 00:00:00 UTC000
Jan 20212021-01-01 00:00:00 UTC2021-02-01 00:00:00 UTC101

What Hacker News says

5 sources
Arborist.jl https://github.com/oxinabox/Arborist.jl/ It implements one of the more advanced tricks in JuliaLang. Which is the concept behind Cassette.jl (https://github.com/jrevels/Cassette.jl) and IRTools.jl (https://github.com/MikeInnes/IRTools.jl). which is this notion of a recursive source code tranformation. This is the thing where you tranform code (kind of like a macro but not lexically scoped), including tranforming all function calls to also tranform their code. It's super powerful For example Zygote.jl (https://github.com/FluxML/Zygote.jl) implements reverse mode automatic differentiation, by defining a function that is a generated transformation of the function being differentiated. MagneticReadHead.jl (https://github.com/oxinabox/MagneticReadHead.jl/) implements a debugger by defining a function that has been transformed to in
Read the rest
clude debugger interupts. This stuff also has a bunch of use for probabalistic programming languages etc. The thing is Cassette and IRTools implement this at the lowered code level. It runs on the SSA-form IR. This IR was never really designed for the user to write it. Though IRTools does a noble attempt to make it nice. Arborist instead runs at the Abstract Syntax Tree (AST) level. Just like macros. This is designed to be written and manipulated by users. Users do that all the time by writing macros. I haven't touched it in a while (apparently 2 years). Largely because AFAICT it's not useful outside of pedagogical purposes. AST is not actually that nice for any program tranforms i want to do, since there are so many ways to write the same thing. E.g. different kinds of loops and branches, where as in SSA form IR they all look the same. Probably could be made to work, but i just don't really have a usecase that I can't do easier on IR. (probably people who haven't been deep into IR on the other hand would think of some) There are a bunch of edge cases where it crashes still, for things that are not allowed to appear in generated code. It wouldn't be too hard to make it work though, not really. Particularly since we now have tools like https://github.com/SciML/RuntimeGeneratedFunctions.jl https://github.com/JuliaStaging/GeneralizedGenerated.jl
In Ask HN: Show me your half baked project
To be fair, there were debuggers pre-1.0, but the changes in the language syntax and compiler broke them. That one was just the first one to work with the new architecture that was released on the second half of last year (and since the language is now stable, we can expect it to stay functional and improve over time). There is also another debugger being made with a completely different strategy (embedding the debugger within the compiled code instead of interpreting it): https://github.com/oxinabox/MagneticReadHead.jl
In Giving up on Julia (2016)
Yup, Gallium used DWARF debug info like gdb/lldb and could debug optimized, compiled Julia code. It's named Gallium because the DWARF standard constant for the Julia language is 31 and gallium is the 31st element in the periodic table :) Unfortunately, compilers generate horrible debug info and it was very hard to get even basic stuff like knowing the values of all in-scope local variables to work reliably and making breakpointing work was very much a work in progress. Debugger.jl on the other hand is slow, being interpreter-based, but very reliable. The down side is that it's really slow, so if you need to debug performance intensive code, you might be in trouble. In the future, the plan is to steal tech from Gallium [1] and MagneticReadHead [2] and use them to create a hybrid interpreted/compiled debugger that is as reliable as Debugger
Read the rest
.jl is now but which can run code fast enough to debug even compute-intensive workloads effectively. [1] https://github.com/JuliaDebug/Gallium.jl [2] https://github.com/oxinabox/MagneticReadHead.jl
In A Julia Interpreter and Debugger

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.