Commit Graph

711 Commits

Author SHA1 Message Date
James Shubin
303e80dee7 engine, lang, lib, pgraph: Plumb through more ctx 2025-10-02 23:28:51 -04:00
James Shubin
15b2ff68cc lang: core: os: Simplify waitgroup
Doesn't need to be part of the struct. Maybe there are others like this
that need porting.
2025-09-26 21:18:54 -04:00
James Shubin
25804c71df lang: core embedded: provisioner: Work with USB-free machines
This feature was for machines that boot from USB keys. When we PXE boot,
this should not fail when the file isn't missing.
2025-09-16 01:11:32 -04:00
James Shubin
ec48a6944c lang: core: iter: Make map coding more consistent with filter
Keeping the code looking similar makes it easy to patch bugs that occur
in both.
2025-09-14 23:52:22 -04:00
James Shubin
df9849319d lang: core: iter: Replace graph when list length changes
The map and iter functions weren't replacing the graph if the input list
length changed. This was just an oversight in coding AFAICT, as the
sneaky case is that if the length stays the same, but the list contents
change, then it's okay to not swap.
2025-09-14 23:50:21 -04:00
James Shubin
a5f89d8d7b lang: funcs: dage: Use lazy freshness check
Not sure if this would introduce a glitch or not. Does seem to work
correctly. Without this, examples/lang/datetime2.mcl don't update
properly.
2025-09-11 23:19:45 -04:00
James Shubin
790b7199ca lang: New function engine
This mega patch primarily introduces a new function engine. The main
reasons for this new engine are:

1) Massively improved performance with lock-contended graphs.

Certain large function graphs could have very high lock-contention which
turned out to be much slower than I would have liked. This new algorithm
happens to be basically lock-free, so that's another helpful
improvement.

2) Glitch-free function graphs.

The function graphs could "glitch" (an FRP term) which could be
undesirable in theory. In practice this was never really an issue, and
I've not explicitly guaranteed that the new graphs are provably
glitch-free, but in practice things are a lot more consistent.

3) Simpler graph shape.

The new graphs don't require the private channels. This makes
understanding the graphs a lot easier.

4) Branched graphs only run half.

Previously we would run two pure side of an if statement, and while this
was mostly meant as an early experiment, it stayed in for far too long
and now was the right time to remove this. This also means our graphs
are much smaller and more efficient too.

Note that this changed the function API slightly. Everything has been
ported. It's possible that we introduce a new API in the future, but it
is unexpected to cause removal of the two current APIs.

In addition, we finally split out the "schedule" aspect from
world.schedule(). The "pick me" aspects now happen in a separate
resource, rather than as a yucky side-effect in the function. This also
lets us more precisely choose when we're scheduled, and we can observe
without being chosen too.

As usual many thanks to Sam for helping through some of the algorithmic
graph shape issues!
2025-09-11 23:19:45 -04:00
James Shubin
1e2db5b8c5 gapi: New API
Clear out lots of cruft and mistakes in this old API. The language GAPI
isn't updated with this commit, and as a result, this won't build, but
the fixes for it are coming shortly. We could have merged the two
commits, but it's easier to show them separately for clarity.
2025-09-09 02:21:59 -04:00
James Shubin
474df66ca0 lang: types: Add nil type for placeholder
The nil type is being added, but only slightly. It is not meant for real
use in the language. It will not work in all situations, and it isn't
implemented for many methods.

It is being added only for being a "dummy" placeholder value in the
engine when we have an unused value being propagated along an edge.
2025-09-09 02:21:59 -04:00
James Shubin
0031acbcbc lang: funcs: structs: Map indexes use half the integers
We want the pattern to be key:0, val:0, key:1, val:1, and so on... This
was previously using 0,1,2,3...

