Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

rholang 基础教程

nbking2005
63 0 0
配置你的开发环境
# v0 L- z. v9 \, P5 C为了可以运行这个教程里面的rholang代码,你需要一些开发环境。/ `$ E; }  K9 K# {/ P4 g; s
这不是一个会让你感到疲惫的rholang开发工具或者技术栈。
4 [3 n+ }5 o' C1 x( f8 `然而它展示了一些基本的开发环境给你开始。8 G* Q' }* K6 H$ A- M! }2 D- a
网上编译器
7 @1 P; r' A5 r" r5 `# c- KRChain社区的成员提供了一个基于公共网站的在线rholang编译器。
: y6 _7 l( u+ t) f6 ?: E8 y% H这个工具非常有前途,也是一种入门的简单方式。5 S% w$ o+ Z0 Q( c( i( o7 L
但是它还是开发节点,有时候会不稳定。/ U; }0 k: ?7 f
本地节点
* F& |0 |8 I9 t) P% z1 S真正正确运行rholang代码的方法是在通过启动你自己本地机子的RNode然后使用它的rholang编译器。, W! t; d/ b$ `% Z0 t
首先你要为你自己的平台安装 RNode( ?+ _1 n6 N. j! [$ l$ j# c: g( r9 c+ Z
对于初学者,这里有详细的一步一步指导你怎么使用AWS 或者Docker启动你的节点.
: L/ P2 `9 Z. u# C+ |2 i一旦你的RNode安装好了,你可以运行基本的独立节点。0 M: x1 l& U0 M
$ rnode run -s -n9 A/ \$ y# v6 U2 S' l" y
在单独的终端里,你可以在REPL模式下一次执行一行rholang。$ K! u/ ]. }6 n: D4 d
$ rnode repl5 ?# u! R$ j8 x/ T7 G4 v
  ╦═╗┌─┐┬ ┬┌─┐┬┌┐┌  ╔╗╔┌─┐┌┬┐┌─┐  ╦═╗╔═╗╔═╗╦  " A" e8 b& g6 \
  ╠╦╝│  ├─┤├─┤││││  ║║║│ │ ││├┤   ╠╦╝║╣ ╠═╝║  ' v6 r2 n' Q. C- k1 u
  ╩╚═└─┘┴ ┴┴ ┴┴┘└┘  ╝╚╝└─┘─┴┘└─┘  ╩╚═╚═╝╩  ╩═╝
8 b3 _1 n: Q2 e9 f! f' v+ |5 Zrholang $ Nil
2 g2 U6 N$ G6 w: wDeployment cost: CostAccount(0,Cost(0))# Z  F5 p1 l# \6 N9 k, j
Storage Contents:
% c9 R7 C0 s6 F+ s; S for( x0, x1
$ H2 ?% K' A; s1 W当你运行更多行数的rholang代码时候,你可以使用RNode的eval模式来执行代码。
1 E, A0 e( l7 P( _5 j& N$ rnode eval intersection.rho
9 _& p( E9 k  bEvaluating from intersection.rho
# M& W, i: c: h1 dResult for intersection.rho:
) _6 ^" s2 ^2 u+ ZDeployment cost: CostAccount(39,Cost(1132))4 @) \  f, v* k+ e# J- i7 \4 j5 d; E
Storage Contents:
/ A- w: C) O2 X+ k; H. h @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"name"}!(Nil)) | @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"age"}!(Nil)) | @{"world"}!("hello") | for( x0, x1 " x( _( j, m5 I& H. Y. M, O) d
有一些RNode的输出会出现在你运行代码的同一个终端。但是其它一些代码输出会直接出现在第一个终端。
  _+ @) R$ x% a0 i所以在你熟悉什么输出出现在哪里前请确定好检查两边的终端。
3 g: Q+ U1 K1 k2 t, d' i% |Cryptofex IDE
  E6 |3 f. r! T' e( ^一个叫做cryptofex 的开发环境已经进入了alpha版本。, ?3 K6 X+ A( B* B& b. b
