Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

rholang 基础教程

nbking2005
76 0 0
配置你的开发环境7 I0 [% w: M1 _0 C. O1 p
为了可以运行这个教程里面的rholang代码,你需要一些开发环境。1 k7 d) O, L$ W  [
这不是一个会让你感到疲惫的rholang开发工具或者技术栈。
9 ?. b$ a! Z/ L' ]然而它展示了一些基本的开发环境给你开始。# Y* d* W# T8 e4 b/ M
网上编译器( M( b* d, q! i" i: N
RChain社区的成员提供了一个基于公共网站的在线rholang编译器。3 U) [+ z3 M* A9 x, M  `% T
这个工具非常有前途,也是一种入门的简单方式。
7 g6 T% h6 U6 K' l3 I8 K但是它还是开发节点,有时候会不稳定。6 b: b4 w% C8 N( L
本地节点
2 {2 _- J2 @: T$ I9 \/ R: t真正正确运行rholang代码的方法是在通过启动你自己本地机子的RNode然后使用它的rholang编译器。1 L) w' G" }) H- y# e
首先你要为你自己的平台安装 RNode+ `# h* g3 q$ x4 W, S% L/ L
对于初学者,这里有详细的一步一步指导你怎么使用AWS 或者Docker启动你的节点.. ], Q3 a( V1 d% E( }
一旦你的RNode安装好了,你可以运行基本的独立节点。
9 _1 C3 e- a# |, G6 ~$ rnode run -s -n. y* J; \2 U9 O3 _4 K
在单独的终端里,你可以在REPL模式下一次执行一行rholang。4 w7 F) U! A5 c2 b6 O& G4 l: ~7 A
$ rnode repl0 D( E3 L5 Y- |
  ╦═╗┌─┐┬ ┬┌─┐┬┌┐┌  ╔╗╔┌─┐┌┬┐┌─┐  ╦═╗╔═╗╔═╗╦  * o' ?  |4 V4 s: K
  ╠╦╝│  ├─┤├─┤││││  ║║║│ │ ││├┤   ╠╦╝║╣ ╠═╝║  1 o' W5 Q, t7 t+ }9 K: r
  ╩╚═└─┘┴ ┴┴ ┴┴┘└┘  ╝╚╝└─┘─┴┘└─┘  ╩╚═╚═╝╩  ╩═╝" m2 ~7 k% D9 i  e; `
rholang $ Nil% O% \( p( l. S' ^+ W
Deployment cost: CostAccount(0,Cost(0)); k- f5 h1 y6 t" @. e2 D
Storage Contents:
# C1 e* b3 L, _1 d4 R2 i3 v for( x0, x1 + Y7 r1 ~8 h4 y+ {  ^
当你运行更多行数的rholang代码时候,你可以使用RNode的eval模式来执行代码。
6 z$ k0 I0 w3 D& C. D$ rnode eval intersection.rho2 G1 T' m- P% }, R# Q
Evaluating from intersection.rho* e) \) {! W& I. w
Result for intersection.rho:
5 P; J* @2 G" s% cDeployment cost: CostAccount(39,Cost(1132))
8 c+ E0 K* `" {Storage Contents:
7 X4 E5 G3 Y1 u1 j  I' s @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"name"}!(Nil)) | @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"age"}!(Nil)) | @{"world"}!("hello") | for( x0, x1 $ K0 G4 i& L( P
有一些RNode的输出会出现在你运行代码的同一个终端。但是其它一些代码输出会直接出现在第一个终端。  |  Z! D$ \2 z
所以在你熟悉什么输出出现在哪里前请确定好检查两边的终端。: m& I) G) F! A  ?% O
Cryptofex IDE1 |1 g) R1 _( N
一个叫做cryptofex 的开发环境已经进入了alpha版本。
0 R. o9 y6 J& s" m# ?+ [$ Z' x$ pCryptofex可能最后最好的开发rholang的地方,但是现在还是很早期的软件。
$ f9 e" u- J1 J8 ~: Z# o5 H/ uCryptofex提供rholang语法高亮特性并且可以在RChain集成节点上检测dApps。
2 d) R3 K0 V- q* [3 U* s2 KIDE同时也提供环境创建和测试在以太网上,私人测试网上和单独模式的EVM上的智能合约。
2 k0 O8 u! s; ?4 G1 ]0 i发送与标准输出(stdout)* P2 e" B8 Y' ?3 D
说声Hello
& C; Z0 t4 G- Y3 i
, p2 Q4 d; _6 F2 L) c; C$ \编程界有一个存在已久的传统——输出"Hello World"应该是你学习的第一个程序。下面是一个在屏幕上输出"Hello World"的最简单例子。
; G2 U- ^, o7 P0 Vhello.rho
5 S, q. M; p" P" r; @练习
( I' n8 Q5 l" ]请让程序输出"Rholang rocks!" 而不是 “Hello World”。8 ^8 g* c8 k: k" E* }  [( J' d+ L
练习
* t/ S) q" D( {7 Y$ e1 ]: s3 O0 F尝试将"stdout"替换为别的语句。会得到什么结果?6 d" v! i' Z, }/ n" F% E0 {
尝试一下这个有趣的通道名称@"someChannel".这里可以比较随意。请让程序在屏幕上输出 “Sup World”。
8 k; }/ F) \( o& i' R$ E
% P) o" E' K, h- z
标准输出(stdout)到底是什么东西
$ ?" S. @7 c$ w& Q/ S1 b1 w: o, g
( |# m$ M+ i( Q1 Krho语言的核心是通道(channel,下面都称为通道)通信. 通道是你可以用来发送和接收消息的通信线路。你可以使用!字符来在通道中发送消息。, |0 \2 k  \8 L: j; ^

/ m. t" C: r/ F+ T# G8 Jstdout 是一个特殊的通道,用于将文本发送至"标准输出",通常指你的电脑屏幕。正因为它的特殊,我们不得不将它写在第一段学习的代码里面。
3 B- y: N# R" O9 Q1 q使用其他通道: I* g8 b. |8 a" i

4 N" G1 I5 q* Y- k+ E4 G% O实际上你可以在很多通道中发送消息,而非只有stdout。 但其它通道不像 stdout 他们不会在屏幕上显示。. Z( u/ b1 q' ]5 f! U8 O+ U
tupleSpace.rho! m( L( Q" A0 `' I
那么,在其他通道中的消息将被发送至哪里?哪里都不会去!这些消息暂时哪儿都不去,这些消息会继续待在通道内,等待其他人去取出它们。我们将在下一课程中学习如何获取这些消息。同时,消息滞留所在的地方,我们称为 “元组空间”。
% _9 \3 p  q5 Q; Q请确保你的信息保留在元组空间里。你应该会看到像下面的信息。
+ ^3 m, ~1 |$ M8 n4 dStorage Contents:- T8 M, W" U  g- a- c- c
@{"RandoChannel"}!("This won't be on the screen") | for( x0, x1
/ W! J- P& P9 K3 d. y6 J3 q/ W同时做两件事
+ H4 Y5 t6 n3 D
/ U3 I5 X4 x5 x# j& E: a, ~4 M; f在rholang中,我们不会告诉计算机做完一件事,再到另一件。相反,我们会告诉它需要做的所有事情,然后"并行地"执行它们,或者一次性全部执行。  e2 s, C% [4 C5 D' Z5 n' v
parallel.rho( w0 s+ u, h% o9 Y0 m/ _
| 的发音是 “parallel”, 可简称为 “par”。
8 ^+ p/ w% p4 D" U  Y5 H  f练习
2 n( s( t! F& s7 n  \向"pizza shop"通道发送消息"1 large pepperoni please"。
7 h( c2 G* M+ ^练习0 \5 k+ T: K, W8 @" ], P4 {+ k; ^
向"Mom’s Phone"通道发送"Hi Mom"。; X/ C3 X9 F1 z+ [$ ~
练习3 W' \! ?2 B+ g
用一个程序在屏幕上输出两个消息,"Rick"和 “Morty”。* [% C2 s1 ~' k8 ~) |. X) W
小测试8 @( }/ F! f* X
stdout!("Programming!") 将在屏幕上输出什么?" `  t- r& h% S# n% n: U

$ I# S# H1 A  @' L2 dProgramming!+ X% f6 N3 F' T: `/ ^2 K
stdout!
: K4 p2 p" \* C3 @) U0 C" T: nNothing' q1 L! S  {. o4 P9 D  {9 `

& D# M2 R8 \5 K( @7 q# Y( y@"what"!("Up") 在什么通道上发送消息?) F8 ^2 ~( N) Z! K% _  _2 P

! h  l6 Q) e1 x% i- s@"Up"
3 t5 Y  O$ {  S" O+ u@"what"* V* s1 F5 y1 \- k
what
+ U( C0 z$ Z& e( X

. b# D, Z' F* w! F8 [rholang会先执行哪一条语句?4 K  F0 y6 D8 O4 ], l- L+ E
@"stdout"!("Dogs")
1 S/ f  }: n6 H# x; B|
; ~5 M+ }& y. @& _7 X@"stdout"!("Cats")7 E, q5 E  ]* g
& h( D! ~! Q7 c/ G7 m
输出 “Dogs”
" o/ P( M; M, J输出 “Cats”
! ^1 }+ s0 H" a都不。 它们是并行的
( V6 |, E( i; @/ V5 k: w& ]9 l* Q

: ^% J' d& |7 l3 ^+ UPS. 有一个特殊的通道 stderr. 请尝试一下看看往这个通道发送消息,会发生什么?) U6 X+ _) d# g! d" J
有什么区别?
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

nbking2005 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1