rholang 基础教程
nbking2005
发表于 2023-1-13 10:22:33
80
0
0
为了可以运行这个教程里面的rholang代码,你需要一些开发环境。6 s$ Z$ f) \+ o9 C# @+ F- {
这不是一个会让你感到疲惫的rholang开发工具或者技术栈。( n9 \/ J% d/ B# M) l. T
然而它展示了一些基本的开发环境给你开始。3 {1 S4 ^# E$ x* t
网上编译器1 P3 i/ L0 x- g; e4 }4 `" u
RChain社区的成员提供了一个基于公共网站的在线rholang编译器。* k/ u3 ]8 t5 ]- v' {1 ^8 F
这个工具非常有前途,也是一种入门的简单方式。8 @4 g% X& `) z& A. v
但是它还是开发节点,有时候会不稳定。
本地节点
真正正确运行rholang代码的方法是在通过启动你自己本地机子的RNode然后使用它的rholang编译器。
首先你要为你自己的平台安装 RNode3 K1 x( y; X4 O; @+ a) i
对于初学者,这里有详细的一步一步指导你怎么使用AWS 或者Docker启动你的节点.. D( G3 |; d& f% q0 r2 D& v
一旦你的RNode安装好了,你可以运行基本的独立节点。
$ rnode run -s -n
在单独的终端里,你可以在REPL模式下一次执行一行rholang。$ W* M- U3 { ^/ e5 [# V
$ rnode repl$ }) x1 c8 }* c. ? @7 B
╦═╗┌─┐┬ ┬┌─┐┬┌┐┌ ╔╗╔┌─┐┌┬┐┌─┐ ╦═╗╔═╗╔═╗╦
╠╦╝│ ├─┤├─┤││││ ║║║│ │ ││├┤ ╠╦╝║╣ ╠═╝║
╩╚═└─┘┴ ┴┴ ┴┴┘└┘ ╝╚╝└─┘─┴┘└─┘ ╩╚═╚═╝╩ ╩═╝
rholang $ Nil8 m0 _4 L' }) q3 h
Deployment cost: CostAccount(0,Cost(0))
Storage Contents:' h# X2 c" k, m. l
for( x0, x1 3 q) @% V7 q( {! e" n6 D. Q
当你运行更多行数的rholang代码时候,你可以使用RNode的eval模式来执行代码。
$ rnode eval intersection.rho5 C5 P! Q7 {' W/ G' i: ]# Z+ }
Evaluating from intersection.rho
Result for intersection.rho:
Deployment cost: CostAccount(39,Cost(1132))
Storage Contents:$ p2 Q" g5 d1 _
@{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"name"}!(Nil)) | @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"age"}!(Nil)) | @{"world"}!("hello") | for( x0, x1
有一些RNode的输出会出现在你运行代码的同一个终端。但是其它一些代码输出会直接出现在第一个终端。: k n/ N1 Q. }3 z* s8 z
所以在你熟悉什么输出出现在哪里前请确定好检查两边的终端。
Cryptofex IDE1 s5 F: Y' `& n6 g( {
一个叫做cryptofex 的开发环境已经进入了alpha版本。
Cryptofex可能最后最好的开发rholang的地方,但是现在还是很早期的软件。5 z& Y0 r$ o ?7 J
Cryptofex提供rholang语法高亮特性并且可以在RChain集成节点上检测dApps。; a2 R: b* m0 p9 p( w1 V; m
IDE同时也提供环境创建和测试在以太网上,私人测试网上和单独模式的EVM上的智能合约。
发送与标准输出(stdout)
说声Hello8 T6 M6 D1 f; @/ r& Q
编程界有一个存在已久的传统——输出"Hello World"应该是你学习的第一个程序。下面是一个在屏幕上输出"Hello World"的最简单例子。% {% \1 L5 Q2 ^. C2 Y4 j4 B7 L
hello.rho% b% Z4 f& y$ ~5 i* d, p+ w0 @
练习
请让程序输出"Rholang rocks!" 而不是 “Hello World”。 B K, h. ?* I7 ~8 y" v! R
练习
尝试将"stdout"替换为别的语句。会得到什么结果?# a- I7 |% _" c( ]$ f, K9 I9 y
尝试一下这个有趣的通道名称@"someChannel".这里可以比较随意。请让程序在屏幕上输出 “Sup World”。 f* m: n8 I6 [' e& J
标准输出(stdout)到底是什么东西' R* t- K0 a M
; D; c! C! l1 T& e1 I2 d" s$ T
rho语言的核心是通道(channel,下面都称为通道)通信. 通道是你可以用来发送和接收消息的通信线路。你可以使用!字符来在通道中发送消息。1 L: t y$ e0 C1 `6 A- Q
stdout 是一个特殊的通道,用于将文本发送至"标准输出",通常指你的电脑屏幕。正因为它的特殊,我们不得不将它写在第一段学习的代码里面。
使用其他通道
实际上你可以在很多通道中发送消息,而非只有stdout。 但其它通道不像 stdout 他们不会在屏幕上显示。
tupleSpace.rho
那么,在其他通道中的消息将被发送至哪里?哪里都不会去!这些消息暂时哪儿都不去,这些消息会继续待在通道内,等待其他人去取出它们。我们将在下一课程中学习如何获取这些消息。同时,消息滞留所在的地方,我们称为 “元组空间”。
请确保你的信息保留在元组空间里。你应该会看到像下面的信息。2 \" C. H& N) X3 Q) U1 @$ l
Storage Contents:" `' v! t i$ s: o( N
@{"RandoChannel"}!("This won't be on the screen") | for( x0, x13 D1 |4 u8 ~$ f; ~
同时做两件事
3 W+ R; m0 M8 C L
在rholang中,我们不会告诉计算机做完一件事,再到另一件。相反,我们会告诉它需要做的所有事情,然后"并行地"执行它们,或者一次性全部执行。1 w d4 G! h j7 J' n6 O
parallel.rho' u8 ^6 O) ], Y/ ~. O. B
| 的发音是 “parallel”, 可简称为 “par”。
练习
向"pizza shop"通道发送消息"1 large pepperoni please"。
练习
向"Mom’s Phone"通道发送"Hi Mom"。
练习$ m0 R- c4 A2 D7 z6 U4 {1 C
用一个程序在屏幕上输出两个消息,"Rick"和 “Morty”。
小测试/ T4 |* G; Z# d* m8 L7 o- r
stdout!("Programming!") 将在屏幕上输出什么?
! W h& V9 }; s& K* s9 [8 S
Programming!* j1 N k' U& p9 c' x
stdout!$ ^$ G( v4 O, l% k$ E$ Z8 m
Nothing* `( W! s8 v: ]9 ~
+ E+ Q) N! N8 c3 w% B
@"what"!("Up") 在什么通道上发送消息?8 S- b5 P) w* t0 c' U$ s3 F
' h9 T9 _7 n, U0 k8 O( l1 O
@"Up"* H- O# ~% j& V& |) O8 \
@"what"
what- Q0 ^3 e0 ]3 [+ U/ N1 s# E2 j0 C
rholang会先执行哪一条语句?
@"stdout"!("Dogs")' L. V/ j, a; r, K: S% d3 q3 W
|
@"stdout"!("Cats")9 ~& f: I+ P3 V- d2 f5 G
* p1 ?; ?" \ N6 Q V- t' C) M4 T
输出 “Dogs”1 A; \) ^5 q2 P8 I/ v% K- h
输出 “Cats”
都不。 它们是并行的5 o6 D* P8 O) r/ o/ g
~& l. D$ A. ^5 s0 V5 i2 J- @
PS. 有一个特殊的通道 stderr. 请尝试一下看看往这个通道发送消息,会发生什么?
有什么区别?
成为第一个吐槽的人