Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

rholang 基础教程

nbking2005
198 0 0
配置你的开发环境3 |- V9 o' b7 a0 Z0 Y) n
为了可以运行这个教程里面的rholang代码,你需要一些开发环境。
6 t* X: {" a6 I* ]/ l6 b: F这不是一个会让你感到疲惫的rholang开发工具或者技术栈。. P7 ]  ?. C- `; Q; d/ B( h
然而它展示了一些基本的开发环境给你开始。9 A0 M+ f  U  @5 R* N
网上编译器- ?/ {* a7 L  s/ j4 y- z. N
RChain社区的成员提供了一个基于公共网站的在线rholang编译器。
+ E+ E$ q! F7 R$ y" d这个工具非常有前途,也是一种入门的简单方式。7 K* F. n9 ?9 P+ j+ S# O
但是它还是开发节点,有时候会不稳定。
; U; F9 |) f6 ~! C本地节点
% P" a/ X9 O7 h& I' i( C. P真正正确运行rholang代码的方法是在通过启动你自己本地机子的RNode然后使用它的rholang编译器。
$ c& ^8 |7 E/ h; v/ v" P首先你要为你自己的平台安装 RNode4 R9 }  i" B: |9 ?
对于初学者,这里有详细的一步一步指导你怎么使用AWS 或者Docker启动你的节点.
4 T1 I4 u) L* k一旦你的RNode安装好了,你可以运行基本的独立节点。
4 r- m/ T) J" W$ rnode run -s -n+ ^3 `9 m6 J8 k# L7 G  N' l4 \
在单独的终端里,你可以在REPL模式下一次执行一行rholang。
. j4 t. Z  R' W0 ]$ K0 ^7 F- t2 ~$ rnode repl' o  P' ?9 w" X+ M) N
  ╦═╗┌─┐┬ ┬┌─┐┬┌┐┌  ╔╗╔┌─┐┌┬┐┌─┐  ╦═╗╔═╗╔═╗╦  
6 z( E9 O5 n1 b7 p  ╠╦╝│  ├─┤├─┤││││  ║║║│ │ ││├┤   ╠╦╝║╣ ╠═╝║    f7 E9 S0 x9 o- B" {
  ╩╚═└─┘┴ ┴┴ ┴┴┘└┘  ╝╚╝└─┘─┴┘└─┘  ╩╚═╚═╝╩  ╩═╝, v: E) T  R; E, I
