Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

rholang 基础教程

nbking2005
107 0 0
配置你的开发环境$ a2 r$ R: o" r; L
为了可以运行这个教程里面的rholang代码,你需要一些开发环境。6 V+ k6 n% P: z, i% [) t
这不是一个会让你感到疲惫的rholang开发工具或者技术栈。
# P7 Y# n# J8 O! \然而它展示了一些基本的开发环境给你开始。. I2 f3 ^6 G2 D& U  a
网上编译器# D1 T: h2 \% A# c' d7 e
RChain社区的成员提供了一个基于公共网站的在线rholang编译器。
. h1 ~5 r- H( p8 q1 K4 W这个工具非常有前途,也是一种入门的简单方式。- M5 m1 H' H2 ^& z# L
但是它还是开发节点,有时候会不稳定。! H3 a1 w6 s% P9 H% h7 e9 o) t% r
本地节点+ W$ {2 X% n* N) n* E! ?( a
真正正确运行rholang代码的方法是在通过启动你自己本地机子的RNode然后使用它的rholang编译器。  Z# ~0 Q$ I2 n, f; a1 g
首先你要为你自己的平台安装 RNode$ Y! T8 }: i8 u# r) f
对于初学者,这里有详细的一步一步指导你怎么使用AWS 或者Docker启动你的节点.
) g( l# s! [% d3 a一旦你的RNode安装好了,你可以运行基本的独立节点。
5 i. [( x. U) U$ A+ v$ n& q: h( ]$ rnode run -s -n6 H, ^7 r( q! ~0 O" N+ g* y2 [' q
在单独的终端里,你可以在REPL模式下一次执行一行rholang。
5 c) r7 n, g. J  p$ rnode repl
  [% _$ z- C  n7 G/ p4 r  ╦═╗┌─┐┬ ┬┌─┐┬┌┐┌  ╔╗╔┌─┐┌┬┐┌─┐  ╦═╗╔═╗╔═╗╦  
2 k3 V; Q1 K% l: l  ╠╦╝│  ├─┤├─┤││││  ║║║│ │ ││├┤   ╠╦╝║╣ ╠═╝║  . z6 p' j; T1 g$ A2 `' ^* [
  ╩╚═└─┘┴ ┴┴ ┴┴┘└┘  ╝╚╝└─┘─┴┘└─┘  ╩╚═╚═╝╩  ╩═╝
* g5 u4 ?0 J/ P& urholang $ Nil% P* w5 [0 P, R7 h7 G
Deployment cost: CostAccount(0,Cost(0))
8 F3 h/ z8 m3 {8 n2 ~1 @% K. ^! w3 ?Storage Contents:
+ g, a7 |8 a, M3 j for( x0, x1
  g& O' I' B% z# ]3 L) n6 c* @. V2 u当你运行更多行数的rholang代码时候,你可以使用RNode的eval模式来执行代码。
3 @" k$ [6 J$ C$ A/ P9 m- }7 J9 T: ~" S$ rnode eval intersection.rho
  `, G) V. |7 qEvaluating from intersection.rho
; R8 S' c5 D" OResult for intersection.rho:
) _+ H% W4 {% Y7 o+ i9 F  kDeployment cost: CostAccount(39,Cost(1132))# V- n% v6 W" Q6 Q  I3 B, I
Storage Contents:
0 X6 E2 q  p9 i @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"name"}!(Nil)) | @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"age"}!(Nil)) | @{"world"}!("hello") | for( x0, x1 " z( C4 f$ S! |$ Z' |
有一些RNode的输出会出现在你运行代码的同一个终端。但是其它一些代码输出会直接出现在第一个终端。
5 }! g8 @+ }* \所以在你熟悉什么输出出现在哪里前请确定好检查两边的终端。  @' S% D4 [3 ^
Cryptofex IDE
" i! ~; S! p. n' h一个叫做cryptofex 的开发环境已经进入了alpha版本。1 s$ t  U, d) }6 q1 x: M& t/ \
Cryptofex可能最后最好的开发rholang的地方,但是现在还是很早期的软件。
/ r. y7 |/ Z) t8 N$ x! xCryptofex提供rholang语法高亮特性并且可以在RChain集成节点上检测dApps。
3 V0 l8 L- n! j4 u& r+ NIDE同时也提供环境创建和测试在以太网上,私人测试网上和单独模式的EVM上的智能合约。
" @1 ^& e  F$ c发送与标准输出(stdout)
$ Q, V' D8 r, z+ q说声Hello) c9 |# R3 m+ Y. \8 W9 \' v
- b) a8 f# Y  Z: y
编程界有一个存在已久的传统——输出"Hello World"应该是你学习的第一个程序。下面是一个在屏幕上输出"Hello World"的最简单例子。5 X3 A/ ~1 p3 D) L( P, V) l% z
hello.rho
4 M0 }0 k& f* `+ u: K练习8 F9 v- h* {4 N4 H$ x$ t* D& e  j
请让程序输出"Rholang rocks!" 而不是 “Hello World”。9 L6 K' S! W4 J) t* k6 I
练习% Q0 P7 l; e* J- y
尝试将"stdout"替换为别的语句。会得到什么结果?" [$ \& z* K2 U( t& W7 |
尝试一下这个有趣的通道名称@"someChannel".这里可以比较随意。请让程序在屏幕上输出 “Sup World”。
+ ]7 V" u9 ^+ V3 ^; X% {" _

* \9 D  H& X8 T( P1 R标准输出(stdout)到底是什么东西
( R# B- L+ o, |- x0 o: A6 J4 g; B4 D1 H2 @8 @' |: Z
rho语言的核心是通道(channel,下面都称为通道)通信. 通道是你可以用来发送和接收消息的通信线路。你可以使用!字符来在通道中发送消息。( E' R" y5 G% q7 `/ }5 F  k7 ^5 D
, M/ ^' M+ s! z4 D
stdout 是一个特殊的通道,用于将文本发送至"标准输出",通常指你的电脑屏幕。正因为它的特殊,我们不得不将它写在第一段学习的代码里面。
5 M! v: n8 e! F使用其他通道* `% Z0 N2 N' J9 p

  e+ Y% `0 q5 M/ G. n实际上你可以在很多通道中发送消息,而非只有stdout。 但其它通道不像 stdout 他们不会在屏幕上显示。
5 \- a6 W/ s: O( b5 @# DtupleSpace.rho3 V8 R' v$ }. i& g' W
那么,在其他通道中的消息将被发送至哪里?哪里都不会去!这些消息暂时哪儿都不去,这些消息会继续待在通道内,等待其他人去取出它们。我们将在下一课程中学习如何获取这些消息。同时,消息滞留所在的地方,我们称为 “元组空间”。
6 z& c5 K' l; _& \) C  \4 @6 D+ H* {请确保你的信息保留在元组空间里。你应该会看到像下面的信息。
( n& ~! v* e8 o" T2 U- A! h+ DStorage Contents:$ t- P  c6 o9 `3 |5 V' ~5 |+ p
@{"RandoChannel"}!("This won't be on the screen") | for( x0, x1
7 u; j! D( I' A! P8 r同时做两件事2 F' J- A/ i# Z6 O4 C( q
* l$ a7 K& {4 Z6 J
在rholang中,我们不会告诉计算机做完一件事,再到另一件。相反,我们会告诉它需要做的所有事情,然后"并行地"执行它们,或者一次性全部执行。3 v: ^: _% ^8 {( z5 c& |
parallel.rho( P, B0 l+ V5 L& M# Y) ^9 a
| 的发音是 “parallel”, 可简称为 “par”。
+ q$ `4 V& L% @6 ]! [练习
6 m& T7 ^# o# }7 e, p3 e向"pizza shop"通道发送消息"1 large pepperoni please"。* B& ]8 `- b7 h3 |, L5 W( G
练习; L1 u! V  G) J8 j
向"Mom’s Phone"通道发送"Hi Mom"。
6 W2 x8 m2 F) u6 H! ^0 z练习
; S' N: H- C4 ~4 h用一个程序在屏幕上输出两个消息,"Rick"和 “Morty”。- o) }! i9 w: l! B
小测试
* D- K8 T& O1 i( `) hstdout!("Programming!") 将在屏幕上输出什么?
5 `' j# R2 S& R# ?/ {  G5 G& Z$ V+ }9 N' Z
Programming!
. m! G# V. t, R, L& Kstdout!# p$ Z/ c& g/ K
Nothing
& M1 X2 f2 y) c0 R, Q
* e6 x+ ]# _4 E
@"what"!("Up") 在什么通道上发送消息?
( X- N* \9 _  H8 e
) n# x3 u. V, r@"Up"+ L. o+ N" i' u5 {
@"what"
$ b3 ]: ]/ z3 xwhat$ V7 y( ~/ L" p( B/ A6 a6 P

- k4 N9 o: v( Q2 k: hrholang会先执行哪一条语句?
6 Z6 s; n5 g6 w@"stdout"!("Dogs")6 ~& g) [: h0 ?7 ]
|
$ k$ \& F+ Z3 D; p$ Y% T" L4 D@"stdout"!("Cats")
% y' X3 E2 l% u6 b+ _+ p* v. _5 M
输出 “Dogs”6 S1 {- V. d, E7 Y0 U( f8 e
输出 “Cats”
0 l0 @+ u* E" x0 m( k1 V5 l, J都不。 它们是并行的) G5 c& O/ b* }. X3 v8 z, M

* @; L; k% e% Z7 E7 J: hPS. 有一个特殊的通道 stderr. 请尝试一下看看往这个通道发送消息,会发生什么?
1 h, J. O9 U; ^4 O; a2 m有什么区别?
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

nbking2005 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1