eXile 的专栏

共5页: 1 2 3 4 5 
re: 好玩的Go语言[未登录] eXile 2010-01-14 21:40
@陈梓瀚(vczh)
google不可怜,可怜的是网民。
re: 好玩的Go语言 eXile 2010-01-14 10:49
@bluegene
这是想借助开源社区的力量,比如现在已经有人在做Windows 的移植,以及数据库的客户端,还有人在讨论GUI的设计。对于老外来说,开源只会太迟,不会太早。
re: 好玩的Go语言 eXile 2010-01-14 10:43
@陈梓瀚(vczh)
Go接口的实现可能是这样的,假设函数定义的形参类型为Myinterface,而实际调用的实参类型为A,所编译器会对A生成一个关于Myinterface的方法表,这样,实参的值并不是一个简单的对象指针,而是对象指针再加上方法表的首地址。
re: 好玩的Go语言 eXile 2010-01-13 11:30
吊诡的是,go语言的官方网站我在Windows下不能访问,但在Linux下可正常访问
re: 好玩的Go语言 eXile 2010-01-13 11:27
@陈梓瀚(vczh)
1)编译分析是根据包packege来进行的,一个类的函数必须定义在一个包中,但可以在不同的文件中。
2)interface有显式继承,当然也是以嵌入的形式。我也想到了C++的concept,但是Go接口又具有动态特性。
3)Go具有和C一样的ABI,一样的类型,一样的结构布局,所以从Go调用C很容易,但是,因为有GC,所以不支持从C调用Go。
4)超快的编译速度,无论是Go还是D语言,对c/c++的一个很大的不满就是编译太慢,当然不会再出现这个问题。库是二进制的。Go目前有两套编译器,其中一个编译器gccgo的目标是和gcc二进制兼容。
5)Go语言的库都是用Go语言来写的,个人感觉很好读,代码量也少得多,每个库也就是一两个实现文件,是学习Go的最好途径。
re: 好玩的Go语言 eXile 2010-01-13 00:09
说到开发效率, 在服务器领域,Go绝对优于Java,C++,就不用提了。
re: 好玩的Go语言 eXile 2010-01-13 00:05
@陈梓瀚(vczh)
不需要提前声明估计最根本的原因是为了简化编译器的开发吧?
不是这么简单。这是Go语言与其它面向对象语言的最大不同。举个例子就明白了,

type MyInterface interface { func doIt() } // 接口

type A struct {}
func (self *A) doIt() {} // 指针

type B struct {}
func (b B) doIt() {} //值

type C struct { A } // 嵌入

则A, B,C 都实现了MyInterface接口,也就都是MyInterface类型。没有继承,没有显式说明,静态绑定。Go把它称之为“最令人激动的事情之一” 不是没有道理的。
re: 好玩的Go语言 eXile 2010-01-12 21:13
关于为什么没有继承,官方FAQ是这么说的:它简化了类之间的关系,不再有复杂的类型体系。接口的隐式风格,使一个类型不需要提前声明,就可以一次满足多个接口,同时又没有传统的多重继承的复杂性——“这种风格需要一段时间来适应,但这是Go语言最令人激动的事情之一”。
re: 好玩的Go语言 eXile 2010-01-12 18:04
@陈梓瀚(vczh)
面向对象的两条重要原则:1.面向接口编程,而不是面向实现编程 2 优先使用组合而不是继承, 这在别的语言中只不过是口头约定,而在Go语言中,你则不得不这样做。
re: 好玩的Go语言 eXile 2010-01-12 17:31
@陈梓瀚(vczh)
如果可能的话,把相同的代码提取出来,组成一个新类或新函数,再组合进去。或者,使用一个代理类。我觉得利用嵌入还是比较好解决这个问题的。
re: 好玩的Go语言 eXile 2010-01-12 13:16
是的,毕竟Go没有继承,没有虚函数,它没有子类和父类的概念,所有的指针都视为不同的类型。但是,对于Go语言来说,接口不是指针,这是它和其它语言的不同。如果要多态,就应该使用接口,而不是具体的类。
这里只提出一个实现思路,不再提供源代码,请各位见谅。
re: 内存池实现 eXile 2009-11-12 12:30
用google的TCMalloc 直接替换malloc实现
myuml是作者开发的吗,似乎还不错,很轻量,界面也还可以。试用了一下,还是有些需要改进。比如,新建一个方法,过程太繁琐,其实可以直接输入:method(arg1:int, arg2:int):int,然后解析出它的参数和返回值,而不需要一个一个控件在那点半天。另外为什么发布的是DEBUG版的?
tr1是支持Express的,不过也是要Express SP1
对,用glacier2
lambda是个令人欣喜的特性,至于右值引用,可以极大地提高标准库的效率,但是对一般的程序员没有什么太大影响,不好理解的话,就当它不存在好了。
基本概念错误,LZ应该了解一下什么是函数类型,什么是函数指针类型,他们之间的区别和转化。
Windows下可以,只用于线程的叫critical_section
re: ifstream与CFile的效率 eXile 2009-05-19 12:07
800K的文件,要七秒,286也不至于吧
@蚂蚁终结者
BOOST_FOREACH 的那陀实现。。。还是算了吧
@空明流转
确实,没有lambda之前,for_each没什么意思。不过好消息是VC2010将会支持lambda.
@OwnWaterloo
谢谢提醒,RANDOM_VAR的定义确实不对,要改成你说的样子.
不过你说的加大括号或者foreach_helper加container引用的办法,是不行的。
至于,为什么使用下划线开头,正是因为这种命名方法不常用,所会才会避免偶然和其它变量重名的情况,一般也就是仅限于宏中使用。

