Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

rholang 基础教程

nbking2005
195 0 0
配置你的开发环境
  U; m$ y9 [4 b% N8 a为了可以运行这个教程里面的rholang代码,你需要一些开发环境。
# V& k- `$ {# o$ N6 C" L  r这不是一个会让你感到疲惫的rholang开发工具或者技术栈。( d3 B8 y, y! _* i- w  j
然而它展示了一些基本的开发环境给你开始。. {. S+ g2 `5 ~7 \5 }5 R' {- E
网上编译器; y7 m  n9 o- Z/ y* ~4 Q
RChain社区的成员提供了一个基于公共网站的在线rholang编译器。6 {, G1 e* F8 g$ P# @5 S8 Q1 j. ?
这个工具非常有前途,也是一种入门的简单方式。
$ r* ^9 G$ f, L9 K' }1 x. N但是它还是开发节点,有时候会不稳定。
2 A, j5 |& ?  p8 W% E; P( ~1 ^: E本地节点! x4 m, h) r1 l( d+ W7 b4 j5 U
真正正确运行rholang代码的方法是在通过启动你自己本地机子的RNode然后使用它的rholang编译器。
6 W; Y4 ~# f" N- o1 ?首先你要为你自己的平台安装 RNode2 l8 f# c* A* }0 h/ U# A: A
对于初学者,这里有详细的一步一步指导你怎么使用AWS 或者Docker启动你的节点./ D( C' F7 s4 D5 v$ F
一旦你的RNode安装好了,你可以运行基本的独立节点。( u! _+ i% m5 |8 J, C
$ rnode run -s -n
- @& M& \. ?4 y# i8 d" ?+ G在单独的终端里,你可以在REPL模式下一次执行一行rholang。
5 ]! E/ O: f+ P' ~4 G$ rnode repl2 z7 H% l% \0 A" Y! i" m8 t
  ╦═╗┌─┐┬ ┬┌─┐┬┌┐┌  ╔╗╔┌─┐┌┬┐┌─┐  ╦═╗╔═╗╔═╗╦  1 z' j  h5 f! l
  ╠╦╝│  ├─┤├─┤││││  ║║║│ │ ││├┤   ╠╦╝║╣ ╠═╝║  
/ S$ g6 f. a! K" f* ^  ╩╚═└─┘┴ ┴┴ ┴┴┘└┘  ╝╚╝└─┘─┴┘└─┘  ╩╚═╚═╝╩  ╩═╝7 a! P& u2 |9 U% m& [
rholang $ Nil3 p- D' u6 x# j# O9 {3 k9 F/ x) x
Deployment cost: CostAccount(0,Cost(0))
8 q: O( Y& v( O+ o5 v4 ^' hStorage Contents:
" g" \3 ~2 V5 x3 K for( x0, x1 9 G+ D' a# J. x# Y4 U. L
当你运行更多行数的rholang代码时候,你可以使用RNode的eval模式来执行代码。; r4 l1 i8 i8 o3 P% Z' r; _
$ rnode eval intersection.rho  J& ~- m* k: K0 I3 x
Evaluating from intersection.rho% F6 s5 Y' g6 z( q, G: P
Result for intersection.rho:  t2 k$ L4 G. J9 U5 z
Deployment cost: CostAccount(39,Cost(1132))
0 v8 ?/ N; T4 ~: U9 L$ P  nStorage Contents:
! A7 i" ]+ X# Y1 M @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"name"}!(Nil)) | @{Unforgeable(0xb19519ab773d1ec4ce96f1b71b748552e4a084dfc9942371717f5cb87e818879)}!(@{"age"}!(Nil)) | @{"world"}!("hello") | for( x0, x1 + {7 \( m' ~& \) }9 u
有一些RNode的输出会出现在你运行代码的同一个终端。但是其它一些代码输出会直接出现在第一个终端。) O" ]! K; J! `
所以在你熟悉什么输出出现在哪里前请确定好检查两边的终端。
% O" t- K" I2 d% |4 D7 }Cryptofex IDE9 T7 S6 [3 [' A' j; n; H3 [& O
一个叫做cryptofex 的开发环境已经进入了alpha版本。. o8 _$ }4 c. ^) j! B7 k; H
Cryptofex可能最后最好的开发rholang的地方,但是现在还是很早期的软件。
% S" e5 f5 z  g' h! H7 R1 D+ vCryptofex提供rholang语法高亮特性并且可以在RChain集成节点上检测dApps。3 v. X# S) L8 L, D0 j! V. h* F
IDE同时也提供环境创建和测试在以太网上,私人测试网上和单独模式的EVM上的智能合约。$ y+ G) w' O0 l: v  z' J# ]3 {
发送与标准输出(stdout)
2 r5 ]9 G0 i2 }- k; z: I- l9 j: v) N说声Hello
/ ^7 ]2 A" v# s4 Z4 P9 B! Y# j; x+ E# v# S4 e8 R
编程界有一个存在已久的传统——输出"Hello World"应该是你学习的第一个程序。下面是一个在屏幕上输出"Hello World"的最简单例子。
  ?2 h6 d4 X( x( Q, chello.rho# {+ j% T2 ~8 E" O2 e7 z
练习
; _+ c+ j/ f( B0 g请让程序输出"Rholang rocks!" 而不是 “Hello World”。
1 y* }7 e' L0 a! j练习$ V0 G) E2 k9 c: T6 u0 \
尝试将"stdout"替换为别的语句。会得到什么结果?4 v* j7 v, F. }
尝试一下这个有趣的通道名称@"someChannel".这里可以比较随意。请让程序在屏幕上输出 “Sup World”。
& O" l- T; _. k/ u9 A

! r3 ?8 }4 X0 j% K% i8 I标准输出(stdout)到底是什么东西
2 u7 c8 h: h' e( S% e- M) C& U5 s, @( J2 d; E
rho语言的核心是通道(channel,下面都称为通道)通信. 通道是你可以用来发送和接收消息的通信线路。你可以使用!字符来在通道中发送消息。) E5 i1 S9 ], B( D
2 r" v5 o* Q- e0 ]9 _
stdout 是一个特殊的通道,用于将文本发送至"标准输出",通常指你的电脑屏幕。正因为它的特殊,我们不得不将它写在第一段学习的代码里面。2 D3 `- j% r: F6 [6 t
使用其他通道
; A2 k- m+ |+ B9 o/ ]; T( \& E: ^! R# v6 R
实际上你可以在很多通道中发送消息,而非只有stdout。 但其它通道不像 stdout 他们不会在屏幕上显示。, W; o5 h, j  L
tupleSpace.rho
& G, l9 f& `: g+ k. B8 j那么,在其他通道中的消息将被发送至哪里?哪里都不会去!这些消息暂时哪儿都不去,这些消息会继续待在通道内,等待其他人去取出它们。我们将在下一课程中学习如何获取这些消息。同时,消息滞留所在的地方,我们称为 “元组空间”。
6 V) u$ B, M& {) ^2 |: ?( d请确保你的信息保留在元组空间里。你应该会看到像下面的信息。
5 T, F- B9 ~" {# ]7 EStorage Contents:
. x- y: R+ D1 U5 w/ R3 O@{"RandoChannel"}!("This won't be on the screen") | for( x0, x1; N: H( w. [9 }) L( _8 ]0 S% X
同时做两件事
- p! b5 m( {( v) ~: B& \, N$ ^: y5 i( [' Z3 B' d! ?( J
在rholang中,我们不会告诉计算机做完一件事,再到另一件。相反,我们会告诉它需要做的所有事情,然后"并行地"执行它们,或者一次性全部执行。
6 [, a( J& Z( J2 G9 w% Yparallel.rho: U/ k! K6 L! m. c) i
| 的发音是 “parallel”, 可简称为 “par”。# `% D( `3 ?9 c7 I
练习
  ^: G: R, a) c6 Z, q向"pizza shop"通道发送消息"1 large pepperoni please"。
% Z4 v6 R1 c; `% |练习
: O" J! V" [( F向"Mom’s Phone"通道发送"Hi Mom"。8 _6 d" E2 F% t4 r/ v8 P  q4 J
练习
/ g$ H5 ~( p! @- t7 Z9 V' }用一个程序在屏幕上输出两个消息,"Rick"和 “Morty”。, g+ v( u2 y2 l  b% e0 E3 w
小测试# N* @, R5 U" Q7 n4 |- y
stdout!("Programming!") 将在屏幕上输出什么?
% x9 A& C# A6 U; _
) }5 |4 ?9 H% |+ E3 {Programming!; q2 G  A, v7 S0 s5 w* i- \
stdout!9 G. t6 i* h8 s5 V3 `
Nothing
" y" n* I& a) ?  o1 J# t; D

) y0 T) h5 Y% z" Z! ?8 A@"what"!("Up") 在什么通道上发送消息?
4 t7 E1 z8 t& P9 o; I3 s
, d) ?0 D6 Y5 H+ w+ C1 r5 m2 i@"Up"8 d) N* s2 g$ Y
@"what"
+ ?+ v8 ]$ q$ w5 I5 T! F8 lwhat! o8 X& F0 o- Y* G
1 q& d- C: I  f% A$ d
rholang会先执行哪一条语句?
, u1 E& Z0 N0 t- G8 G: T@"stdout"!("Dogs")& I7 L1 @, Z* m6 d7 J
|; t# o' {$ y7 e6 |" d" K
@"stdout"!("Cats")
0 [/ W# e6 G6 \# Y% U! t% e2 q# k: _5 K. L' V0 m
输出 “Dogs”/ b; ~, s& p* |6 m' n5 M5 R3 I6 o
输出 “Cats”
' k8 g! X8 R# y/ j$ a/ _都不。 它们是并行的9 S. h0 t4 [  V% A5 k& K4 x3 k

3 X; d. M( [7 f( O8 {( c; b# J. ]PS. 有一个特殊的通道 stderr. 请尝试一下看看往这个通道发送消息,会发生什么?1 ]7 z* Z- i% S$ v# |: b' R  A
有什么区别?
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

nbking2005 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1