- 博客(27)
- 收藏
- 关注
转载 Erlang常用数据结构实现
详见Erlang 常用数据结构实现,以下为阅读该博客所做笔记和其他相关的笔记:Erlang虚拟机使用一个字(64/32位)来表示所有类型的数据,即Eterm。具体的实施方案通过占用Eterm的后几位作为类型标签,然后根据标签类型来解释剩余位的用途。这个标签是多层级的,最外层占用两位,有三种类型:01: list,剩下62位是指向列表Cons的指针。10: boxed对象,即复杂对象,剩余62位指向boxed对象的对象头。包括元组,大整数,外部Pid/Port等。11: immediate立即数,
2021-03-05 21:02:54
534
原创 Erlang -- 编译
编译单个文件编译在Erlang Shell运行c(ModuleName).进行编译。c(ModuleName, Options)也可以通过Options添加编译选项。通过定制Emakefile来管理编译%% Emakefile{ %% 源码路径 [ 'src/**/*' ], %% 编译选项 [ debug_info,%% 添加debug_info编译后,可反编译回源码。 nowarn_export_all,%% 不警告全导出。 {parse_transform
2021-02-28 18:24:11
1601
原创 Erlang相关链接
LearnYouSomeErlangErlang并发编程Erlang OTP设计原理文档Erlang/OTP中文手册官方文档官方文档+查找功能坚强2002博客Erlang发布版本升级
2021-02-28 18:22:27
183
原创 Erlang笔记 -- Mnesia:Erlang数据库简单使用
Mnesia:Erlang数据库简单使用创建数据库在当前节点创建:PS E:\ERL\Mnesia> erlEshell V8.3 (abort with ^G)1> node().nonode@nohost2> mnesia:create_schema([node()]).ok3> init:stop().ok4>PS E:\ERL\Mnesia> ls目录: E:\ERL\MnesiaMode LastWri
2020-12-31 21:23:16
1232
原创 Erlang -- sys模块常用接口使用
sys模块提供了发送系统消息及调试信息的接口。常用接口change_code(Name, Module, OldVsn, Extra) -> ok | {error, Reason}change_code(Name, Module, OldVsn, Extra, Timeout) -> ok | {error, Reason}通知进程Name改变状态,调用此接口之前需要通过sys:suspend/1-2先挂起进程。change_code/4-5被调用后,Module:system
2020-12-20 22:09:23
682
原创 Erlang -- 代码热更
在任一时刻,Erlang允许一个模块的两个版本同时运行:当前版和旧版。重新编译某个模块时,任何运行旧版代码的进程都会被终止,当前版成为旧版,新编译的版本则成为当前版。-module(test).-export([start/0]).start() -> spawn(fun loop/0). loop() -> receive after 5000 -> io:format("vsn: ~p~n", [1]), loop()
2020-12-18 22:02:53
278
原创 Cowboy -- Hello World
https://ninenines.eu/docs/en/cowboy/2.8/guide/getting_started/Cowboy是由Erlang编写的轻量、快速以及模块化的Http服务器。支持HTTP/1.1、HTTP/2和WebSocket。Cowboy简单实例创建项目目录hello_erlang。$ mkdir hello_erlang$ cd hello_erlang下载Erlang.mk,并创建Makefile,Makefile用于构建应用程序。$ wget http
2020-12-16 22:44:13
278
1
转载 mochiweb入门
mochiweb入门转载译文:https://www.cnblogs.com/ken-zhang/archive/2011/10/24/2222202.html原文出处:http://alexmarandon.com/articles/mochiweb_tutorial/简介MochiWeb由Bob Ippolito创建,其描述为:“一个创建轻量级http服务器的Erlang库”。它不是框架:不附带URL调度、模版引擎、数据持久等。尽管没有官方网站和文档,但仍然是Erlang构建web服务的热门选择
2020-12-08 22:56:50
460
原创 Erlang笔记 -- 错误处理
顺序编程异常处理异常产生异常错误发生于系统遇到内部错误时,或者通过在代码里显式调用throw(Exception)、exit(Exception)或error(Exception)触发。会触发异常错误的典型内部错误有模式匹配错误(没有一个函数子句能成功匹配),用错误类型的参数调用内置函数(比如用一个整数作为参数调用atom_to_list),以及用带有错误值的参数调用内置函数(比如试图让某个数字除以0)。可以通过调用下面的某个内置函数来显式生成一个错误。exit(Why)当你确实想要终止当前进
2020-12-07 22:22:14
635
原创 Erlang笔记 -- 并发编程
Erlang的并发是基于进程(process)的。进程是一些独立的小型虚拟机,可以执行Erlang函数。在Erlang里,进程隶属于编程语言,而非操作系统。这就意味着Erlang的进程在任何操作系统上都会具有相同的逻辑行为,这样,就能编写可移植的并发代码,让它在任何支持Erlang的操作系统上运行。在Erlang里:创建和销毁进程是非常快速的;在进程间发送消息是非常快速的;进程在所有操作系统上都具有相同的行为方式;可以拥有大量进程;进程不共享任何内存,是完全独立的;进程唯一的交互方式就是消
2020-12-06 22:13:15
347
原创 Erlang笔记 -- 二进制与位语法
二进制型(binary)是一种数据结构,当二进制型里的位数都会是8的整数倍时,对应一个字节串。当位数不是8的整数倍,则称这段数据为位串(bitstring)。二进制型的编写和打印形式是双小于号与双大于号之间的一列整数或字符串:1> <<19,88,20>>.<<19,88,20>>2> <<"hello">>.<<"hello">>3> <<49,50,51>>
2020-12-05 23:51:16
747
原创 Erlang笔记 -- 常用数据结构
元组tuple如果想把一些数量固定的项目归组成单一的实体,就会使用元组(tuple)。创建元组的方法就是用大括号{}把想要表达的值括起来,并用逗号分隔他们。例如,表示某人的身高和体重:{Jack, 1.88}Erlang没有类型声明,创建一个坐标点,只需:P = {10, 15}.这样就创建了一个元祖并绑定在变量P上。由于元组里的字段没有名字,因为这个元祖只包含一对整数,为了记住该元组的用途,通常会写成以下方式:{point, 10, 15},这样可以使程序的可理解性大大增加。元组是可以嵌套的
2020-12-03 23:21:56
872
原创 Erlang笔记 -- 基础
Hello World%% hello.erl-module(hello).-export([start/0]).start() -> io:format("Hello World~n").上述文件中,-module(hello).指的是此文件包含用于hello模块的代码。它应该与文件名一致(除了.erl这个文件拓展名)。模块必须以一个小写字母开头。模块名属于一个原子。--export([start/0]).表示没有参数的函数start可以在模块外调用(类似于Java中的pu
2020-12-02 22:30:28
812
转载 Ubuntu下安装Erlang、rebar
Ubuntu下安装erlang、rebar安装erlang在官网下载需要版本的安装包。我选择的是esl-erlang_22.0-1_ubuntu_bionic_amd64.deb。注:从windows向linux子系统复制文件可以通过如下命令cp /mnt/c/download/esl-erlang_22.0-1_ubuntu_bionic_amd64.deb /home/mfile通过以下命令安装:dpkg -i esl-erlang_22.0-1_ubuntu_bionic_am
2020-11-29 17:32:10
987
翻译 Erlang -- application
application在OTP中,application模块是一个提供了特定功能的组件,使得一个应用程序能够作为一个整体去启动或关闭,或是在其他系统中复用。application与application controller进行交互,application controller是Erlang运行时的一个进程。application提供了控制应用程序及获取应用程序信息的方法。一个应用程序通过一个名为Application.app的应用程序资源文件定义,其中Application为该应用程序的名字。该文件位
2020-11-28 01:14:20
980
翻译 Erlang -- supervisor
supervisor监控者supervisor模块提供了一个监控其他进程的进程。通过supervisor能够构建监控树,用于构造容错应用程序。监控者能够启动、关闭及重启它的子进程。supervisor进程通过supervisor:start_link(Module, Args)或supervisor:start_link(SupName, Module, Args)启动,成功的话返回值为{ok, Pid}。此时会通过调用回调函数Module:init(Args)来初始化监supervisor进程,如果成
2020-11-28 01:12:47
1020
翻译 Erlang -- gen_statem
gen_statem是Erlang/OTP 19.0引入的新behavior。用于替换gen_fsm。gen_statem支持2种回调模式:state_functions要求状态名StateName必须是原子,并且回调函数的名称与状态同名。这一点与gen_fsm一样。handle_event_function状态名可以是任何形式,此时回调函数为Module:handle_event/4,适用于所有状态下。Module:callback_mode()指定gen_statem的回调模式。 其返回值
2020-11-26 22:36:00
2105
翻译 Erlang -- gen_fsm
gen_fsmgen_fsm为有限状态机,在OTP 20.0被gen_statem取代。gen_fsmbehavior函数和回调函数之间的关系如下:gen_fsm module Callback module-------------- ---------------gen_fsm:startgen_fsm:start_link -----> Module:init/1gen_fs
2020-11-26 22:35:16
878
翻译 Erlang -- gen_event
gen_eventgen_event行为模块提供了事件处理功能,由一个通用的事件管理器进程和多个动态添加的事件处理程序构成。事件管理器具有一组标准的接口函数,包括跟踪和错误报告功能。每个事件处理程序都被实现为一个回调模块,导出一组预定义的函数。行为函数与回调函数之间的关系如下:gen_event module Callback module---------------- ---------------gen_event:
2020-11-25 23:14:50
252
翻译 Erlang -- gen_server
gen_server是Erlang OTP中的通用服务器模板。gen_serverbehavior函数和回调函数之间的关系如下:gen_server module Callback module----------------- ---------------gen_server:startgen_server:start_link -----> Module:init/1gen_server:stop -----> Modu
2020-11-25 23:11:39
558
原创 Eclipse常用快捷键
1.补全代码:alt + /2.使用单行注释:ctrl + /3.使用多行注释: ctrl + shift + /4.取消多行注释:ctrl + shift + 5.复制指定行的代码:ctrl + alt + down 或 ctrl + alt + up6.删除指定行的代码:ctrl + d7.上下移动代码:alt + up 或 alt + down8.切换到下一行代码空位:shift + enter9.切换到上一行代码空位:ctrl + shift + enter10.查看源码:ctrl
2020-11-18 23:38:39
122
原创 设备挂载与卸载
在Linux系统中“一切皆文件”,所有文件都放置在以“/”为根目录的树形目录结构中。在Linux看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。因此要在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用,这个合二为一的过程称为“挂载”。如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,通过命令行方式是无法找到。挂载,指的就是将设备文件中的顶级目录连接到Linux根目录下的某一目录(最好是空
2020-10-17 18:31:10
1468
原创 Vim小抄
Vim有三种模式命令模式、输入模式、底线命令模式。打开Vim即进入命令模式。模式间的切换:命令模式= i/a/o/r/I/A/O/R =>输入模式= ESC =>命令模式i, I 进入输入模式(Insert mode):i 为从目前光标所在处输入,I为在目前所在行的第一个非空格符处开始输入。a, A 进入输入模式:a 为从目前光标所在的下一个字符处开始输入,A为从光标所在行的最后一个字符处开始输入。o, O 进入输入模式:o 为在目前光标所在的下一行处输入新的一行;O为
2020-10-14 21:49:30
342
原创 Shell基础
Shell脚本文件第一行 #!/bin/bash,用于告诉系统解释此脚本文件的Shell程序。常见的Shell程序有Bourne Shell(/bin/sh)和Bourne Again Shell(/bin/bash)。脚本文件的扩展名不影响脚本执行。运行 Shell 脚本有两种方法:作为可执行程序chmod +x ./test.sh #使脚本具有执行权限./test.sh #执行脚本注意,一定要写成 ./test.sh,告诉系统在当前目录找该文件,否则系统会去PATH里寻找test.
2020-10-14 21:14:37
231
原创 Linux基础命令
Linux常用命令用户管理用户组管理文件属性软件包管理器linux硬链接与软链接的区别文档打包与压缩其他命令用户管理useradd 选项 用户名,创建账号-c comment 指定一段注释性描述-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录-g 用户组 指定用户所属的用户组-G 用户组,用户组 指定用户所属的附加组-s Shell文件 指定用户的登录Shell-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号dylan@
2020-09-27 22:08:59
184
原创 Erlang -- Erlang Shell 部分启动参数
Erlang Shell 部分启动参数Erlang shell启动命令:直接输入erl,已默认参数打开Erlang shell,可添加以下参数:+P Number|legacy 最大进程数,范围为1024-134217727,默认为 262144+K true | false 是否启用的kernel的poll机制,默认为false-smp [enable|auto|disable...
2019-05-14 00:21:38
842
原创 Sublime--手动安装Package Control,并安装CTags插件
Sublime--手动安装Package Control,并安装CTags插件手动安装Package Control安装插件CTags使用CTags进行函数追踪手动安装Package Control1.下载Package Control.sublime-package,放到Installed Packages目录下(点击Preferences->Browser Packages打开Pac...
2019-05-13 01:03:06
1303
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人