Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

rholang 基础教程

nbking2005
80 0 0
配置你的开发环境. z; g+ S3 |1 V: ?2 r# l
为了可以运行这个教程里面的rholang代码,你需要一些开发环境。6 s$ Z$ f) \+ o9 C# @+ F- {
这不是一个会让你感到疲惫的rholang开发工具或者技术栈。( n9 \/ J% d/ B# M) l. T
然而它展示了一些基本的开发环境给你开始。3 {1 S4 ^# E$ x* t
网上编译器1 P3 i/ L0 x- g; e4 }4 `" u
RChain社区的成员提供了一个基于公共网站的在线rholang编译器。* k/ u3 ]8 t5 ]- v' {1 ^8 F
这个工具非常有前途,也是一种入门的简单方式。8 @4 g% X& `) z& A. v
但是它还是开发节点,有时候会不稳定。
. S& C- }2 l0 f0 U1 T# b本地节点
0 A0 Q" x% M3 @真正正确运行rholang代码的方法是在通过启动你自己本地机子的RNode然后使用它的rholang编译器。
; e  w; k8 K/ P6 E" |) L* p# b首先你要为你自己的平台安装 RNode3 K1 x( y; X4 O; @+ a) i
对于初学者,这里有详细的一步一步指导你怎么使用AWS 或者Docker启动你的节点.. D( G3 |; d& f% q0 r2 D& v
一旦你的RNode安装好了,你可以运行基本的独立节点。
0 ]5 u' L; Y. y7 y8 F$ rnode run -s -n
2 B7 @: W& E$ Y- c在单独的终端里,你可以在REPL模式下一次执行一行rholang。$ W* M- U3 {  ^/ e5 [# V
$ rnode repl$ }) x1 c8 }* c. ?  @7 B
  ╦═╗┌─┐┬ ┬┌─┐┬┌┐┌  ╔╗╔┌─┐┌┬┐┌─┐  ╦═╗╔═╗╔═╗╦  
