There is a long-standing tradition in programming that your first program should say "Hello World". Here's the simplest rholang code to put that text on the screen.
new result in {
result!("Hello World!")
}
Make the program print "Rholang rocks!" instead of "Hello World".
The heart of rholang is communicating on channels. Channels are communication lines that you use to send and receive messages. To send a message on a channel, you use the !
character.
We created the channel result
on the first line of the program with new result
. You'll create lots of channels as you learn rholang. More on that later, but for now just know that you need that part in parentheses to make text actually appear on the screen.
You can actually send messages on lots of channels, not just result
. The result will be the first name introduced when we explore
read only. For deploys on rchain we use a special name for results anyname(`rho:rchain:deployId) to get the result of a deploy. More on that later.
new result, randoChannel in {
randoChannel!("This won't be on the screen")
}
So where do the other channels go then? Nowhere! Not yet anyway. The messages just sit there waiting for someone (or some process) to receive them. We'll learn how to receive messages in the next lesson. The place where messages sit in the meantime is called the "tuplespace".
Make sure your message is sitting in the tuplespace. You should see some text like this depending on which developer environment you use.
Storage Contents:
@{"RandoChannel"}!("This won't be on the screen") | for( x0, x1 <= @{Unforgeable(0x01)} ) { Nil } | for( x0, x1, x2, x3 <= @{"secp256k1Verify"} ) { Nil } | for( x0, x1 <= @{"sha256Hash"} ) { Nil } | for( x0, x1 <= @{Unforgeable(0x03)} ) { Nil } | for( x0, x1, x2, x3 <= @{"ed25519Verify"} ) { Nil } | for( x0, x1 <= @{"blake2b256Hash"} ) { Nil } | for( x0 <= @{Unforgeable(0x02)} ) { Nil } | for( x0 <= @{Unforgeable(0x00)} ) { Nil } | for( x0, x1 <= @{"keccak256Hash"} ) { Nil }
In rholang we don't tell the computer to do one thing, then another, then a third. Rather we tell it all the things to do, and it does them "concurrently," or all at once.
new result, chan1 in {
result!("I'm on the screen")
|
chan1!("I'm in the tuplespace")
}
The |
is pronounced "parallel", or "par" for short.
Send the message "1 large pepperoni please" on a channel called "pizza shop".
Send "Hi Mom" on the channel "Mom's Phone".
Print two messages, "Rick" and "Morty", on the screen in one program.
What will result!("Programming!")
print to the screen?
What channel does what!("Up")
send a message on?
Up
what
what
result
Which does rholang do first in
result!("Dogs")
|
result!("Cats")
There is also a special channel called rho:io:stderr
. Check out what happens when you send to it. (what's the difference?)