- 论坛徽章:
- 0
|
本帖最后由 幻の上帝 于 2011-10-17 17:52 编辑
回复 幻の上帝
应该是指隐式转换吧?
是所有类型间的隐式转换都可以控制?
还是有一些类型的规则是定 ...
OwnWaterloo 发表于 2011-10-17 15:53 ![]()
和类型系统相关的许多基本的操作和表达。隐式转换是其中一种,其它如对内存模型的描述等;再如,通过语言实现来帮助用户确定一个实体是否需要是一个纯粹静态的类型的实例(用户在声明中只提供一个类型占位符,表示这里的实体自身不是类型,需要作为一个类型的实例),并在实现过程(比如优化)中进一步确定类型模型(这个应该不太现实,至少超过现在静态类型语言实现的能力了)。至于隐式转换哪些可控制……如果把除了描述存储的fundamental type——char或unsigned char之一——以外的都扔掉,都可控制也行。类型计算嘛……structural equivalence之类的或许不错,不过我怀疑会动摇以nominal typing为基础的整个类型系统。
更广范围地说,是通过语言本身重用乃至有限范围内覆盖(用户提供替代品)语言实现的能力。eval是这里另一方面的典型代表(但至少对于C这样的nominal typing的语言来说还不是极致,例如无法直接描述实现中用到的ADT——当然这样的特性应该超过了现在大多数具有思维惯性的用户所期望的了)。现在可以通过命令行调用编译器+动态链接之类的来获得类似效果,但这依赖于环境提供的具体接口,对于语言而言不可控的。
PS.其实C++已经在这方面走出一段距离了,例如<type_traits>和alignof。但还很不够。而且很要命的是,这些特性更多着眼于功能上而不是整体结构上的补遗,加大了语言的复杂性,使“反紧凑”体现得更加明显,更不容易用对。另外,无意之中也埋了许多包袱,像constexpr int a = 1;和typedef std::integral_constant<int, 1> a;之间的冗余看样子是永远无法消除的了。
其它略相关牢骚:
如果不算宏替换,C的抽象能力除了可怜的二等公民——函数、三等公民——类型以外实际上仅限于存储。C++好不到哪里去,某些能在编译期完全确定逻辑关系的调用(比如scope guard)居然需要依赖于helper class的生存期这种运行期属性(+优化)来控制,而没有更直接明确清晰的方法来表达,或许还让不知情者以为是高深技巧而自以为得计……这样的所谓“general-purpose programing language”,滑天下之大稽。设计模式之类的东西就非得用自然语言/UML什么的表达才够高尚吗? |
|