====== Learning PlusCal ======
PlusCal is an algorithm language—a language for writing and debugging algorithms. It is especially good for algorithms to be implemented with multi-threaded code. Instead of being compiled into code, a PlusCal algorithm is translated into a TLA+ specification. An algorithm written in PlusCal is debugged using the TLA+ tools—mainly the TLC model checker. Correctness of the algorithm can also be proved with the TLAPS proof system, but that requires a lot of hard work and is seldom done.
===== External resources =====
* [[https://lamport.azurewebsites.net/tla/tutorial/contents.html|The PlusCal Tutorial]] by Leslie Lamport
* [[https://learntla.com/|Learn TLA+]] by Hillel Wayne, which starts off by teaching PlusCal
===== C-style vs P-Style =====
PlusCal comes into two flavors: C-Style and P-Style. For a more complete overview of PlusCal, there is a manual available for each style: [[https://lamport.azurewebsites.net/tla/c-manual.pdf|c-manual.pdf]], [[https://lamport.azurewebsites.net/tla/p-manual.pdf|p-style.pdf]].
To have a taste of each style:
P-Syntax
---- MODULE Playground ----
EXTENDS TLC, Naturals
(*--algorithm Playground
variable x = 0, y = 0;
begin
while x > 0 do
if y > 0 then y := y-1;
x := x-1
else x := x-2
end if
end while;
print y;
end algorithm;
*)
====
C-Syntax style
---- MODULE Playground ----
EXTENDS TLC, Naturals
(*--algorithm Playground {
variables x = 0, y = 0; {
while (x > 0) {
if (y > 0) {
y := y-1;
x := x-1;
} else x := x-2
};
print y;
}
}*)
====