这个也要用boost?

template <class T,int N>
inline const int array_size(T (&x)[N]) {
return N;
}
在实用主义覆盖一切角落的国度,人们都会变得鼠目寸光。
re: 智能指针LytPtr eXile 2009-03-21 01:49
bool operator==(_Type* Temp)const
实现中有个小bug
不是做web开发,而是本地桌面应用集成WEB服务。另外,现在很多本地应用实际上都是用网页来做界面。
@Arthur Lee
加上了。。。
re: 智能指针的代码实例 eXile 2009-03-09 17:18
ICE中的实现吧,这个并没有解决循环引用的问题。所以他还有一个GCShared
re: 编辑器近况 eXile 2009-02-25 22:12
不错啊,不过我觉得Notepad++确实挺好用的,SciTE也不错,更省资源。
字符串匹配我前两天刚好找了一个正向的boyer moore horspool算法,不过没有深究。Notepad++是开源的,里面应该有类似实现。
wx一直标榜的最大的优点就是原生界面,其实我觉得这反而是一个缺点,就拿你说的这个例子,要扩展一个组件就很麻烦。而在QT中,使用MVC架构很容易实现一个复杂的 treelist。
你说的换肤功能,在QT中只需要编写CSS就可以了,不需要自己编程实现。
另外,使用原生组件并不一定就比自绘组件性能占优,反而有时候在不同的平台下出现不一样的界面布局,调整起来也很麻烦。
re: 自己造的一个线程类 eXile 2009-01-19 14:13
Win32最好不要使用CreateThread, 使用 _beginthreadex
re: 用Google Docs写博客 eXile 2009-01-15 13:43
一个不太好的消息:Google将关闭在线笔记本
笔记本将不再吸收新用户,现有用户将只能通过网站访问,而没有浏览器扩展。
用户的在线状态,简单一点,直接保存在内存中,复杂一点,保存在共享内存中
那这个IShape把所有的接口都设计好了,按名创建就行了。
这用不到RTTI。
所谓反射应该是这样的,有一个公共类Object, 使用如下:
Object* object = createByName(“Circle”);
object->invoke("draw");
原来你的需求是这样的,一般的工厂模式解决的就是这个问题。
C++的反射功能是很弱的,一般而言,都是通过序列化来支持数据成员的构造,如果你还要支持成员函数(也就是你说的未知类),那就由强类型系统变成了弱类型系统。这个最好还是结合一个成熟的脚本系统来做吧,比如python等。我推荐Qt, 你可以通QtScript来使用JavaScript,配置文件可以通过Json。
@啸天猪
老兄说到点子上了。
看来确实是这样的,只有定义,是不会加载内存的,只有在实际使用时,才会加载。编译优化不太可能。
@bug
会生成多份的,这和类的静态变量是不一样的
@饭中淹
我测试过,地址是不同的
@飘雪

静态全局变量是不用的,它的作用域只是该文件,声明没有意义
re: 再次批判 裘宗燕 eXile 2009-01-05 21:06
大学教授译书,都是老家伙挂个名,然后找一帮学生翻的
@cppfan
是的,你说的太对了.
如果使用的是SGI STL或者STLPort,那么这种优化意义不大,因为SGI STL的实现已经考虑了对于POD的优化(通过typetraits来判断是否为POD,然后使用mem*函数) 。
提高vector性能可从两方面考虑:
1)使用特定内存池,实现一个Allocator, 利用vector 的第二个模板参数。这也是提高STL容器性能的常规办法。
2)此处成为性能瓶颈,是不是系统设计方面有什么问题?可以从整个系统优化的角度来考虑。
上面有些错误:

QSignalMapper* map = new QSignalMapper(this);
connect(button0, SIGNAL(clicked()), map, SLOT(map()));
connect(button1, SIGNAL(clicked()), map, SLOT(map()));
map->setMapping(button0, 0);
map->setMapping(button1, 1);

connect(map, SIGNAL(mapped(int)), this, SIGNAL(numberClicked(int)));
共5页: 1 2 3 4 5 

导航

<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

常用链接

留言簿(18)

随笔分类

随笔档案

服务器编程

搜索

最新评论

阅读排行榜

评论排行榜