Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

rholang 基础教程

nbking2005
199 0 0
配置你的开发环境
# |  r! M7 D5 r% T) ^5 d( j. A为了可以运行这个教程里面的rholang代码,你需要一些开发环境。0 |% _$ o  f4 h3 h
这不是一个会让你感到疲惫的rholang开发工具或者技术栈。
( P( I7 {8 O8 D& k* n然而它展示了一些基本的开发环境给你开始。
, g1 J' ~& F$ J7 x. u# u网上编译器
/ Y5 ^& G' R* S7 BRChain社区的成员提供了一个基于公共网站的在线rholang编译器。
& Q3 T; b+ e7 d这个工具非常有前途,也是一种入门的简单方式。
# X  a0 @$ W" w$ {2 A$ g1 E% I2 N( u但是它还是开发节点,有时候会不稳定。
8 H$ d  o! f2 I: Q5 N  r. g本地节点7 Y4 s" H) F1 ]$ I0 j" Y: ?5 u7 X' L2 @
真正正确运行rholang代码的方法是在通过启动你自己本地机子的RNode然后使用它的rholang编译器。
( Q* T  v3 L, Z( s+ ]/ S首先你要为你自己的平台安装 RNode
- p# t, W2 Q/ t& t! ~% @对于初学者,这里有详细的一步一步指导你怎么使用AWS 或者Docker启动你的节点.& ?  U6 H! G- j- p. U
一旦你的RNode安装好了,你可以运行基本的独立节点。
& b7 F/ c& e; K. a$ rnode run -s -n
0 Y# r! y) D% s  g, C在单独的终端里,你可以在REPL模式下一次执行一行rholang。
2 o9 f  l2 y7 e$ rnode repl
2 O8 S5 v/ y- q$ D5 J& R  ╦═╗┌─┐┬ ┬┌─┐┬┌┐┌  ╔╗╔┌─┐┌┬┐┌─┐  ╦═╗╔═╗╔═╗╦  ' s8 z8 C5 ~: ^3 e/ R! ?) Y
  ╠╦╝│  ├─┤├─┤││││  ║║║│ │ ││├┤   ╠╦╝║╣ ╠═╝║  # G! z' w5 W* c$ |
  ╩╚═└─┘┴ ┴┴ ┴┴┘└┘  ╝╚╝└─┘─┴┘└─┘  ╩╚═╚═╝╩  ╩═╝
( U# F& t0 |5 f! e1 Z: i# E( y! d7 P+ trholang $ Nil
/ ^1 e3 v$ s; W% ]0 ]Deployment cost: CostAccount(0,Cost(0))/ t/ [1 V9 F* b( ^
Storage Contents:, I. v" n2 ^! _( W
for( x0, x1   S% Q3 T, L" c# s8 W; b3 R: B
当你运行更多行数的rholang代码时候,你可以使用RNode的eval模式来执行代码。
5 `# F! n6 p7 h- Z8 Y9 a$ rnode eval intersection.rho
% R% I4 H( o- W4 y6 JEvaluating from intersection.rho, G1 a( B0 y0 v' z9 N& s1 Q
Result for intersection.rho:
- s2 A% D# R) e. U& {) u5 t" WDeployment cost: CostAccount(39,Cost(1132))
; R/ `9 L  m3 g, H9 cStorage Contents:. D9 u0 H+ {0 ]7 D7 |" c
@{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"name"}!(Nil)) | @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"age"}!(Nil)) | @{"world"}!("hello") | for( x0, x1 % a+ z1 f2 O! c' m  s# P* i
有一些RNode的输出会出现在你运行代码的同一个终端。但是其它一些代码输出会直接出现在第一个终端。
, E- q* O- F& w# p. c: [所以在你熟悉什么输出出现在哪里前请确定好检查两边的终端。
3 v  D/ n" e+ Y8 ZCryptofex IDE, |$ |) L0 R0 Z3 [3 }. o; ]
一个叫做cryptofex 的开发环境已经进入了alpha版本。. u# i# V* V: L% s/ z" q6 J, {, ~
Cryptofex可能最后最好的开发rholang的地方,但是现在还是很早期的软件。
% e- x3 B3 ]  L5 T% U/ [Cryptofex提供rholang语法高亮特性并且可以在RChain集成节点上检测dApps。
0 y5 H6 t3 d% o2 B$ ?IDE同时也提供环境创建和测试在以太网上,私人测试网上和单独模式的EVM上的智能合约。
* T! e8 U: ~' w发送与标准输出(stdout)
+ O5 j% A' Q1 s( M! E) i说声Hello
0 T% `4 u* P9 l- G5 {0 h1 [0 @$ W0 {% N1 h/ `
编程界有一个存在已久的传统——输出"Hello World"应该是你学习的第一个程序。下面是一个在屏幕上输出"Hello World"的最简单例子。4 F! ^2 C; ]* k8 k1 E
hello.rho
+ S- H7 ], X. z) z: m练习$ I8 u  s# X2 I7 ?
请让程序输出"Rholang rocks!" 而不是 “Hello World”。
+ H5 {3 d- @# \  K5 F. s6 ]练习( v, W1 C) B' R3 r) M9 H3 f, Y
尝试将"stdout"替换为别的语句。会得到什么结果?$ |% R0 _/ i! J: T% [9 j
尝试一下这个有趣的通道名称@"someChannel".这里可以比较随意。请让程序在屏幕上输出 “Sup World”。, a, n# O8 I+ Z: }, H

& X; U6 _9 i7 P" R; O& s标准输出(stdout)到底是什么东西" `! e! |/ m* I; i0 {/ X% e
3 {) l) Q) W$ }6 S" J
rho语言的核心是通道(channel,下面都称为通道)通信. 通道是你可以用来发送和接收消息的通信线路。你可以使用!字符来在通道中发送消息。
$ n6 Z* c' t% E
* P+ G0 Z4 R/ p8 O5 t  }8 u) mstdout 是一个特殊的通道,用于将文本发送至"标准输出",通常指你的电脑屏幕。正因为它的特殊,我们不得不将它写在第一段学习的代码里面。
* E: D* k2 d1 E1 D使用其他通道
3 @: C- X1 c' a, A$ G( t) s( j, j) m$ ]5 E: A2 G0 w! e
实际上你可以在很多通道中发送消息,而非只有stdout。 但其它通道不像 stdout 他们不会在屏幕上显示。  a% C# _' T7 P& k  ~( @% r
tupleSpace.rho9 ^! ?- y+ l- \8 C8 B
那么,在其他通道中的消息将被发送至哪里?哪里都不会去!这些消息暂时哪儿都不去,这些消息会继续待在通道内,等待其他人去取出它们。我们将在下一课程中学习如何获取这些消息。同时,消息滞留所在的地方,我们称为 “元组空间”。
' H  X6 V" C7 z% H请确保你的信息保留在元组空间里。你应该会看到像下面的信息。
' ?, b1 N7 T0 Z, ^Storage Contents:
1 ^0 U4 H9 T/ n@{"RandoChannel"}!("This won't be on the screen") | for( x0, x1
( Z2 P0 }4 V( {: Q( z同时做两件事$ ]0 N4 C$ s/ }6 S/ f5 Y8 M

* Y0 ?1 m3 j% W* B& [" F在rholang中,我们不会告诉计算机做完一件事,再到另一件。相反,我们会告诉它需要做的所有事情,然后"并行地"执行它们,或者一次性全部执行。& U- \2 J5 K! A; K# o
parallel.rho/ D+ w9 h7 o" o
| 的发音是 “parallel”, 可简称为 “par”。/ U0 \+ t* K) c; C7 k
练习
9 @( b2 \7 c7 N7 }2 ]9 [) p4 Q向"pizza shop"通道发送消息"1 large pepperoni please"。' s" l3 k  j( ~+ F# J' G
练习& k& Y9 O6 F+ @) U- l4 e% f
向"Mom’s Phone"通道发送"Hi Mom"。% w7 o/ {& k) n( X
练习! q! f* {! u+ A) p& x& b4 V
用一个程序在屏幕上输出两个消息,"Rick"和 “Morty”。; h# ?5 T; R% R, N
小测试
1 x& b: V. s1 X' C3 _stdout!("Programming!") 将在屏幕上输出什么?
6 i. K- ~8 Y1 r, ?9 C. _3 ^0 Z" Q& G* f" g$ _
Programming!! n3 z6 s/ O: h$ T7 r
stdout!( }! I9 o7 V* d
Nothing0 L6 d1 E& I: j
, y! j; |- U, D6 |. Q  y. }, ~
@"what"!("Up") 在什么通道上发送消息?
0 H) D& d3 M1 P: f3 l4 c6 n3 i! P. l; a9 [& j" ]
@"Up"8 C( D4 I. Y; L* r% {
@"what"5 t9 p3 U3 I5 p3 l
what' j9 w/ @3 W3 g0 r0 S. K
% J) I  j0 n3 E
rholang会先执行哪一条语句?
) M' p% _5 G7 C1 k8 a! O' B@"stdout"!("Dogs")+ a, }8 ~5 M; I, `" ~
|2 K& _' \  b: @! u- s
@"stdout"!("Cats")& T9 |0 r( b" T9 S) Y0 k
8 Y" ]& }$ ]* H* U# J1 @) r
输出 “Dogs”6 e- P8 U7 Q, `& d: p
输出 “Cats”2 L/ N$ E+ ~$ `3 V$ Y- V
都不。 它们是并行的
6 o/ i) \) u; l% q# a

# k1 G# {7 I' q4 ZPS. 有一个特殊的通道 stderr. 请尝试一下看看往这个通道发送消息,会发生什么?
' }% O( c  P* _& c- B有什么区别?
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

nbking2005 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1