`
mryufeng
  • 浏览: 968864 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
文章列表
erlang otp标准发布包里面的命令行工具都在bin目录下 dialyzer  erlc  escript  typer erlang的这些命令行工具基本上都是erl模块的c的wrapper, 最后都是调用erl来运行相应的模块完成任务。 实验如下: root@nd-desktop:~# touch test.erl root@nd-des ...
GNU libreadline 为行编辑提供了统一的接口和方便的编辑能力,在使用中感觉非常爽。但是不是所以的应用程序都使用了readline库来读取用户输入,大部分C程序只是简单的调用fgets。这样的程序在输入的时候非常痛苦。比如erl,为了移植性没用到readline,而是自己实现了类似readline那样的基本的行编辑,但是非常难用,例如不支持CTRL A, CTRL E等等。 这时候rlwrap来救助了。 rlwrap  runs the specified command, intercepting user input in order to provide  readline's ...
下载地址: http://blog.yufeng.info/ppt 欢迎参观指导。。。
昨天新发布的Go还是很不错的,而且随机带了个emacs的模式 用起来很方便。 root@nd-desktop:/usr/src/golang# pwd /usr/src/golang root@nd-desktop:/usr/src/golang#  ls misc/emacs/ go-mode.el  go-mode-load.el root@nd-desktop:/usr/src/golang# cp misc/emacs/*.el ~/.emacs.d root@nd-desktop:/usr/src/golang# cat >> ~/.emacs (setq load- ...
刚从11月7-8号在杭州举行的ecug会议上回来,这次会议总体感觉是 大家都在开始用erlang了,这是个很好的现象。 附件是我的演讲稿。
erl的虚拟机有2种方式 plain版本的和smp版本的。 smp版本由于锁的开销相比要比plain版本的慢很多。 而32位机器由于内存访问比64位的少,也会快出很多。所有我选择在32位的linux系统下调优这个httpd服务器。 这个服务器就是实现个简单的功能,在browser下返回hello world。 以下我们会先编译我们的优化版本的虚拟机,然后再分别测试R13B02的标准版本的和我们优化版的性能: root@nd-desktop:/build_opt_plain# uname -a Linux nd-desktop 2.6.31-14-generic #3 SMP Sun Nov 1 ...
我们在探索linux内核的时候,经常需要调整下变量的值,看它对系统的影响。如果这个值没有透过/proc来修改的话,那只能编译内核。这个步骤是非常繁琐的。现在我们有systemtap这个利器来帮忙了。 演示如下: 我们通过修改过 extern int sysctl_tcp_fin_timeout;的值来达到目的。是因为这个值是proc导出的 我们好验证是否成功。 root@localhost ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout 15000 [root@localhost ~]# cat test.stp probe begin {       ...
gen_server在erlang otp编程中的地位是无可撼动的,几乎都是gen_server或者gen_fsm的模型。那么程序运行起来的时候 我们如何查看gen_server的内部状态呢。有2种方法: 1. 自己写个类似于info这样的函数,来获取状态。 2. 利用系统现有的架构。sasl应用带了一个si的东西 全名是status inspector, 这个东西就是设计来帮用户解决这个问题的。 实验开始: root@nd-desktop:~# cat abc.erl -module(abc). -behaviour(gen_server). -export([start_link/0]). ...
erlang内置的port非常强大,是erlang通往外面世界的通道,所以port和erlang程序的通讯的数据格式影响了通讯的效率,和稳定性。 我们在选择格式的时候, 会优先考虑到erlang的特性和port程序编写语言的特点,选出一种2者都容易处理的格式。 通讯通常有2种,基于行的文本和2进制格式。 行通讯最容易,因为是文本,调试起来就很方便。 形如这样的格式: request args\n  erlang编码这种格式就是加个\n, 解码可以用driver的{line, xxx}选项。而外部程序比如说c 解码可以用fgets, 编码也是加个\n. 缺点是: 表达上比较受限 不好表示结构数 ...
R13B新添加的leex相当于c的lex, 在做文法分析非常方便,但是效率如何呢? leex的example里面带了个erlang_scan和erlang标准的发布版的erl_scan兼容,所以我们来对比测试下效率。 注意用R13B03,因为R13B02的erlc漏掉了编译xrl格式。 以下是实验: root@nd-desktop:~# git clone git://github.com/rvirding/leex.git root@nd-desktop:~# cd leex/examples/ root@nd-desktop:~/leex/examples# cat test_scan ...
以下是会议议程安排。更多信息访问: http://ecug.org/ 2009-11-6     * 讲师入住酒店     * 会务人员&讲师小聚 2009-11-7 08:30 ~ 09:00 签到 09:00 ~ 09:15 开场 09:15 ~ 10:15 成立涛 - Erlang开发实践 10:15 ~ 10:30 提问&交流 10:30 ~ 11:30 余锋 - Erlang系统调优 11:30 ~ 11:45 提问&交流 11:45 ~ 12:00 集体拍照留念 12:00 ~ 13:00 午餐 13:00 ~ 13:30 休息 13:30 ~ 1 ...
erlang的代码运行有2种方式 1. 编译成opcode 2. eval.   这2种形式都需要把erl代码翻译成abstract code, 然后在不同的途径分别开. 通常情况下我们在eshell 里面输入的东西都是动态eval的. erl还支持命令行动态解释. erl -eval e init.erl start_it({eval,Bin}) ->     Str = binary_to_list(Bin),     {ok,Ts,_} = erl_scan:string(Str),     Ts1 = case reverse(Ts) of               [{dot ...
原本以为在 64位操作系统下 文件的读写指针都改成64位的 避免了2G的限制。经过测试 disk_log和file都支持超过2G的数据文件,但是 dets还是可耻的失败了。 经过查看源码 有2个问题: 1.  key segment的问题。  dets在设计的时候 是针对32位的 那么它的空间限制就是2G, 所以在计算最大的段的数的最大的偏移时候 干脆在代码里面写死了2G。 2. 偏移的问题。 每个key对应的value在dets_v9文件格式中的偏移值是用 <<Off:32>> 这样的格式来表示的。 所以如果改变成64位 那么文件格式就完全不兼容了。 结论: ...
ejabberd最新的版本有个模块叫做 dynamic_compile, 支持从string动态加载一个模块。有了这个功能我们就可以很方便的动态生成一个模块,加入到我们的运行期。我想的有以下几个功能: 1. const 模块 2. 如日志系统的级别: log(S) when 0 >  1 ->    do_log(S); log(_)->    skip. 这样的模块 编译的时候 会把前面的就省去了判断, 直接由compiler去掉了,因为when永远不满足。 试验如下: yu-fengdemacbook-2:~ yufeng$ erl Erlang (BEAM) e ...
前端时间看到JVM的 64 pointer compress技术,蛮多感慨的。具体的可以 google 64位 pointer compress 来了解更多。 好不容易从32位系统中逃脱,解决了4G内存的问题,而且64位的cpu更多的寄存器, 可以带来更好的性能。但是怎么又碰到问题了。64位的系统,64位的指针,意味着更多的数据访问, cpu速度是提高了,但是内存的带宽和访问速度没有大的提高。 而且内存的访问速度和cpu的cycle差几个数量级别,所以对于普通的网络程序来讲,大部分是处理信息的变形,也就是说是把内存里面的数据从一个形式变成另外一个形式。 cpu性能的提高对这种程序来讲 影响不 ...
Global site tag (gtag.js) - Google Analytics