When we use Call directly, we need to fix this. Previously this was dead
code which is why the bug wasn't caught.
2025-09-09 00:04:22 -04:00
James Shubin
5692837175 lang: Add a simple test of a non-tree dag 2025-09-09 00:04:21 -04:00
James Shubin
04ff2a8c5c lang: ast: Turn this speculation flag into a const
Makes it easier to find when debugging.
2025-09-09 00:04:21 -04:00
James Shubin
166b463fa9 lang: funcs: structs: Update the graph shape docs 2025-09-09 00:04:21 -04:00
James Shubin
2b820da311 lang: ast: structs, funcs: structs: Exprif without a channel
This adds an improved "expr if" which only adds the active branch to the
graph and removes the "secret" channel.
2025-08-04 17:45:06 -04:00
James Shubin
86c6ee8dee lang: ast, funcs: Remove the secret channel from call
This removes the secret channel from the call function. Having it made
it more complicated to write new function engines, and it's not clear
why it was even needed in the first place. It seems that even the
current generation of function engines work just fine without it.

Co-authored-by: Samuel Gélineau <gelisam@gmail.com>
2025-08-04 17:04:01 -04:00
James Shubin
0a76910902 lang: core: Skip broken test
I expect this will be deprecated soon, let's see.
2025-08-04 17:04:01 -04:00
James Shubin
138ff8a895 lang: funcs: structs: Fix typos 2025-07-17 01:47:55 -04:00
James Shubin
8edb8e2a7b lang: interfaces: Add new helpers for dealing with args 2025-07-17 01:47:55 -04:00
James Shubin
71e4282d3f lang: interfaces: Add args to struct helper
We should consider if it's possible to avoid all of this transforming
entirely, but at least for now, do it all in one place by having an
available helper.
2025-07-13 03:18:23 -04:00
James Shubin
984aa0f5fc lang: Rename the vertex names
Make it a bit more obvious what the generated nodes are for.
2025-07-13 03:18:23 -04:00
James Shubin
737d1c9004 lang: interfaces: Table can be a standalone type
We'd like to have some useful helpers defined on it, like Copy.
2025-07-13 03:18:23 -04:00
James Shubin
d113fcb6d7 lang: ast, interfaces, interpret: Table should be a well-known type
We use this in enough places, that it's nice to have it as a well-known
alias.
2025-07-13 03:18:23 -04:00
James Shubin
f7e446ef6f lang: core: example: nested: We don't use the func suffix anymore
There are only functions, no need to add suffixes to file names.
2025-07-13 03:18:22 -04:00
James Shubin
21917864db lang: core, funcs: Remove facts API
This started because it was possible, not because it was very useful.
The overhead of using the full function API, is lessened by the function
API helpers, and the upcoming improvements in the function API.

It's much easier to have one fewer API's to manage and so on.

It's also a stark reminder of how weak tools like "puppet" are which
only really have data collection systems that don't take arguments.
2025-07-13 03:15:53 -04:00
James Shubin
0a79daf277 pgraph: Print cycles on error
I'm a terrible algorithmist, so who knows if this is correct, but it
seems to work in my cursory testing.
2025-06-25 06:05:28 -04:00
James Shubin
50b4a2a4f7 lang: ast: Make error message clearer 2025-06-25 04:50:47 -04:00
James Shubin
a5fc1256e2 lang: core: embedded: provisioner: Encrypt the filesystem
The provisioner should be able to encrypt things. We should use an empty
passphrase so that the choosing of the actual passphrase can be done at
first boot.
2025-06-23 19:53:52 -04:00
James Shubin
0b2236962c lang: core: embedded: provisioner: Separate home is rare
Maybe one day we want this off to prevent storage issues, but not today.
2025-06-12 18:17:33 -04:00
James Shubin
ee7ad7cbbe lang: core: embedded: provisioner: Skip ignore if no drives available
Small bug for certain setups.
2025-06-12 18:11:14 -04:00
James Shubin
777ea6115b lang: core: embedded: provisioner: Support exec handoff
Could be used for any tool, but mgmt is an obvious possibility.

