Hi,
I find an early precendent of a command
in a unix system, which has an interesting
flavor, that goes beyond Web Prolog Trinity
RPC nonsense. Take this command:
uux merlin!wc < venus!/paper/*.tex > mars!/stats/*.txt https://www.ibm.com/docs/en/aix/7.1.0?topic=u-uux-command
So basically wc, i.e. word count is executed
on merlin, takes data from venus and moves it
to marks. We can do the same with pi-WAM,
currently experimenting with a non-blocking
execute/1 built-in, spawn/2:
?- chan(In), chan(Out),
-a-a spawn((recv(3,[Z]), wc(Z,T), send(4,[T])), [comm([In,Out])]),
-a-a venus(X),
-a-a send(In,[X]), repeat, recv(Out,[Y]),
-a-a mars(Y).
But maybe introducing in/1 and out/1 options
to spawn/2, would be more easier to write,
now I have split spawn/2 into prepare/3 and run/1.
?- chan(In), chan(Out),
-a-a prepare(wc(X,Y)), [in(X), out(Y)], P),
-a-a venus(X),
-a-a run(P),
-a-a mars(Y).
But the point is to do prepare/3 only once,
and do mars and venus later. It also reflects
the ordering on a uux command:
1-a-a-a-a-a-a-a-a-a-a-a-a-a-a 2-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a 3
uux merlin!wc < venus!/paper/*.tex > mars!/stats/*.txt
But we wouldn't do it alone for this cosmetic.
The idea is that the spawned process is using
its channels, to do more than only one job.
Bye
Mild Shock schrieb:
Hi,
Hi take Robin Milners fickle:
?- emulate((between(1,2,Y),in(X),out(Y))).
: 0
1
: 0
2
fail.
If I use NUM=3, number of logical threads,
and common input [0, 0, 0, 0, 0, 0].
I might get this common output:
[1, 2, 1, 2, 1, 2]
Or this common output:
[1, 1, 2, 2, 1, 2]
Or this common output:
[1, 1, 1, 2, 2, 2]
What else? Did I miss some case?
Can be seen on GPU and CPU backend, depending
on launch parameters. (*)
Bye
(*) If logical threads are executed together in
work groups, certain guarantees of determinism
might hold. But modern GPUs usually support
multiple independent work groups, also my CPU
backend does support a notion of multiple
independent work groups. So that the determinism
guarantees only hold inside the work group.
Mild Shock schrieb:
Hi,
Probably blinded by some academic remoteness
from the real world, some people really believe
nonsense like the following:
Deterministic Concurrency - Edward Lee
deterministic models as a central part of the engineering toolkit
https://icfp26.sigplan.org/track/icfp-2026-icfp-keynotes#event-overview
But hey Aristoteles present us already with
modal logic to talk about the future. So
if I have a process calculus, with expressions
-C, that capture all my processes of interest,
I can have a modal logic of with modal operators
[-C] and <-C> that give necessity and possibility,
the simplest first order bootstrapped types are:
Product Type:
A -> [-C]B
Sum Type:
A /\ <-C>B
So we need more than only a ->-C type? But even
with two types, is there an easy equivalent of
Curry Howard isomorphism?
In contrast Amir Pnueli's 1977 system of temporal
logic, another variant of modal logic sharing many
common features with dynamic logic, differs from all
of the above-mentioned logics by being what Pnueli
has characterized as an "endogenous" logic,
the others being "exogenous" logics.
https://en.wikipedia.org/wiki/Dynamic_logic_%28modal_logic%29
The Sea Battle and the Master Argument
Aristotle and Diodorus Cronus on the Metaphysics of the Future
https://www.degruyterbrill.com/de/document/doi/10.1515/9783110866346/html >>>
Mild Shock schrieb:
Hi,
For marketing purposes people
typically look at the race towards
2nm, and we find:
A month ago, Apple lost its exclusivity
on 3 nm smartphone processors with
MediaTekrCOs Dimensity 9400 chip, integrated
in the Vivo X200 Pro smartphone. Qualcomm
is also in the race with its recently
unveiled Snapdragon 8 Elite and set to
power the Xiaomi 15 Pro in 2025. However,
Apple should regain its position as innovation
leader in 2026 with the release of the
iPhone 18, which should feature the A20
chip built on TSMCrCOs 2 nm process."
But there is a vertical vias revolution
going on as well, some SOCs typically
being at 18 layers now:
Zooming Into a CPU (It's Incredible)
https://www.youtube.com/watch?v=Bez-2cvYja0
imec has coined the term CMOS 2.0:
LEUVEN (Belgium), MARCH 12th, 2026 rCo Imec,
a world-leading research and innovation hub
in advanced semiconductor technologies, has
launched a first-of-its-kind consortium with
26 European university groups that will jointly
work on the technology roadmap beyond
CMOS scaling (CMOS 2.0).
https://www.imec-int.com/en/press/imec-launches-university-consortium-around-next-generation-chips
So we might see more mobile grade GPUs.
Bye
**Newline-delimited JSON**{"some":"thing\n"}rAA {"may":{"include":"nested","objects":["and","arrays"]}}rAA https://en.wikipedia.org/wiki/JSON_streaming#Newline-delimited_JSON
Hi,
Sorry I forget to specify the site for wc.
Lets just write it as follows, the site
somehow encoded in a the predicate name,
and forget about a lot of (!)/2 details:
?- prepare(merlin(X,Y)), [in(X), out(Y)], P),
-a-a venus(X),
-a-a run(P),
-a-a mars(Y).
Does it have a declarative reading? Besides
the benefit of shipping merlin/1 only once?
Of course we can interpret it as follows:
?- venus(X),
-a-a merlin(X,Y),
-a-a mars(Y).
This would be much more also in the spirit of a
Jens Ottens theorem provers, that ultimately end
in connection proof problems, when they have
decended down. Maybe the Trinity system can
somehow avoid the multiple shipping of the merlin
payload through caching. But the problem is it
will see merlin(foo, Y), merlin(bar, Y),
merlin(baz, Y). So it doesn't know what was
the input. It cannot create a single logical
thread on the executing site.
Bye
Mild Shock schrieb:
Hi,
I find an early precendent of a command
in a unix system, which has an interesting
flavor, that goes beyond Web Prolog Trinity
RPC nonsense. Take this command:
uux merlin!wc < venus!/paper/*.tex > mars!/stats/*.txt
https://www.ibm.com/docs/en/aix/7.1.0?topic=u-uux-command
So basically wc, i.e. word count is executed
on merlin, takes data from venus and moves it
to marks. We can do the same with pi-WAM,
currently experimenting with a non-blocking
execute/1 built-in, spawn/2:
?- chan(In), chan(Out),
-a-a-a spawn((recv(3,[Z]), wc(Z,T), send(4,[T])), [comm([In,Out])]),
-a-a-a venus(X),
-a-a-a send(In,[X]), repeat, recv(Out,[Y]),
-a-a-a mars(Y).
But maybe introducing in/1 and out/1 options
to spawn/2, would be more easier to write,
now I have split spawn/2 into prepare/3 and run/1.
?- chan(In), chan(Out),
-a-a-a prepare(wc(X,Y)), [in(X), out(Y)], P),
-a-a-a venus(X),
-a-a-a run(P),
-a-a-a mars(Y).
But the point is to do prepare/3 only once,
and do mars and venus later. It also reflects
the ordering on a uux command:
1-a-a-a-a-a-a-a-a-a-a-a-a-a-a 2-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a 3
uux merlin!wc < venus!/paper/*.tex > mars!/stats/*.txt
But we wouldn't do it alone for this cosmetic.
The idea is that the spawned process is using
its channels, to do more than only one job.
Bye
| Sysop: | Amessyroom |
|---|---|
| Location: | Fayetteville, NC |
| Users: | 74 |
| Nodes: | 6 (0 / 6) |
| Uptime: | 09:03:35 |
| Calls: | 1,188 |
| Calls today: | 1 |
| Files: | 1,350 |
| D/L today: |
50 files (44,212K bytes) |
| Messages: | 281,560 |