3 L5 x* e$ }7 N  Y; |2 V, Q  ╠╦╝│  ├─┤├─┤││││  ║║║│ │ ││├┤   ╠╦╝║╣ ╠═╝║  
% x& L+ {8 F( i% |  ╩╚═└─┘┴ ┴┴ ┴┴┘└┘  ╝╚╝└─┘─┴┘└─┘  ╩╚═╚═╝╩  ╩═╝
, H3 v# `/ A5 }! W: t+ Lrholang $ Nil8 m0 _4 L' }) q3 h
Deployment cost: CostAccount(0,Cost(0))
& v- p6 c# c" t, @* H: {7 IStorage Contents:' h# X2 c" k, m. l
for( x0, x1 3 q) @% V7 q( {! e" n6 D. Q
当你运行更多行数的rholang代码时候,你可以使用RNode的eval模式来执行代码。
0 f- ~4 u  h+ ]9 _6 I3 \$ rnode eval intersection.rho5 C5 P! Q7 {' W/ G' i: ]# Z+ }
Evaluating from intersection.rho
9 q( e7 M$ ~" b: C0 F* {& f2 [9 T, ^Result for intersection.rho:
4 P, |& o6 Y1 y) X* m4 DDeployment cost: CostAccount(39,Cost(1132))
* ^6 k' d2 A5 N5 h; x; L8 HStorage Contents:$ p2 Q" g5 d1 _
@{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"name"}!(Nil)) | @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"age"}!(Nil)) | @{"world"}!("hello") | for( x0, x1
( g8 p7 X3 V; n. t& d6 P) I, {8 o, }有一些RNode的输出会出现在你运行代码的同一个终端。但是其它一些代码输出会直接出现在第一个终端。: k  n/ N1 Q. }3 z* s8 z
所以在你熟悉什么输出出现在哪里前请确定好检查两边的终端。
) N% u+ g  E& V  J6 RCryptofex IDE1 s5 F: Y' `& n6 g( {
一个叫做cryptofex 的开发环境已经进入了alpha版本。
% ^2 F- g& ^4 O+ |Cryptofex可能最后最好的开发rholang的地方,但是现在还是很早期的软件。5 z& Y0 r$ o  ?7 J
Cryptofex提供rholang语法高亮特性并且可以在RChain集成节点上检测dApps。; a2 R: b* m0 p9 p( w1 V; m
IDE同时也提供环境创建和测试在以太网上,私人测试网上和单独模式的EVM上的智能合约。
4 w, H0 f/ a. K; z4 M1 y发送与标准输出(stdout)
8 y- _8 s. n7 E0 n  `4 K! C说声Hello8 T6 M6 D1 f; @/ r& Q

5 y8 v* l3 _( t$ J5 \; v编程界有一个存在已久的传统——输出"Hello World"应该是你学习的第一个程序。下面是一个在屏幕上输出"Hello World"的最简单例子。% {% \1 L5 Q2 ^. C2 Y4 j4 B7 L
hello.rho% b% Z4 f& y$ ~5 i* d, p+ w0 @
练习
* V* o2 d  \0 n, _6 r请让程序输出"Rholang rocks!" 而不是 “Hello World”。  B  K, h. ?* I7 ~8 y" v! R
练习
: ^! w, W$ E6 `. b5 I! g) s尝试将"stdout"替换为别的语句。会得到什么结果?# a- I7 |% _" c( ]$ f, K9 I9 y
尝试一下这个有趣的通道名称@"someChannel".这里可以比较随意。请让程序在屏幕上输出 “Sup World”。  f* m: n8 I6 [' e& J

2 e; ^! b" k) K1 `( f7 T标准输出(stdout)到底是什么东西' R* t- K0 a  M
; D; c! C! l1 T& e1 I2 d" s$ T
rho语言的核心是通道(channel,下面都称为通道)通信. 通道是你可以用来发送和接收消息的通信线路。你可以使用!字符来在通道中发送消息。1 L: t  y$ e0 C1 `6 A- Q

. T) Z* V" u$ a/ V7 Xstdout 是一个特殊的通道,用于将文本发送至"标准输出",通常指你的电脑屏幕。正因为它的特殊,我们不得不将它写在第一段学习的代码里面。
& R( e5 Z% x7 D" F* S% G, h/ s" J使用其他通道
" u" R3 `0 R8 y/ O
8 ~7 M* n( t$ t; M3 b实际上你可以在很多通道中发送消息,而非只有stdout。 但其它通道不像 stdout 他们不会在屏幕上显示。
/ x  s9 W0 T9 A; N4 xtupleSpace.rho
6 R  F- K  q" N0 Y! L9 H) x那么,在其他通道中的消息将被发送至哪里?哪里都不会去!这些消息暂时哪儿都不去,这些消息会继续待在通道内,等待其他人去取出它们。我们将在下一课程中学习如何获取这些消息。同时,消息滞留所在的地方,我们称为 “元组空间”。
" V3 ~* h  I8 V6 a: |' x. \$ I请确保你的信息保留在元组空间里。你应该会看到像下面的信息。2 \" C. H& N) X3 Q) U1 @$ l
Storage Contents:" `' v! t  i$ s: o( N
@{"RandoChannel"}!("This won't be on the screen") | for( x0, x13 D1 |4 u8 ~$ f; ~
同时做两件事
( K- T# {/ L" |' X7 m1 K3 W+ R; m0 M8 C  L
在rholang中,我们不会告诉计算机做完一件事,再到另一件。相反,我们会告诉它需要做的所有事情,然后"并行地"执行它们,或者一次性全部执行。1 w  d4 G! h  j7 J' n6 O
parallel.rho' u8 ^6 O) ], Y/ ~. O. B
| 的发音是 “parallel”, 可简称为 “par”。
& j" b# v& O, V8 R9 C练习
" a. t& b# x9 l向"pizza shop"通道发送消息"1 large pepperoni please"。
4 w3 X5 N5 X) @. y' ^练习
6 N* M3 n: K/ [8 P7 W8 w7 L向"Mom’s Phone"通道发送"Hi Mom"。
5 E7 C, M) L4 B+ }9 y4 g练习$ m0 R- c4 A2 D7 z6 U4 {1 C
用一个程序在屏幕上输出两个消息,"Rick"和 “Morty”。
6 w# K) C0 v$ w9 b+ K6 o. k" ]小测试/ T4 |* G; Z# d* m8 L7 o- r
stdout!("Programming!") 将在屏幕上输出什么?
2 p3 B0 ^- o: M! w! W  h& V9 }; s& K* s9 [8 S
Programming!* j1 N  k' U& p9 c' x
stdout!$ ^$ G( v4 O, l% k$ E$ Z8 m
Nothing* `( W! s8 v: ]9 ~
+ E+ Q) N! N8 c3 w% B
@"what"!("Up") 在什么通道上发送消息?8 S- b5 P) w* t0 c' U$ s3 F
' h9 T9 _7 n, U0 k8 O( l1 O
@"Up"* H- O# ~% j& V& |) O8 \
@"what"
  x* z8 m9 y! S* i+ Jwhat- Q0 ^3 e0 ]3 [+ U/ N1 s# E2 j0 C

" E% ^9 w( J1 \1 S( I  S7 v' \rholang会先执行哪一条语句?
- Q; P: X# d, E@"stdout"!("Dogs")' L. V/ j, a; r, K: S% d3 q3 W
|
, R: {# U5 s7 f  x1 ~2 O2 c! f@"stdout"!("Cats")9 ~& f: I+ P3 V- d2 f5 G
* p1 ?; ?" \  N6 Q  V- t' C) M4 T
输出 “Dogs”1 A; \) ^5 q2 P8 I/ v% K- h
输出 “Cats”
+ V/ [1 \8 t1 @. a% c都不。 它们是并行的5 o6 D* P8 O) r/ o/ g
  ~& l. D$ A. ^5 s0 V5 i2 J- @
PS. 有一个特殊的通道 stderr. 请尝试一下看看往这个通道发送消息,会发生什么?
8 R+ x) o  x7 M/ o6 x3 N  J8 ~2 f( U/ @有什么区别?
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

nbking2005 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1