- 浏览: 497865 次
- 性别:
- 来自: 上海
最新评论
-
hypercube:
markin'
配置D语言编程环境 -
qiezi:
qiezi 写道yangyang_08 写道1 ...
我的编程语言学习经历 -
qiezi:
yangyang_08 写道1、现在如果做并发服务器,楼主选用 ...
我的编程语言学习经历 -
yangyang_08:
1、现在如果做并发服务器,楼主选用什么样的语言架构?2、lua ...
我的编程语言学习经历 -
dearplain:
我也是语言爱好者,不过我一直坚持使用c。
我的编程语言学习经历
文章列表
Io Language是一种Prototype-Based Language,像JavaScript一样(其它类似的语言我不清楚),这也是个常见的词,JavaScript也非常流行,所以不用再详细解释这个概念了,主要说一下它的库扩展能力,玩过JavaScript/Ruby的对这个特性应该是很喜欢了。
举个小例子说一下这种模型的好处。
Io Language的Object有一个wait方法,它的实现就是个死循环,在没有其它任务的情况下会不断地取时间判断有没有超时。它的附加库里面有个Socket,是使用libevent来实现的,由于libevent使用的是基于事件接口,比如select/poll ...
- 2008-01-26 20:31
- 浏览 2749
- 评论(0)
有点厌倦了ErLang。
这种语言有很多优点,但缺点也是致命的。和C库的交互能力不是很好,主要原因是C库都是基于线程、阻塞线程的。Port不能很好地解决需要多线程来操作的资源,所以ErlyDB宁愿自己实现协议。
相比之下优点不是很突出了。分布式?一直在做分布式系统,积累的库再借鉴点Erlang的优点,已经解决大部分问题了。并发?状态机也不是很难写,就是有点恶心,当然C++有更高的效率,恶心点也值了。鲁棒性?编写服务器程序也有些经验了,虽然自己觉得写得也不怎么样,但稳定性方面不是问题。平滑升级?从架构上消除单点,再做到协议兼容,这方面也不是问题,即便是Erlang写程序也要考虑这两点。无锁什么 ...
DMD最近的版本号加入了闭包,感觉非常有用,虽然有些背后动作,不过我是实用派不介意这个。玩的时候忽然想到为什么没有lambda呢?AST还没影,不过可以利用D强大的模板可以使用字符串来先模拟一下。
我假想的语法是这样的:
int[] arr = [1,2,3];
int[] arr1 = arr.map(lambda!("int x -> x * x"));
上面执行的arr1结果将会是[1,4,9]。
在编写过程中发现匿名委托不能够使用模板来这样生成:
template labmda(string expr)
{
auto lambda ...
琢磨了好久,一直没时间来做它。在讨论这个问题的时候就已经有这想法了,后来发现tango里已经有Fiber的实现,昨天终于抽了点时间做了个简单的小玩意,离真实应用还差得很远。
测试代码:
import light_process;
import tango.io.Stdout;
void test() {
Stdout("test").newline;
receive(
(Process pid, float f) {
Stdout("test: receive float: ", f).newline;
pid. ...
内存管理通常指的是堆上分配的空间,栈上分配虽然高效好用,但一般是固定大小的、不能持久保存的。堆上分配就有了释放的问题,代码中有一些是使用new/malloc来分配空间的,还有一些是使用内存池,如何在释放时区分是必须 ...
- 2007-08-15 22:19
- 浏览 3448
- 评论(5)
考虑到现有的项目使用erlang重写的复杂性和erlang对于某些数据库支持的弱点,想结合erlang的分布式、代码热加载、处理高并发方面的优势,和C++在性能上以及大量现有项目上的优势,实现集群部署。
考察了erlang和C进行交互的几种方式,ports受限于物理服务器分布,port_driver没测试成功,应该也是受限于本机,最后选定C nodes方式。
测试了c server和c client两种方式,感觉如果是server方式,还得用C写一套处理高并发的网络模块,也不方便升级,erlang的优势完全没发挥上,所以选定client方式。
大致的想法是这样的:
* erlang监听一个 ...
搜到这篇:
erlang网络编程的几个性能调优和注意点
早看到这个就好了,我也是用strace发现它用的是poll,顺便搞清楚了erlang的分布式节点通讯方式。
erlang分布式节点通讯,A节点连接B节点,如果在同一机器上,只需要进程间通讯就可以找到节点。不在同一台机器上,A先连接B所在机器的4369端口,寻找节点。如果找到,就通知B节点监听一个端口,再回复A让它连接这个端口。
监听4369端口的是个后台进程epmd,在linux上它使用select,它只建短连接。windows上是epmd.exe。在linux上,节点的监听端口使用poll,指定+K true参数以后,会使用epo ...
- 2007-07-05 11:26
- 浏览 6555
- 评论(1)
phobos里面在stc.c.stdlib里提供了qsort,这是个传统的qsort:
void qsort(void *base, size_t nelems, size_t elemsize,
int (*compare)(void *elem1, void *elem2));
它接受的比较函数是个函数指针,如果我们想使用委托就比较麻烦了,委托是对象指针和函数指针的绑定。
phobos/internal/qsort2.d里实现了一个数组排序方法:
extern (C) long _adSort(Array a, TypeInfo ti)
{
synchroniz ...
- 2007-05-06 21:31
- 浏览 5080
- 评论(2)
前段时间做了个简单的dtwisted项目,只有个雏形,高层点的东西就没有了。
以前用ACE做过小型游戏服务器、视频转发服务器,比较熟悉点的是reactor模式。其间也尝试过proactor,一知半解不得要领,于是放弃了。
今天工作闲暇尝 ...
- 2007-04-20 20:01
- 浏览 4042
- 评论(3)
以前曾经讨论过使用typedef来完成强类型的数值计算,最终遇到的问题是D里面没办法定义进行全局运算符重载。
最近在struct上找到点灵感,把基本类型用struct包装后使用,就可以重载运算符了,当然效率也是有保证的,D前几个版本已经完成了NRVO,struct也可以在栈上分配,所以不用担心性能,不过编译时注意打开-O选项。
简单测试了一下,性能与基本类型基本上没有差别:
template WrapStruct(T)
{
T value;
T opCast()
{
return value;
}
typeof(*this) opAssign(T)(T ...
- 2007-04-10 21:45
- 浏览 4722
- 评论(12)
做了个简单的单元测试框架,只算个毛坯,遇到一些问题。
1、由于没有完整的堆栈跟踪,所以无法打印出断言失败的行号。
2、无法获得行号,成功、失败或异常都需要显示这个。
3、由于unittest关键字后面的块是一个函数,所以把这个单元测试放在里面时,成了内嵌类,这时D禁止调用static ctor。当然这不算是个大问题。
只做了简单输出,没什么实际用途。代码如下:
class TestCase
{
public
template TestCases(Methods ...)
{
static this()
{
typeof(this) instance = ...
- 2007-04-10 21:20
- 浏览 3148
- 评论(1)
文档从MSDN抄过来的,稍稍改了一下。
module array;
struct random_access_iterator(T)
{
private:
alias random_access_iterator!(T) self_type;
T[] array;
size_t pos;
public:
static self_type opCall(T[] array, size_t pos)
{
self_type ret;
ret.array = array;
ret.pos = pos;
return ret;
}
...
- 2007-04-05 23:55
- 浏览 12033
- 评论(70)
写了一个编译期执行的fibonacci模板:
template fibonacci(long n){
static if(n <= 2)
const long fibonacci = 1;
else
const long fibonacci = fibonacci!(n-1) + fibonacci!(n-2);
}
static long a = fibonacci!(40);
D语言新支持的编译期执行函数也可以完成:
long fibonacci(long n){
if (n <= 2) ...
- 2007-03-15 15:58
- 浏览 4226
- 评论(2)
借助D语言新的mixin表达式,可以完成一些代码生成功能,比如:
template attr_accessor(T, char[] name){
mixin("
private T _" ~ name ~ ";
public " ~ name ~ "(){
return _" ~ name ~ ";
}
public " ~ name ~ "(T v){
_" ...
- 2007-02-24 14:35
- 浏览 4123
- 评论(3)
跑去听了苹果Leopard技术研讨会,主要是讲Leopard的新特性,终于知道了在Mac上编写程序是多么有趣和轻松,做出来的东西看起来也很专业。听得多忘得也多,瞎写点。
感觉Apple是把自己使用的反响比较好的东西都开放出来了,所 ...
- 2007-01-24 14:46
- 浏览 3279
- 评论(0)