[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 应用 ...
随机推荐
- Bootstrap-Plugin:标签页(Tab)插件
ylbtech-Bootstrap-Plugin:标签页(Tab)插件 1.返回顶部 1. Bootstrap 标签页(Tab)插件 标签页(Tab)在 Bootstrap 导航元素 一章中介绍过.通 ...
- oracle 跨库访问
创建DBLINK的方法: 1. create public database link dblink connect to totalplant identified by totalplant us ...
- Vue 目录结构分析 数据绑定 绑定属性 循环渲染数据 数据渲染
一.目录结构分析 node_modules 项目所需要的各种依赖 src 开发用的资源 assets 静态资源文件 App.vue 根组件 main.js 配置路由时会用 .babelrc 配置文件 ...
- grunt 不是内部或外部命令,也不是可运行的程序或批处理文件
问题1 grunt 不是内部或外部命令,也不是可运行的程序或批处理文件 解决方法: Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. 安装CLI 在继 ...
- Direcshow之视频捕捉<转>
关于视频捕捉(About Video Capture in Dshow) 1. 视频捕捉Graph的构建 一个能够捕捉音频或者视频的graph图都称之为捕捉graph图.捕捉graph图比一般的文件回 ...
- Jboss:The LogManager was not properly installed (you must set the "java.util.logging.manager" system prop
可能是jboss的服务器版本选择不对 ,比如我本地的Jboss服务器版本是 jboss-as-web-7.0.2.Final,选择的服务器版本是JBOOS V7.1 Runtime ,就会报上面 ...
- 【335】Install PyDev in Eclipse IDE
Reference: Eclipse和PyDev搭建完美Python开发环境(Windows篇) Reference: Install the PyDev plug-in for Eclipse Do ...
- __stdcall详解
对_stdcall 的理解(上) 在C语言中,假设我们有这样的一个函数:int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用 ...
- android run/debug configurations时报错Cannot reload AVD list:
问题:配置Android的run/debug configurations时报错Cannot reload AVD list: cvc-enumeration-valid: Value '280dpi ...
- ADT离线安装
1.安装eclipse软件.安装后点击HELP菜单,找到下面的Install New Software并点击. 2.之后会弹出一个对话框,然后我们点击add,接下来弹出ADD对话框,然后我们再点击ar ...