Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

rholang 基础教程

nbking2005
172 0 0
配置你的开发环境' n5 T9 w8 Y; k( I4 H
为了可以运行这个教程里面的rholang代码,你需要一些开发环境。7 W# T/ M' {& M
这不是一个会让你感到疲惫的rholang开发工具或者技术栈。: S; [2 [2 u) }9 X- L  W
然而它展示了一些基本的开发环境给你开始。
# ^4 e  ]: C+ I! f# e& `网上编译器1 Z$ Q6 ]7 H# x: O# X
RChain社区的成员提供了一个基于公共网站的在线rholang编译器。
% I& ~: V% Y9 l8 R4 ]这个工具非常有前途,也是一种入门的简单方式。, Y( I, W+ T/ c
但是它还是开发节点,有时候会不稳定。
9 ?$ {/ F: ^8 I0 b, D. j* Z本地节点
+ |: d+ c+ G7 ^7 m0 H9 q真正正确运行rholang代码的方法是在通过启动你自己本地机子的RNode然后使用它的rholang编译器。
' K3 p2 y0 s6 W/ R2 i# _6 U6 j首先你要为你自己的平台安装 RNode
1 V7 y) _1 K: e5 u# f对于初学者,这里有详细的一步一步指导你怎么使用AWS 或者Docker启动你的节点.
5 t! O: l$ \, [. Z0 n: j% T一旦你的RNode安装好了,你可以运行基本的独立节点。' _5 x! ]2 y1 [% y/ D
$ rnode run -s -n1 a& n; u! Z$ _: A, ^" T; u/ H& J
在单独的终端里,你可以在REPL模式下一次执行一行rholang。
9 Z0 p! p5 _4 w! b9 [1 U/ Q$ rnode repl
9 V5 s$ I. y( h& d3 i  ╦═╗┌─┐┬ ┬┌─┐┬┌┐┌  ╔╗╔┌─┐┌┬┐┌─┐  ╦═╗╔═╗╔═╗╦    O' m' B& g% @' ~8 J! `# O' q
  ╠╦╝│  ├─┤├─┤││││  ║║║│ │ ││├┤   ╠╦╝║╣ ╠═╝║  
9 V. ?2 O# C# c9 z) h  ╩╚═└─┘┴ ┴┴ ┴┴┘└┘  ╝╚╝└─┘─┴┘└─┘  ╩╚═╚═╝╩  ╩═╝
4 h- y; r* w* P8 j  c' }& qrholang $ Nil
0 m4 t( u- h* L+ K9 L% {Deployment cost: CostAccount(0,Cost(0))
: D- Q; C0 |* J$ j( AStorage Contents:* Y" P9 z. Z9 a  m9 B9 H
for( x0, x1 ' C. z. c7 t1 M* r
当你运行更多行数的rholang代码时候,你可以使用RNode的eval模式来执行代码。
% w* \; u" c  `8 h$ rnode eval intersection.rho  T, r3 C0 q* w6 H; V
Evaluating from intersection.rho
6 q' N/ b* f" vResult for intersection.rho:
# M. u0 f2 u5 U: l, }Deployment cost: CostAccount(39,Cost(1132))" E- b) ^8 o: q" l4 x8 \
Storage Contents:6 `% r; S: n4 ?0 m* E( H6 d
@{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"name"}!(Nil)) | @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"age"}!(Nil)) | @{"world"}!("hello") | for( x0, x1 9 k' a! [: ~1 E1 V! a6 Y) ]$ j
有一些RNode的输出会出现在你运行代码的同一个终端。但是其它一些代码输出会直接出现在第一个终端。
8 |. i/ X0 P& c3 a0 e+ [所以在你熟悉什么输出出现在哪里前请确定好检查两边的终端。0 M6 _2 `! D7 M
Cryptofex IDE) ]( j5 ?) c+ p* j
一个叫做cryptofex 的开发环境已经进入了alpha版本。3 e4 S6 P6 J" M
Cryptofex可能最后最好的开发rholang的地方,但是现在还是很早期的软件。
/ z8 j/ h& d' o2 o5 N  SCryptofex提供rholang语法高亮特性并且可以在RChain集成节点上检测dApps。4 D6 I3 U1 @( Z1 b
IDE同时也提供环境创建和测试在以太网上,私人测试网上和单独模式的EVM上的智能合约。: O5 [% h5 h2 }: B9 X: c7 X; @
发送与标准输出(stdout)$ |1 Y  S7 I. q" |7 c" W; u
说声Hello" u  Y$ b: C0 m  I/ G
' V- U9 ?! m# m$ R1 F5 O+ O4 H
编程界有一个存在已久的传统——输出"Hello World"应该是你学习的第一个程序。下面是一个在屏幕上输出"Hello World"的最简单例子。
8 U6 Y/ j" {# g) I) ihello.rho6 ~7 O7 x6 F4 f7 u
练习: P" w1 _$ h& Z! l
请让程序输出"Rholang rocks!" 而不是 “Hello World”。
0 l  u7 j) j/ g练习& |5 o5 _  `, F) j- `. Z8 m8 {" f9 J
尝试将"stdout"替换为别的语句。会得到什么结果?2 x9 O5 V, F1 l6 g
尝试一下这个有趣的通道名称@"someChannel".这里可以比较随意。请让程序在屏幕上输出 “Sup World”。- Z3 c$ c; f" _+ P3 l( u1 ]% \

8 ^+ J6 s. }5 i$ O) P& }" E标准输出(stdout)到底是什么东西
  @" G7 t0 `/ p! O+ `/ P
9 _2 S# u& [; c' j7 v. s' @rho语言的核心是通道(channel,下面都称为通道)通信. 通道是你可以用来发送和接收消息的通信线路。你可以使用!字符来在通道中发送消息。
5 h8 u: S$ k4 ~7 U* H2 M/ _" s1 N9 H5 k2 i0 J
stdout 是一个特殊的通道,用于将文本发送至"标准输出",通常指你的电脑屏幕。正因为它的特殊,我们不得不将它写在第一段学习的代码里面。
$ ]! C1 z) s1 B. R  h使用其他通道
2 O' r* L0 Z6 M8 R" u/ B1 n7 U
5 g% [* W) ^! h& B2 u  h实际上你可以在很多通道中发送消息,而非只有stdout。 但其它通道不像 stdout 他们不会在屏幕上显示。: Q$ [) i- z% H9 j. h+ c
tupleSpace.rho& ~- G$ c) v% N; I0 P1 x) f# v& N
那么,在其他通道中的消息将被发送至哪里?哪里都不会去!这些消息暂时哪儿都不去,这些消息会继续待在通道内,等待其他人去取出它们。我们将在下一课程中学习如何获取这些消息。同时,消息滞留所在的地方,我们称为 “元组空间”。3 f% t3 e' H6 C
请确保你的信息保留在元组空间里。你应该会看到像下面的信息。
- P5 d7 k/ \* O0 q- W$ `! pStorage Contents:
/ B) a: R2 {8 |9 ]. |@{"RandoChannel"}!("This won't be on the screen") | for( x0, x1
9 \8 H$ }! p0 v同时做两件事
$ k1 N; D. J2 S6 R1 ~( g. ^& q. Q3 X# E, p5 k7 l. f/ f* ]
在rholang中,我们不会告诉计算机做完一件事,再到另一件。相反,我们会告诉它需要做的所有事情,然后"并行地"执行它们,或者一次性全部执行。
6 x- b! Q0 ~, I' u/ S$ W' eparallel.rho
* O* G5 b# D2 `| 的发音是 “parallel”, 可简称为 “par”。
( E7 w. F: j- I练习9 M4 ?# A9 B1 H1 ~7 t  l6 Z
向"pizza shop"通道发送消息"1 large pepperoni please"。4 E5 T8 k4 f/ p  [& k1 q
练习0 y' s$ W9 g8 l# d1 r/ Y/ M
向"Mom’s Phone"通道发送"Hi Mom"。
9 Q1 \2 C/ }- N+ `9 |4 [$ p% `练习
# N; M# ?3 e, T: e2 U. n0 v用一个程序在屏幕上输出两个消息,"Rick"和 “Morty”。- l0 ?' J  Y, J
小测试
! k0 ~, f3 x7 ?stdout!("Programming!") 将在屏幕上输出什么?% i  ]- |8 X5 f- Q1 B
2 o- x1 k6 D& [4 U
Programming!) V( m  d' R- P1 t+ F
stdout!* v/ Z0 Q' z8 M: h
Nothing, f9 ?! T+ F6 k* l

/ a0 Q  u  O" ?9 \@"what"!("Up") 在什么通道上发送消息?. G7 C# D1 M! a+ O4 g

# v) B# ~; a/ I! s. J3 A% P' Z@"Up"4 D9 i9 n5 o  p2 l1 T' j
@"what"* G* @. }3 b9 f5 _7 Y
what
0 _4 x% `. @9 M; ~# x4 E
& d1 H* P: V& j+ ?. |
rholang会先执行哪一条语句?6 A$ ?; [1 A' F3 ?. K
@"stdout"!("Dogs"). X) D. }3 }- ?4 T
|& S1 F! j% X% p0 c) F1 t6 Y
@"stdout"!("Cats"); [- n% P# h$ l% t3 d* h9 j
# a$ {3 R' ?8 p. _) D9 y
输出 “Dogs”# R5 Q! ?9 k5 p3 M) y
输出 “Cats”3 }2 D# G' B& G; I4 v2 v) u- K8 r9 M
都不。 它们是并行的: K( l" u. ~/ X

% d5 E/ D: F/ p% ~2 @8 M+ uPS. 有一个特殊的通道 stderr. 请尝试一下看看往这个通道发送消息,会发生什么?- {- d8 n& K, K6 y
有什么区别?
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

nbking2005 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1