I should check this code more, but it's roughly right and I'm sure it
will get refactored more when I build opt-in provisioning and so on.
2025-06-08 21:16:54 -04:00
James Shubin
f22ec07ed3 lang: Improve logging of startup information
Graph size and build time are both helpful.
2025-06-08 03:36:11 -04:00
James Shubin
55eeb50fb4 lang: Refactor all the highlight helping together
Keep this cleaner and add a bit more.
2025-06-07 17:52:15 -04:00
James Shubin
25263fe9ea cli: Allow multiples of these args
We forgot the flag that lets the CLI parser actually let us use
multiples.
2025-06-06 23:53:42 -04:00
James Shubin
1df28c1d00 lang: ast, funcs: Start plumbing through the textarea
We need to get these everywhere and this is a start.
2025-06-06 03:11:06 -04:00
James Shubin
32e91dc7de lang: interpolate: Add temporary textarea info to interpolation
We should really be doing the math to find out how far along the string
each token really is, but that's complicated and tedious, especially
with the simplification passes, so let's skip that for now and just show
the whole thing.
2025-06-06 03:11:06 -04:00
James Shubin
c2c6cb5b6a lang: interfaces: Subtle fixes in textarea
Turns out we need a lot more tests to make this work easier.
2025-06-06 03:11:06 -04:00
James Shubin
58461323b9 lang: parser: Try to add the end values in parser
Not sure if this is right, but it's a start.
2025-06-06 03:11:06 -04:00
James Shubin
cdc6743d83 lang: ast, interfaces, interpolate: Remove the legacy pos
This ports things to the new textarea. We need to plumb through things a
lot more, especially the string interpolation math to get the right
offsets everywhere, but that's coming.
2025-06-06 02:37:43 -04:00
James Shubin
86dfa5844a lang: ast: Add missing initialization calls
Not sure how we forgot these before.
2025-06-06 02:35:20 -04:00
James Shubin
5d44cd28db lang: ast, interpolate: Pass through uninterpolated strings
We don't need to make a new reference for nothing.
2025-06-06 01:00:11 -04:00
James Shubin
4f977dbe57 lang: Use the source finder wherever we can
This was easy to add and it works great!
2025-06-06 01:00:11 -04:00
James Shubin
573bd283cd lang: funcs: dage: Print out some error locations
Most things don't support this yet, but let's get in some initial
plumbing. It's always difficult to know which function failed, so we
need to start telling the users more precisely.
2025-06-06 01:00:11 -04:00
James Shubin
6ac72974eb lang: ast, interfaces: Move textarea to a common package
We're going to use it everywhere. We also make it more forgiving in the
meanwhile while we're porting things over.
2025-06-06 01:00:11 -04:00
James Shubin
4189a1299a lang: ast: Add scope feedback for classes
We did this elsewhere for functions, let's add classes too.
2025-06-06 01:00:11 -04:00
James Shubin
dcd4f0709f lang: ast: Provide better error reporting for scope errors
Print these file and line numbers when we can!
2025-06-05 23:00:56 -04:00
James Shubin
75bafa4fd3 mcl, docs: Use the less ambiguous form of the import
Update the style guide as well!
2025-06-05 22:47:38 -04:00
James Shubin
3b88ad3794 lang: core: os: Add a modinfo function
Not sure if this will need renaming, but might be a useful family of
functions.
2025-06-05 21:40:19 -04:00
James Shubin
499b8f2732 lang: funcs: dage: Make error clearer
The implementation of the specific function is sending a nil value,
which is not allowed. This is a bug in the code of that function.
2025-06-05 20:36:15 -04:00
James Shubin
d14930ef28 lang: core: embedded: provisioner: Don't provision to USB disks
This should hopefully skip over any USB drives. Of course if we actually
want to provision to a USB drive, then we'll have to add a feature flag
for that.
2025-06-05 14:47:46 -04:00
James Shubin
16ade43caf engine: Rename world API and add a context
We want to be able to pass ctx through for various reasons.
2025-06-05 14:47:46 -04:00