Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

rholang 基础教程

nbking2005
81 0 0
配置你的开发环境7 K( G7 b/ J! d8 c6 }& z
为了可以运行这个教程里面的rholang代码,你需要一些开发环境。
3 H  z% V, B; P这不是一个会让你感到疲惫的rholang开发工具或者技术栈。
1 y: ?  d/ R- g& W2 J然而它展示了一些基本的开发环境给你开始。
6 ^9 @# u& y2 C2 e网上编译器7 p1 Q4 s' Q. ~7 [1 s! r- z$ Q
RChain社区的成员提供了一个基于公共网站的在线rholang编译器。; |" i4 I4 Z! ^4 ?/ `% s
这个工具非常有前途,也是一种入门的简单方式。
, l, G# l3 a$ _但是它还是开发节点,有时候会不稳定。! `: |# A5 e  ^  C" E5 [; e3 z
本地节点
: k; n. \/ E) ~真正正确运行rholang代码的方法是在通过启动你自己本地机子的RNode然后使用它的rholang编译器。/ e& y& B9 W$ L! ]. h" {5 J( d+ R- N
首先你要为你自己的平台安装 RNode+ U) G' O* W$ m- {" p3 ]
对于初学者,这里有详细的一步一步指导你怎么使用AWS 或者Docker启动你的节点.2 w1 s& F1 ~3 ^* X/ F
一旦你的RNode安装好了,你可以运行基本的独立节点。
* x1 f4 c  N& _+ Y% `7 ?) X7 o, j$ rnode run -s -n
  j6 l! A( F/ |! l4 u在单独的终端里,你可以在REPL模式下一次执行一行rholang。; c- b0 V3 q. G8 x% I' m
$ rnode repl% j/ E- Z. `6 I7 a
  ╦═╗┌─┐┬ ┬┌─┐┬┌┐┌  ╔╗╔┌─┐┌┬┐┌─┐  ╦═╗╔═╗╔═╗╦  ) G4 y0 e0 c" B+ n3 S
  ╠╦╝│  ├─┤├─┤││││  ║║║│ │ ││├┤   ╠╦╝║╣ ╠═╝║  
# W7 Y2 h6 E8 B  ╩╚═└─┘┴ ┴┴ ┴┴┘└┘  ╝╚╝└─┘─┴┘└─┘  ╩╚═╚═╝╩  ╩═╝
% ^. _* x8 n+ Qrholang $ Nil* k" }2 B- l9 {( q
Deployment cost: CostAccount(0,Cost(0))  ~3 Z9 s2 q( T) i6 i. e( p% U
Storage Contents:, ?% d0 }% E. z# L& y* ~; }
for( x0, x1 ; \, Q5 u2 O5 U, i, ^
当你运行更多行数的rholang代码时候,你可以使用RNode的eval模式来执行代码。
6 J, X# h6 T  m$ rnode eval intersection.rho/ j# }8 j- h- i" W% w
Evaluating from intersection.rho
: O) s+ j+ X# @" g  O: CResult for intersection.rho:3 I& V6 N0 \) W- P
Deployment cost: CostAccount(39,Cost(1132))
  l" y% Y7 @, ?& pStorage Contents:
