Erlang
文章平均质量分 63
TriKin
2BOrNot2B, That's a question.
展开
-
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 · 488 阅读 · 0 评论 -
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 · 1513 阅读 · 0 评论 -
Erlang相关链接
LearnYouSomeErlangErlang并发编程Erlang OTP设计原理文档Erlang/OTP中文手册官方文档官方文档+查找功能坚强2002博客Erlang发布版本升级原创 2021-02-28 18:22:27 · 155 阅读 · 0 评论 -
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 · 1131 阅读 · 0 评论 -
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 · 619 阅读 · 0 评论 -
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 · 237 阅读 · 0 评论 -
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 · 234 阅读 · 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 · 411 阅读 · 0 评论 -
Erlang笔记 -- 错误处理
顺序编程异常处理异常产生异常错误发生于系统遇到内部错误时,或者通过在代码里显式调用throw(Exception)、exit(Exception)或error(Exception)触发。会触发异常错误的典型内部错误有模式匹配错误(没有一个函数子句能成功匹配),用错误类型的参数调用内置函数(比如用一个整数作为参数调用atom_to_list),以及用带有错误值的参数调用内置函数(比如试图让某个数字除以0)。可以通过调用下面的某个内置函数来显式生成一个错误。exit(Why)当你确实想要终止当前进原创 2020-12-07 22:22:14 · 545 阅读 · 0 评论 -
Erlang笔记 -- 并发编程
Erlang的并发是基于进程(process)的。进程是一些独立的小型虚拟机,可以执行Erlang函数。在Erlang里,进程隶属于编程语言,而非操作系统。这就意味着Erlang的进程在任何操作系统上都会具有相同的逻辑行为,这样,就能编写可移植的并发代码,让它在任何支持Erlang的操作系统上运行。在Erlang里:创建和销毁进程是非常快速的;在进程间发送消息是非常快速的;进程在所有操作系统上都具有相同的行为方式;可以拥有大量进程;进程不共享任何内存,是完全独立的;进程唯一的交互方式就是消原创 2020-12-06 22:13:15 · 277 阅读 · 0 评论 -
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 · 664 阅读 · 0 评论 -
Erlang笔记 -- 常用数据结构
元组tuple如果想把一些数量固定的项目归组成单一的实体,就会使用元组(tuple)。创建元组的方法就是用大括号{}把想要表达的值括起来,并用逗号分隔他们。例如,表示某人的身高和体重:{Jack, 1.88}Erlang没有类型声明,创建一个坐标点,只需:P = {10, 15}.这样就创建了一个元祖并绑定在变量P上。由于元组里的字段没有名字,因为这个元祖只包含一对整数,为了记住该元组的用途,通常会写成以下方式:{point, 10, 15},这样可以使程序的可理解性大大增加。元组是可以嵌套的原创 2020-12-03 23:21:56 · 775 阅读 · 0 评论 -
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 · 727 阅读 · 0 评论 -
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 · 851 阅读 · 0 评论 -
Erlang -- application
application在OTP中,application模块是一个提供了特定功能的组件,使得一个应用程序能够作为一个整体去启动或关闭,或是在其他系统中复用。application与application controller进行交互,application controller是Erlang运行时的一个进程。application提供了控制应用程序及获取应用程序信息的方法。一个应用程序通过一个名为Application.app的应用程序资源文件定义,其中Application为该应用程序的名字。该文件位翻译 2020-11-28 01:14:20 · 863 阅读 · 0 评论 -
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 · 921 阅读 · 0 评论 -
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 · 1918 阅读 · 0 评论 -
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 · 821 阅读 · 0 评论 -
Erlang -- gen_event
gen_eventgen_event行为模块提供了事件处理功能,由一个通用的事件管理器进程和多个动态添加的事件处理程序构成。事件管理器具有一组标准的接口函数,包括跟踪和错误报告功能。每个事件处理程序都被实现为一个回调模块,导出一组预定义的函数。行为函数与回调函数之间的关系如下:gen_event module Callback module---------------- ---------------gen_event:翻译 2020-11-25 23:14:50 · 217 阅读 · 0 评论 -
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 · 500 阅读 · 0 评论 -
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 · 779 阅读 · 0 评论