`
webcenterol
  • 浏览: 943741 次
文章分类
社区版块
存档分类
最新评论

编程世界中惯性的力量

 
阅读更多

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie

讨论新闻组及文件

今天下载lua的Windows二进制发布luabinaries 的时候,发现luabinaries的发布包含两个dll,lua5.1.dll,lua51.dll,其中lua5.1.dll大小合适,lua51.dll只有11K,感觉不像是个有用的lua dll,对此比较不解,查看了luabinaries的文档,
文档中如此解释:
The LuaBinaries DLL packages have a dll proxy called "lua51.dll". It can be used to replace other "lua51.dll" released by other distributions. It will simply forward calls to the "lua5.1.dll". There is no compiled source code involved in the forwarding.
也就是说,lua51.dll完全是一个lua5.1.dll的代理类,没有任何实际的代码,仅仅是做一个到lua5.1.dll的forwarding。
不过文档解释了lua51.dll是什么,却没有解释为啥会需要一个这样的东西呢?我还从来没有见过类似的情况。要说有一点点类似的情况的话,也是以前做反外挂的时候,知道可以通过替换现有的dll,并且完全模拟原来dll的接口,并将不需要hack的函数全部forwarding到原来的dll中。对于lua怎么会需要这样的功能呢?
于是我google了一下,发现了原因:
The standard DLL name "lua51.dll" has been selected more than
three years ago. Around twice every year someone comes along and
thinks "Oh, we absolutely need a dot in the DLL version number".

Alas, Windows does not like an extra dot in there. Many things
break when you have an extra dot in DLL names. Depends on the
version of the OS, on the specific system call, on the library or
tool used ... it's hopeless. So please let's forget about it.

--Mike
来自lua-users.org的一个帖子
原来是3年前有人确定了一个lua51.dll名字的动态库,并且,有人觉得我们非常需要在5和1之间加一个点,不然lua的5.1版岂不是看成lua的51版了?
对此,有人进一步提出了疑问 ,认为这个问题怎么这么久了竟然没有人修复?
接着有人回答了:
But who's duty is to resolve the issue?

It's clearly not an issue of Lua as a language. It's just a consequence of (a very popular) LuaBinaries once releasing lua5.1.dll that became a de facto binary standard, then authors of many third-party Lua libraries were releasing binary packages compatible with LuaBinaries.
Note: I'm not blaming LuaBinaries; that was just one unfortunate decision that is difficult to be undone. --
Shmuel

我们知道了:
LuaBinaries做出了一个错误的决定,但是已经发布了,很多第3方的库也发布了,并且依赖于LuaBinaries的这个lua51.dll,于是:
that was just one unfortunate decision that is difficult to be undone.
那仅仅是一个过去做下,现在难以撤销的不幸决定。。。。。。。。。。。。


有的东西存在了,即使是不合理的存在,因为它存在了一段时间了,因为惯性,它还会存在在那里。编程中,这种情况经常出现。突然让我想起上个项目中,大家经常对项目中蹩脚代码存在原因的解释:“历史原因”。
对于代码来说,即使大家都知道可以重构,但是重构是有代价的,很多时候大家就妥协在历史原因当中。
对于语言来说,C++就是对历史进行最大妥协而产生的语言,大家都承认,假如当年C++不兼容C的话,C++根本就得不到现在这样的流行程度,也都承认,因为C++兼容C,(常常被称为历史的包袱)C++在语言的优美程度上损失了太多。
想起国内某个大牛有过类似的感慨,“现在每做一个设计决定的时候都非常小心,因为那可能会被使用非常非常长的时间,当它还能正常工作的时候,甚至不会有人想要去重写它“
呵呵,仅仅将这个有趣的事件作为编程中的一个轶事来看吧。


原创文章作者保留版权 转载请注明原作者 并给出链接

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie


分享到:
评论

相关推荐

    编程世界里只存在两种基本元素

    ### 编程世界的两大基石:数据与代码 在探讨编程世界的本质时,我们不难发现其核心实际上可以归纳为两大基本元素:数据和代码。这两者之间的相互作用构成了编程世界的基础,也是所有软件开发和程序设计的核心所在。...

    Java基礎,大師生動形象講解,一看即通

    Java基础是编程学习的重要部分,尤其对于初学者来说,掌握好Java基础知识至关重要。大师的生动形象讲解能够帮助理解和记忆...通过这两种语言的掌握,开发者可以构建各种复杂的应用程序,并在编程世界中不断探索和创新。

    悟透JavaScript

    #### 数据与代码:编程世界的基石 在编程的世界里,数据和代码被视为两大基本元素。数据倾向于保持其原有状态不变,展现出一种内在的稳定性,而代码则充满活力,试图通过各种方式改变数据的状态。这种交互关系与...

    Carmaker.7z

    建模过程中,需要注意每个部件的物理特性设置,如质量、惯性矩、弹性系数等,这些参数将直接影响仿真结果的准确性。此外,CarMaker支持多种格式的3D模型导入,方便用户利用已有的CAD数据。 2. **CarMaker编程**:在...

    悟透JavaScript.txt

    - **数据的特性**:数据具有“惯性”,倾向于维持其原有状态,除非受到外部力量(即代码)的影响。 - **代码的功能**:代码的作用在于改变数据的状态,同时在这个过程中也可能受到数据的影响而发生改变。这种互动...

    FRC比赛用机器人的整体设计.pdf

    这项竞赛在全球具有极高的影响力,旨在激发学生对科学、技术、工程和数学(STEM)的热情,并为他们提供真实世界工程和商业经验的学习平台。 2. 机械结构设计: 机械结构是FRC机器人的基础,负责保证机器人的稳固性...

    具有区域移动能力的协作机器人技术研究.pdf

    这通常涉及到多种传感器融合技术,如激光定位、视觉定位、惯性导航等,以及先进的算法,例如机器学习和深度学习算法来提高定位的准确性和可靠性。 系统安全是协作机器人设计时需要考虑的另一个重要因素。由于协作...

    Physics-Sandbox:如何在 30 秒内爱上物理

    这些基本的物理力量被精确地编程到代码中,通过计算物体间的相互作用,使得每一个动作都遵循牛顿的运动定律。这不仅让玩家在游戏过程中理解物理规律,还鼓励他们探索和实验,从而深化对物理概念的理解。 此外,这个...

    ollie-vr:具有物理滑板控制器的虚拟现实滑板游戏

    "ollie-vr"的成功在于将现实世界中的运动技能与虚拟世界的无限可能相结合,展现了游戏开发中技术创新的力量。它启示我们,未来的游戏将会更加注重交互性和真实性,而物理控制器等硬件设备的发展将为这一趋势提供强大...

    electronic-fireworks:电子仿真变成了烟花

    它结合了物理学原理、色彩艺术和编程技巧,创造出一个生动、多彩且高度可定制的电子烟花世界,为数字娱乐领域开辟了新的可能性。通过深入研究和理解这个项目,开发者不仅可以提升JavaScript编程技能,还能领略到编程...

    PyNewton-开源

    例如,你可以创建一个刚体对象来表示游戏中的角色,然后通过设置其质量、惯性矩和初始位置来定义物理属性。同样,可以创建碰撞形状(如球体、盒体或多边形)来定义物体的外形,并将其附加到刚体上以进行碰撞检测。 ...

Global site tag (gtag.js) - Google Analytics