[Erlang30]Erlang shell是如何工作的?
一些关于Erlang启动进程的分析:希望你会喜欢。
原英文地址:http://ferd.ca/repl-a-bit-more-and-less-than-that.html
rlwrap
来包装Erlang shell)。关于更高级的REPLs的用法,比如提供Factor,Dr.Racket也不被Erlang shell可视化支持。不可以在shell里面声明内联模块(inline modules),只能在模块内声明。它不是一个REPL(Read-Eval-Print Loop)
(loop (print (eval (read))))
kernel
和stdlib
应用。VM神奇的可以允许这两个模块在启动和退出时彼此依赖。kernel
应用会启动一堆控制VM运行的每个’service'的监控进程--比如:分布式(distribution)。user
中(声名狼藉是因为每一个新学者会试图起一个叫user的模块,导致很多东西不正常)。目前Erlang默认shell是第三方案,同时也是目前最复杂的方案。erl -oldshell得到。
它是直奔user模块去的。使用其中最简单的那个,它将是一个理解shell如何运作的不错起点。
user
模块基本上处理了REPL中的’read'和‘print'部分。它会收集字符,显示提示,把收集的字符整理后发给’eval'部分来处理,然后再取结果显示出来。user.erl被按功能切分开4个组件。tty扮演着前面标准输入输出的角色,可以自适应运行在不同的操作系统上。这就是你把字符输入shell到,并进入VM的地方。接下来就是user_drv,它会决定怎样处理这个字符,如果你按下的是
^C
或 ^G,user_drv会进程shell管理模式。
为了理解这个管理模式,我们需要知道:可能会有多个shells在同时运行的,他们可能被user_drv挂在一系列group.erl的进程下。这个列表决定了其中哪一个shell是处理于激活状态的。shell管理可以让你做操作shell本身的各种各样的事。下面我们来看看按下
^G的情况
:User switch command
--> h
c [nn] - connect to job
i [nn] - interrupt job
k [nn] - kill job
j - list all jobs
s [shell] - start local shell
r [node [shell]] - start remote shell
q - quit erlang
? | h - this message
--> s
--> j
1 {shell,start,[init]}
2* {shell,start,[]}
--> c 1
马上让它变得更完善
为什么这些会让它看上去更好?
[Erlang30]Erlang shell是如何工作的?的更多相关文章
- [Erlang18]教练!又发现Erlang Shell里面的神奇函数一只
人嘛,总是想提高效率,创造更多的价值,同时也得到更多的选择空间.可一个人的精力,时间终归是有限的,减少自身重复或无意义工作就显得格外重要! 要么懂得授权,要么把重复的工作交给机器来做: 现实: 美 ...
- [Erlang06]在Erlang shell怎么在目录A下编译目录B下的文件,并把生成文件统一放置目录C?
问题描述: 我们想快速测试一个小功能,第一个反应就是打开Erl shell 直接输入,但是当想测试一个复杂的函数时,一般会写成一个*.erl文件,然后在shell下: cd(FileDir). c(F ...
- erlang shell表格数据对齐
近期在erlang shell做一些測试,为了让測试结果数据显得更直观,想对齐须要打印的数据,做成像表格一样的效果. 開始的想法是在数据中插入tab. 当然,erlang也有对tab的支持,但实际效果 ...
- SIGPIPE导致cronttab和shell脚本等工作异常
cron和sh等可能被某些共享库hook,而这些共享库可能会触发SIGPIPE,导致crontab和shell工作异常,解决办法是程序忽略SIGPIPE或脚本中使用"trap '' SIGP ...
- Erlang Shell调试网络程序真方便
Erlang的shell功能强大,这里我将它当成我的客户端.可以动态的输入你需要发送的内容,也可以动态的接收内容,就像调试器一样,在开发过程中起到很重要的作用.具体使用方式如下: C:\Documen ...
- erlang学习笔记(shell命令)
erlang shell 命令: help(). 可以查看erlang shell内置命令. 比如:m(Mod),可以查看模块Mod. 待续..
- shell脚本-工作练习篇
瞎扯时间 人的惰性真的很难去戒掉,每天工作下班回家后,只想瘫倒在床上,玩玩手游,刷刷抖音,甚至看看无聊至极的“爽文”,对于学习.看书啥的,完全提不起兴趣,也许正是因为如此,我才显得这么平庸而无趣吧. ...
- [Erlang 0105] Erlang Resources 小站 2013年1月~6月资讯合集
很多事情要做,一件一件来; Erlang Resources 小站 2013年1月~6月资讯合集,方便检索. 小站地址: http://site.douban.com/204209/ ...
- 在Windows用Rebar来构建,编译,测试,发布Erlang项目
rebar是一个遵循 Erlang/OTP 原则的 Erlang 项目构建工具,使用它可以减少构建标准 Erlang/OTP 项目架构配置的工作量,并且可以很容易的编译.测试.发布 Erlang 应用 ...
随机推荐
- IDEA试用期结束以后继续试用(全部失效就更新),IDEA 2018 LICENSE SERVER
IDEA是一款收费的IDE,但是新用户可以免费试用一段时间,试用期结束可以购买,也可以通过填写License server address来继续使用. 打开IDEA以后,通过Help ----- Re ...
- Java 8 : Stream API 练习
//店铺属性类 public class Property { String name; // 距离,单位:米 Integer distance; // 销量,月售 Integer sales; // ...
- crs_register/crs_unregister 注册与移除RAC服务 --zhuanzai
crs_register命令主要是将资源注册到CRS.该方法通常结合crs_stat -p 或者crs_profile先创建配置文件.同时crs_register也具有更新CRS的功能.本文将描述cr ...
- 笔记本制作centos qcow2格式文件
笔记本win7先通过vbox安装好centos6.5 然后打开cmd命令行在c:\Program Files\Oracle\VirtualBox下执行 vboxmanage clonehd --for ...
- 6_python之路之atm购物
6_python之路之atm购物 1.程序说明:Readme.cmd supermarket 项目主目录 ├── access.log 日志文件 ├── atm atm程序 │?? ├── atm.p ...
- python twilio 短信群发 知识留存
1. win7 32位系统,傻瓜安装Anaconda2(python 2.7) 2. 打开cmd, 输入命令pip install twilio,在线安装twilio 3. 打开Anaconda2的S ...
- #用openfiledialog文件和savefileDialog打开和保存文件
一.打开文件 Stream myStream = null; OpenFileDialog openFileDialog1 = new OpenFileDialog(); ...
- leetcode434
public class Solution { public int CountSegments(string s) { s = s.Trim(); ) { ; } else { ; ; ; i &l ...
- UGUI 锚点设置为四方扩充模式然后设置局部坐标为0将出现什么问题
UGUI 锚点设置为四方扩充模式然后设置局部坐标为0将出现什么问题? 情形:按钮A挂在主画布上.四方扩充模式.A的中心和画面中心不重合. 这时候用代码设置A.localPosition = new V ...
- clr相关的一些工具
NGen.exe:将IL代码编译成本地代码. PEVerify.exe:它检查一个集所有方法并报告其中含不 的实用程序. ILDasm.ex:IL反编译 csc.exe:C#编译工具 ilasm.ex ...