- 论坛徽章:
- 2
|
starwing83 发表于 2012-11-18 09:45 ![]()
回复 34# OwnWaterloo
我想说说我的观点。BASIC里面有goto,确切地说,1980年的GW-BASIC里面**只有**goto,所以产生了不少面条代码。所以你说goto是坏的,goto是恶魔。到了2012年的今天,有人听到了“goto是恶魔”这句话,于是就说“C语言里面goto是恶魔”,愚昧不?
C里面指针乱指导致内存泄露,于是人们说“Haskell内存不安全,指针乱指容易泄露”,傻逼不?
为什么一门语言的缺陷,就必须是所有语言的缺陷呢?
C模块容易造成安全性的私有模块的问题,仅仅在C模块——因为那在Lua能力范围之外。所以,你有选择是否导出的权利——确切地说,你只有明确地导出才能用。这避免了你喝醉了酒误加了一个参数然后把某个模块公开了——这不可能。你至少得写一打代码做导出。
而Lua模块。为什么我最开始说Lua导出的只有函数?是因为Lua的函数不危险。它们没有上下文。或者说,他们的上下文是死的,是文件里面写死的。Lua的模块机制是“平”的。即使你写a.b.c.d.e.f,到了module.loaded里面也是平的。平的模块机制是无法解决隐藏模块的问题的,也不需要解决隐藏模块问题。Lua无意隐藏任何模块。因为你只要拿出来的模块,就可以公开,出问题了是谁的问题呢?前面说了,社区啥啥啥的。语言为什么要强制某些东西呢?特别的,在Lua这种连参数数目都不强制,连变量声明都不强制的语言里面,你去强制不允许载入某些模块,你不觉得很可笑么?
谁在说不让用户加载是为了安全性了?
私有/公有界面的重要性,还需要我多说? 那为什么要将私有/公有的划分仅限制在函数/域级别? 而不将它扩展到库的组织上?
首先,我没有说要强制。 其次,lua不支持的需求就是可笑的? 如果你要为lua辩护到这种程度, 也没什么好说的了。
我觉得lua作者的解释比你来得更诚恳:
http://www.lua.org/pil/16.4.html
The main design for objects in Lua, which we have shown previously, does not offer privacy mechanisms. Partly, this is a consequence of our use of a general structure (tables) to represent objects. But this also reflects some basic design decisions behind Lua. Lua is not intended for building huge programs, where many programmers are involved for long periods. Quite the opposite, Lua aims at small to medium programs, usually part of a larger system, typically developed by one or a few programmers, or even by non programmers. Therefore, Lua avoids too much redundancy and artificial restrictions. If you do not want to access something inside an object, just do not do it.
lua的作者都知道要尊重私有/公有的区分,不觉得这有什么可笑的。只是在lua里,因为各种原因语言不提供这种区分,程序员自己商量。
|
|