% Y$ N# V  d; ^8 t1 S1 a7 D1 o8 [ @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"name"}!(Nil)) | @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"age"}!(Nil)) | @{"world"}!("hello") | for( x0, x1 0 d; d# r& w. \$ H* D5 ?9 H2 A. ]8 W
有一些RNode的输出会出现在你运行代码的同一个终端。但是其它一些代码输出会直接出现在第一个终端。2 q5 z; F5 L4 R3 ^) a# P' G5 O
所以在你熟悉什么输出出现在哪里前请确定好检查两边的终端。& p) H1 N& Y4 y' C& o
Cryptofex IDE
( v- \4 M5 O0 i4 i: u* t5 [9 z一个叫做cryptofex 的开发环境已经进入了alpha版本。
) }. n- h1 D% G2 w/ NCryptofex可能最后最好的开发rholang的地方,但是现在还是很早期的软件。, r4 l0 q  E, @- J1 j3 ]) W. R
Cryptofex提供rholang语法高亮特性并且可以在RChain集成节点上检测dApps。
- v8 U& B  g( j1 B5 \+ cIDE同时也提供环境创建和测试在以太网上,私人测试网上和单独模式的EVM上的智能合约。* ?; r/ }: M# i5 P
发送与标准输出(stdout)
, s$ e8 q5 N: S) ~- D; j说声Hello2 ?6 O, L4 r3 [7 l: y
5 _4 k; P) |/ ]
编程界有一个存在已久的传统——输出"Hello World"应该是你学习的第一个程序。下面是一个在屏幕上输出"Hello World"的最简单例子。
# T7 E6 \" A( P) ]6 z5 Khello.rho9 a, |) C7 d. ^- g2 t$ l
练习
& o4 T2 B) x; m  I3 j+ I请让程序输出"Rholang rocks!" 而不是 “Hello World”。
% }4 b5 b7 `8 |3 j3 l* J练习+ x6 o+ m# B3 k( `& L4 _4 `! E
尝试将"stdout"替换为别的语句。会得到什么结果?0 [0 _' D4 Z- F) y
尝试一下这个有趣的通道名称@"someChannel".这里可以比较随意。请让程序在屏幕上输出 “Sup World”。
% j! }' M* J6 y
+ D  }- j; y+ A
标准输出(stdout)到底是什么东西6 v+ O7 @* z/ T( R
7 E- g$ u1 W1 K$ ]
rho语言的核心是通道(channel,下面都称为通道)通信. 通道是你可以用来发送和接收消息的通信线路。你可以使用!字符来在通道中发送消息。
3 L  g: g, Y, j3 h" p/ h9 T3 _8 i
' x) `+ I# }/ C7 Q+ S! d4 F' Gstdout 是一个特殊的通道,用于将文本发送至"标准输出",通常指你的电脑屏幕。正因为它的特殊,我们不得不将它写在第一段学习的代码里面。
" j5 O" L( z/ L8 e, x4 j) @  ~! s使用其他通道
' o; \3 ]+ ~6 I# N2 [
: D! E# {; f) E4 v实际上你可以在很多通道中发送消息,而非只有stdout。 但其它通道不像 stdout 他们不会在屏幕上显示。8 l( c( Z5 }  }
tupleSpace.rho
) K% A* K" C$ g+ ~; o* H- E那么,在其他通道中的消息将被发送至哪里?哪里都不会去!这些消息暂时哪儿都不去,这些消息会继续待在通道内,等待其他人去取出它们。我们将在下一课程中学习如何获取这些消息。同时,消息滞留所在的地方,我们称为 “元组空间”。$ f8 @2 Y2 p: B; \) y8 S9 N
请确保你的信息保留在元组空间里。你应该会看到像下面的信息。% D& k& W3 A1 G
Storage Contents:
" T- _) t5 P% p# n. f@{"RandoChannel"}!("This won't be on the screen") | for( x0, x1, g/ Y* o) t3 i" i( A" [4 P0 {
同时做两件事
+ K7 _+ R# }: F* Z
+ C4 V9 j4 n& s在rholang中,我们不会告诉计算机做完一件事,再到另一件。相反,我们会告诉它需要做的所有事情,然后"并行地"执行它们,或者一次性全部执行。; W. g' V: P5 T& }2 ~2 o' W
parallel.rho
. O+ A3 c- p5 y! f$ c6 }0 x| 的发音是 “parallel”, 可简称为 “par”。2 Q. n9 K4 d" o7 ?# }
练习
: w* P& L$ ]2 t8 Q2 s' z$ c向"pizza shop"通道发送消息"1 large pepperoni please"。
$ X- K, U3 f7 f3 s/ L9 u9 M7 q/ x练习
( J, _3 d% o; z  r向"Mom’s Phone"通道发送"Hi Mom"。) I1 z6 H/ m) Q- v% o2 G
练习# v5 w7 w7 k8 U. m% U1 R
用一个程序在屏幕上输出两个消息,"Rick"和 “Morty”。3 k8 i) G3 V% J6 E! H6 B" a$ ~" \
小测试4 H( S* M* j3 i4 \, K
stdout!("Programming!") 将在屏幕上输出什么?, r+ l) x2 D& x4 j/ a7 H
  d2 }; w  ~# c4 V) s& @% F
Programming!
  F/ s1 j2 X1 i0 ~8 Lstdout!- |0 [+ `1 h8 T! w/ y! `
Nothing
# a8 h/ k. N+ B

4 y3 D5 S1 {6 t  O3 C. |5 w5 d) E& |@"what"!("Up") 在什么通道上发送消息?+ @1 h4 j! {" V

2 M0 L- [1 Y" S* c1 w@"Up"
! T4 T  C8 [2 \$ u6 S@"what". C3 A8 C5 g! {. _
what
( o3 |- V, E$ z* _

0 C8 Y' I  D$ P8 B2 @& frholang会先执行哪一条语句?/ q8 X+ n3 u2 X2 Z! X, V; n
@"stdout"!("Dogs")
  t2 O# w9 s$ S( ^|
" k& X5 `+ d8 T# l7 n$ V4 e@"stdout"!("Cats")
1 w1 q/ m0 n' E7 U; A0 S2 ^. u+ G5 Z( n$ k2 }0 w
输出 “Dogs”
" p+ x1 c0 b: |! R# m$ M: H输出 “Cats”
7 }8 o1 T5 d) g. \. Q, o1 [+ n都不。 它们是并行的
# Y. w" k1 A0 Q* [; k0 O
+ h+ y  J# x6 G
PS. 有一个特殊的通道 stderr. 请尝试一下看看往这个通道发送消息,会发生什么?$ O: n* h* @$ ^9 T% T, B
有什么区别?
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

nbking2005 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1