首先批评一下Blogdriver的RSS,好像自从被BC收购以后,就开始越来越滞后,常常要过好几天才能看到它更新一次RSS,所以偶错过了很多gigix的新文章,874之。
上午跟令狐谈了一下现在gigix的RSS里“最新”(已经快半个月了-_-|||)的一篇《Annotation Sucks?!》,gigix和robbin显然都是反对annotation的。robbin认为这破坏了JAVA的纯洁性,gigix认为这不如XML的灵活性。
这个JAVA新增的feature很显然是跟.net的Attribute学的。但我和令狐倒觉得这个feature很好。
令狐说:我本来是很欣赏的,觉得把该表达的东西都放到代码中,不会产生“多处修改”而造成代码不同步的隐患。也比较清晰明了。但是gigix这种说法貌似也有道理。差不多就是attribute那个意思。不过感觉attribute大概因为遗留包袱少,更加激进。
我觉得从性能角度上说,annotation还是好的。毕竟需要用到annotation的方面都是很少改变的方面。而且如果它要改变通常源码也需要相应的改变。
令狐还转了一个在javaeye看到的说法:基本上不存在只要修改xml而不要修改代码的情形。
我之所以会关注这个问题,是因为我在用DELPHI实现动态代理来开发一个WEB框架时,业务逻辑是用BPL实现,二者之间打算通过AOP方式插入关于登录验证的部分。可是困难在于,并不是所有的页面调用都需要验证,那么如何区分呢?
当然,如gigix所说,可以通过外部XML来描述。但是如果有Attribute/Annotation这样的MetaData,我觉得是一个更好的解决方案。毕竟是否需要验证本身也是业务逻辑的一部分,与业务代码有密切的关系,分离到外部的XML中不但带来性能问题,还存在着潜在的不一致风险,而且这种灵活性又是不必要的。
所以还是觉得Attribute/Annotation是不错的东东。DELPHI里没有这个东东,看来我只好在方法名上做点文章了,虽然难看但总算可以实现吧。
其实XML和annotation也不冲突吧,一个框架完全可以同时支持这两样东西的。不过说句实话,在没有语言直接支持的情况下,XML还是一个不错的选择,方法名可以附带的信息太少了。
只要有工具支持能解决大量手工修改的工作量,Annotation也是可以流行的,现在有个国产的通用类型系统。http://220.194.60.234/minitype/index.aspx以后支持好多种语言哦,不知道能不能蹦达起来
是不冲突,但是俗话说“多只香炉多只鬼”,多了总是麻烦。说的也是,我再考虑考虑吧。
这个通用类型系统看上去想法不错,不过实现得怎么样就很难说。
所以说你是大致的看了一下而已,他的意图就是每个语言使用自己的原生类型,而用它的类型系统做中间层来自动转化啊,对使用者来说转化是透明的,不过想法是好,实现起来有难度啊,大家应该知道这种替人擦PP的活都是吃力不讨好的,万一那天别人的类型变一变怎么办,我觉得搞个中间标准的可行性还更可靠些,只要使用方便,效率高,是不是原生的其实无所谓,因为只有与别的系统通信的时候才会用到。
做联合国难呀,到处维和,还有霸权国家不肯交会费 😀
to Holyfire:恕我驽钝,我下载了他的东西看了一下其中的Demo,它进行操作的类型全部是MiniType,实例都是MiniObject,还有MiniMethod、MiniMethodParam……总之都是自己的一套啊,我没看到什么地方有“透明转化”的东东。我甚至没看到它是如何将自己的MiniObject转回原生类型的。能不能提醒一二?
先汗一个,原来虫虫已经看了Demo了,我只是看到他的广告上说实现透明转化的,现在想想可能是指不同语言的通讯转化是透明的吧。不过你也不要放弃你自己的原生类型啊,只是通信的时候转化一下就ok了。
暴笑一个,狐狸发堕落了,搞技术,这种蜻蜓点水式的精神已经不流行了….
大致的看了一下那个MiniTS,我觉得应该加强的地方是和原生类型的兼容性。不是每个人都愿意完全放弃语言的原生类型系统转而使用一套全新类型系统的。我希望一个类型系统是可以将原生类型“自动标准化”,而不是完全采用一套新的方式来定义类型。
如果还是需要手工转化,何不用现成的东西,比如COM,CORBA……
哈哈,这年头的广告素靠8住滴。^O^
大家好,我就是 MiniTS的实现者。现在 MiniTS 在开发过程中,对于C接口调用的易用性封装还没有最终做,所以大家看到的可能比较麻烦。其实还有一个主要原因是C本来就没有动态类型系统,所以肯定要自己实现一个也。。。:-P另外,有下载例子的朋友可以看一看 .NET 的例子。其思想和普通中间件的思想完全不同,如果你用.NET 就可以看出MiniTS誓把自己隐藏在幕后的决心了。当然,目前.NET还没实现方法调用功能。但很快会有更新。最近在用MiniTS做一个2000万注册用户的大型网站的安全认证服务器,出于安全性考虑,目前最新版的1.07还没敢放上去给大家下载。不过项目做完以后会放上去的。这个项目做完,MiniTS会比以前有相当大程度的稳定性。另外,我希望这个MiniTS不是芸花一现,我本人是做数据库实现的,技术水平做这个绝没有问题,主要是有没有精力以及进度如何,必竟这是我业余时间做的东西。对于有朋友提到的MiniTS与COM,CORBA的关系,它们之间主要的区别是:COM,CORBA之类的系统用IDL来生成代码,结果对象被死编码在用户程序中。一但接口有变化怎么办?这就是非常难办的事情。MiniTS将会直接用IDL来在内存生成对象,同时在运行过程中可以为一个对象增删改方法及方法实现。这样就极大程度的保证的系统的灵活性。开发人员也不必为了修改一个接口这样简单的事情而重新编译程序,要知道,重新编译程序就意味着程序版本的更新,也就意味着客户端程序需要升级,这可能是成本相当高的。非常希望听到大家对MiniTS的批评,便于我对其改进。
目前对于C接口,MiniTS 对于开发接口的方便性考虑,将工作重点放在了为 MiniTS 写模块的实现上了,现在我手里的这一版,用C写模块已经相当舒服了,完全是标准C。在将远程方法调用功能完成以后,我会把工作重点放在调用方的代码简化上。。。。呜呜。我在计划中的全文检索功能又要向后拖了。
呵呵,看上去不错,用静态语言实现动态化的功能,不过不知道性能方面如何?
我最开始也考虑过这个问题,但在做过测试之后心里有底了。MiniTS 最大的性能优势有几个方面:1、目前其它动态类型系统都是基于虚拟机的,而虚拟机却都提供了垃圾回收功能。以我个人看法,最影响效率和浪费内存的就是垃圾收集器。而MiniTS 是用C/C++实现的,内存管理这么重要的东西怎么能交给GC去做呢?因为GC只能以通用的方式处理内存,他不知道我们的应用实际上是一种什么情况,更无法根据不同的对象使用不同的资源回收方法。但在C里自己管理内存,因为自己了解自己,所以效率自然会快很多,对资源占用也不大。2、其实说到效率问题,真正应该相题并论的就是MiniTS和虚拟机的比较了,虚拟机虚拟了一个CPU,它的每一条运算指令都是需要虚拟机解释的(对于JIT,最少要解释一次)。而MiniTS没有自己的指令,所有的功能实现都由第三方语言自己实现,用C写的功能调的实际是机器码,用JAVA或.NET写的东西调用的是他们各自的虚拟机。而MiniTS本身只提供调用过程中的转换工作,比较起来,效率影响与MiniTS的关系不是很大。3、MiniTS 已经充分考虑到了效率,在对C模块的调用采用了直接构造参数栈的方式,已经对效率做了很大的优化,当然在完成以后还会对效率做进一步优化。
我看到了,谢谢。:P