Cryptofex可能最后最好的开发rholang的地方,但是现在还是很早期的软件。
: ^. N" Y5 k" PCryptofex提供rholang语法高亮特性并且可以在RChain集成节点上检测dApps。
0 S- f5 y" l/ G' \IDE同时也提供环境创建和测试在以太网上,私人测试网上和单独模式的EVM上的智能合约。
( ^1 r$ H: L* Z4 U- s发送与标准输出(stdout)
( t+ T8 I; n1 I- ]. W说声Hello
8 E* b9 \' {( n" x8 B# M0 N0 h' {6 c1 c5 R
编程界有一个存在已久的传统——输出"Hello World"应该是你学习的第一个程序。下面是一个在屏幕上输出"Hello World"的最简单例子。* N/ m) e/ o, W
hello.rho- i1 V% S3 H  Q6 D- y, S; d
练习- {( W& Q- p( k* {" ~
请让程序输出"Rholang rocks!" 而不是 “Hello World”。' O8 c7 V7 e7 A# V0 U; z/ F. ~
练习
* [) R: {. M7 O9 j9 P尝试将"stdout"替换为别的语句。会得到什么结果?
; I0 j& h6 O3 {/ {# ~2 [' E: c尝试一下这个有趣的通道名称@"someChannel".这里可以比较随意。请让程序在屏幕上输出 “Sup World”。/ ^6 W) y% d5 d' P+ z. C* q3 T

, U( C% R$ `, h$ O$ q标准输出(stdout)到底是什么东西# x3 H0 d0 z, v, ^3 Q. [' E& V. V& |

- ~3 U! z8 w1 v1 b  l% grho语言的核心是通道(channel,下面都称为通道)通信. 通道是你可以用来发送和接收消息的通信线路。你可以使用!字符来在通道中发送消息。- ^, l' x+ V+ u/ s# k* [/ ~4 s

" Z: U) o$ F9 b# U7 hstdout 是一个特殊的通道,用于将文本发送至"标准输出",通常指你的电脑屏幕。正因为它的特殊,我们不得不将它写在第一段学习的代码里面。- P1 a& M7 [' }& A4 L
使用其他通道9 B; v; t: _' t7 [( E; V9 z% [8 ?
' F4 D6 Y: f# r
实际上你可以在很多通道中发送消息,而非只有stdout。 但其它通道不像 stdout 他们不会在屏幕上显示。, ?1 ^, u  M1 E2 K
tupleSpace.rho
( [- }$ U/ V7 V% ]' {; W9 m那么,在其他通道中的消息将被发送至哪里?哪里都不会去!这些消息暂时哪儿都不去,这些消息会继续待在通道内,等待其他人去取出它们。我们将在下一课程中学习如何获取这些消息。同时,消息滞留所在的地方,我们称为 “元组空间”。
4 m  L* N; i6 O) R3 P5 u3 u请确保你的信息保留在元组空间里。你应该会看到像下面的信息。' Q1 c. Z0 G3 ^, _8 b/ D4 I
Storage Contents:
1 i" k" }; I" M! [7 p0 C@{"RandoChannel"}!("This won't be on the screen") | for( x0, x1
( \- Q2 g/ d# l% \/ X% K. v# y% L; X8 u同时做两件事8 k4 {( E/ B4 m. S" ~

, p$ ]5 k0 G1 \) n9 h1 L' b在rholang中,我们不会告诉计算机做完一件事,再到另一件。相反,我们会告诉它需要做的所有事情,然后"并行地"执行它们,或者一次性全部执行。
6 n+ r8 j  ~0 |3 W6 v& e8 }' o- l* Tparallel.rho
% U, q: x7 ?! O% [4 {| 的发音是 “parallel”, 可简称为 “par”。6 U: T- _6 V4 P3 Z, z
练习& G) D( r3 O% j' S
向"pizza shop"通道发送消息"1 large pepperoni please"。! x& B+ ]: r& M. J* @# A0 J8 j2 p$ y
练习
# S1 G5 o- K7 P向"Mom’s Phone"通道发送"Hi Mom"。
% }+ k6 z- O8 P8 m练习3 i0 E$ l$ t0 `2 F8 F& v) c
用一个程序在屏幕上输出两个消息,"Rick"和 “Morty”。. d2 p- d, |4 B9 G3 i
小测试
; V6 d' A9 B. \2 @7 bstdout!("Programming!") 将在屏幕上输出什么?% `0 s( ~: t. n, J

( ~' A8 ~0 @1 R6 ^4 _" KProgramming!
+ K: X3 ?, O7 r7 G" B+ ?$ hstdout!
# `. K: x# W$ B6 F& \: MNothing
* ?2 }$ p2 }" @2 y5 o; Y4 z4 I; G
9 x. x0 n! F8 e7 o
@"what"!("Up") 在什么通道上发送消息?
( C4 m' a  T$ ]7 L
5 [/ T6 V2 S" d! G" Q: ~@"Up"& A2 [% g; K1 @+ v5 g# o( n
@"what"0 k' j5 F1 u' ^
what
: k0 z* Z, b: `3 X
* I! W9 [% s1 j# W1 X1 a
rholang会先执行哪一条语句?, V" m2 T6 L/ x
@"stdout"!("Dogs")
0 z0 x! t1 H! J9 i% f/ H% Y1 @6 e|3 w7 e( i/ v: B" I3 ^+ l
@"stdout"!("Cats")
' ]4 D) C! _% t" L3 L2 x0 b8 k/ b9 ?( m
输出 “Dogs”% P* F' B# x; v& K, t
输出 “Cats”
4 [' K( d4 }. c4 N; ]都不。 它们是并行的
: B; N& @  `, H

  S: {2 Z* r7 U) D+ E3 lPS. 有一个特殊的通道 stderr. 请尝试一下看看往这个通道发送消息,会发生什么?
" `5 B. K# t- ?! s" Q. t1 P, [  ]有什么区别?
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

nbking2005 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1