rholang $ Nil1 z* m, o* ~. I. ?
Deployment cost: CostAccount(0,Cost(0))
/ H/ t, b5 j/ m; CStorage Contents:
7 Q! w9 u8 [+ Q7 }. `; s+ l for( x0, x1
0 c  _6 S2 f9 N, Z/ j5 J+ V' p当你运行更多行数的rholang代码时候,你可以使用RNode的eval模式来执行代码。  e: w/ _7 n$ [9 K6 ?& Y* ?
$ rnode eval intersection.rho
5 X* D0 p# s2 W. BEvaluating from intersection.rho
# O1 V1 l( s( QResult for intersection.rho:/ ~8 }; z, d# Y5 f2 D. N& V) n
Deployment cost: CostAccount(39,Cost(1132))
0 a) u( i( V0 _7 l% [Storage Contents:9 r6 N) V4 s, H  y- l  Z1 j4 i% ~* ]
@{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"name"}!(Nil)) | @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"age"}!(Nil)) | @{"world"}!("hello") | for( x0, x1
# D/ |% Y  ?2 @" j& z有一些RNode的输出会出现在你运行代码的同一个终端。但是其它一些代码输出会直接出现在第一个终端。
. l6 |, I, F8 y( A0 w/ T所以在你熟悉什么输出出现在哪里前请确定好检查两边的终端。6 V! l% m4 X$ k1 c* y
Cryptofex IDE6 Q1 i( o* ?' [' h9 h2 o
一个叫做cryptofex 的开发环境已经进入了alpha版本。
5 d; s( f( p& Y5 t5 @& ]1 ~2 Z* jCryptofex可能最后最好的开发rholang的地方,但是现在还是很早期的软件。
& E5 E5 k! D) J4 UCryptofex提供rholang语法高亮特性并且可以在RChain集成节点上检测dApps。( [. Y; ~( b+ X* i: a2 k
IDE同时也提供环境创建和测试在以太网上,私人测试网上和单独模式的EVM上的智能合约。$ I5 m( \% @3 I- |: O
发送与标准输出(stdout)1 @4 @2 W! @" o; M. }" y1 j1 r
说声Hello' x+ d, U8 J7 {: I

+ N& r% X9 p! Q6 w$ H编程界有一个存在已久的传统——输出"Hello World"应该是你学习的第一个程序。下面是一个在屏幕上输出"Hello World"的最简单例子。9 Y# M2 a  Z/ y3 `
hello.rho; T& h8 |, O) X" t4 Q, z
练习
3 b5 Z- M( m! c/ B: Z/ ?请让程序输出"Rholang rocks!" 而不是 “Hello World”。
/ n+ N; }/ [9 w9 Y$ A6 B, @练习8 k  d8 K4 [$ z5 d$ r! _
尝试将"stdout"替换为别的语句。会得到什么结果?" o+ `1 i1 [- x7 o# j
尝试一下这个有趣的通道名称@"someChannel".这里可以比较随意。请让程序在屏幕上输出 “Sup World”。0 ]& H( d# j! y
. S! E: P  B, V7 A. w+ q0 }
标准输出(stdout)到底是什么东西5 z! O/ `7 P$ F& u  Q) i
0 Z5 x6 F3 K' x1 }" D: N
rho语言的核心是通道(channel,下面都称为通道)通信. 通道是你可以用来发送和接收消息的通信线路。你可以使用!字符来在通道中发送消息。
4 d$ s% v$ y, _1 r' W
( ~1 n* g# |% l& G2 a% y% xstdout 是一个特殊的通道,用于将文本发送至"标准输出",通常指你的电脑屏幕。正因为它的特殊,我们不得不将它写在第一段学习的代码里面。$ C. E; J( O9 m: ?4 _& M( S& d+ x/ ?
使用其他通道
4 E& }# I$ a1 H2 b$ |/ ]
6 v# J, M6 i6 U/ s+ _( M4 r实际上你可以在很多通道中发送消息,而非只有stdout。 但其它通道不像 stdout 他们不会在屏幕上显示。
) D8 W) a% f3 w$ z" @1 L; G6 |tupleSpace.rho
- \7 l+ Q- `2 X  z9 k3 O那么,在其他通道中的消息将被发送至哪里?哪里都不会去!这些消息暂时哪儿都不去,这些消息会继续待在通道内,等待其他人去取出它们。我们将在下一课程中学习如何获取这些消息。同时,消息滞留所在的地方,我们称为 “元组空间”。
+ a0 b: q; `# n, {, \+ C请确保你的信息保留在元组空间里。你应该会看到像下面的信息。
- R( m  R( I8 l8 o2 r$ W- f! YStorage Contents:
7 x) Q* ~$ Z3 E@{"RandoChannel"}!("This won't be on the screen") | for( x0, x1, h* N( Z1 Z3 s& {
同时做两件事$ c" G" i1 s- P3 q& ^

' q$ j, y5 k) H$ B7 A& l5 \在rholang中,我们不会告诉计算机做完一件事,再到另一件。相反,我们会告诉它需要做的所有事情,然后"并行地"执行它们,或者一次性全部执行。+ q3 S, E8 O5 q: T0 ?
parallel.rho
  {- Q! {. M. H) K| 的发音是 “parallel”, 可简称为 “par”。% r! X0 `* n, \% u8 R2 U3 n
练习
& D! S% F8 {: v3 ?) X向"pizza shop"通道发送消息"1 large pepperoni please"。
1 T9 f" C- _7 I' X' s% a$ r练习8 U: G; ~7 g9 w3 q& [4 C
向"Mom’s Phone"通道发送"Hi Mom"。. X4 _0 W/ `0 w  r4 B, `9 {& R9 R3 S3 v
练习
/ k  ?7 A3 h9 N! S- p用一个程序在屏幕上输出两个消息,"Rick"和 “Morty”。
0 c+ @  J: z# L3 _小测试! R, W8 H- H2 M/ e1 m
stdout!("Programming!") 将在屏幕上输出什么?
. W3 s6 X, L0 r, k- }
4 d/ s  W3 U+ d/ f" |Programming!
9 N: A* b! f- @! [% c8 ustdout!5 _- O0 k  {0 C, g1 q- x% }
Nothing
& a0 [. d. x8 r. O2 P8 [0 @1 n& ^. _
0 j) h8 }2 N: `  c! V
@"what"!("Up") 在什么通道上发送消息?5 p/ u/ d+ w1 ~" a% G5 _0 s

. n8 R. ^8 I! Q2 n, B@"Up"2 U) m% H! w2 ~( ?6 p' g: p% Q( w
@"what"- P' u0 r! [# X
what/ H. N1 @3 K. V3 c$ U

+ K' L$ v# j) N  Krholang会先执行哪一条语句?1 M$ c! t$ _+ G  Q
@"stdout"!("Dogs")7 }* B# |! k: z/ n! V* ]& |
|# B0 \  n5 t2 ]. d
@"stdout"!("Cats")
3 S3 I( O/ ?4 c* ]  Q1 i: _& }' }% p) ^  j' B2 V
输出 “Dogs”; v; j# B$ q4 g4 y! I( S+ U
输出 “Cats”6 h5 D* P6 V! m5 M
都不。 它们是并行的
" B" c# B) Z, M
! J* }' K2 r3 ^% h+ F5 |* D3 P7 |+ S
PS. 有一个特殊的通道 stderr. 请尝试一下看看往这个通道发送消息,会发生什么?
  P: h, m. A, d8 ?* ~; F6 z有什么区别?
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

nbking2005 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1