在运行时决定类型的静态类型语言?

时间:2012-07-20 18:55:55

标签: language-agnostic programming-languages language-design language-features esoteric-languages

例如,Ada中的这类内容(如果它支持这一点):

type Type_Name is range bottom .. top;

其中“bottom”和“top”是变量。

或类似的东西在C中(如果它支持这个):

struct s {
    int a;
    if (z<3) {
        char b;
        int c;
    } else {
        struct ss {
            int b;
            char c;
        }
    }
} v;

或者,如果c要在声明中包含变量标识符之后的类型:

var if (z<3) int else char;

或类似的东西。

这只是出于好奇。我甚至不知道它是否有用,我知道这会产生很多问题,比如在使用之前必须检查s.ss.b之类的东西是否存在。

哦,也许我应该重新提出标题中的问题:是否有任何静态类型的语言在运行时决定类型?如果是的话,他们是什么?

顺便说一句,也许这意味着该语言不会被静态输入。但我的意思是必须在使用前声明变量类型的语言(当然不能这样做)。

2 个答案:

答案 0 :(得分:1)

在运行时决定类型的静态类型语言中没有什么意义。静态类型的关键是静态地检测所有类型错误,也就是说,在编译时。

如果你要在运行时决定类型,你也可以放弃“类型”的概念,并使用鸭子类型的方法,重要的是操作是否受支持。

使用静态类型语言在运行时决定类型的唯一原因是处理在编译时不可判定的情况。可能有这样的语言,但我真的不再关注语言开发场景,所以我不能告诉你。

答案 1 :(得分:0)

您可以使用静态类型语言模拟动态用法。当然会有一些限制但你可以这样做

一些例子:

在c#中,以下代码是有效的。

object variant;

if(a<5)
     variant = new int();
else
     variant = new double();

和c ++

boost::variant< std::vector<int> , std::list<int> > v;

if (n > 10000)
   v=std::vector();
else
   v=std::list();

有效。