我一般对动态语言没有太多经验,但是我绝对喜欢一种动态语言,JavaScript(又名ECMAScript)。
好吧,等等,这里的讨论是什么?动态编译?还是动态打字?JavaScript涵盖了这两个方面,所以我想我将同时讨论这两个方面:
动态编译:
首先,将编译动态语言,只是将编译推迟到以后。Java和.NET实际上被编译了两次。一次是使用它们各自的中间语言,然后是动态地使用机器代码。
但是,推迟编译后,您可以更快地看到结果。那是优势之一。我确实喜欢简单地保存文件,并很快看到我的程序在运行。
另一个优点是您可以在运行时编写和编译代码。我不知道这在静态编译的代码中是否可行。我想一定是这样,因为编译JavaScript的最终都是机器代码,并且是静态编译的。但是在动态语言中,这是一件微不足道的事情。代码可以编写和运行。(而且我非常确定.NET可以做到这一点,但是.NET编译到的CIL总是动态地动态编译的,在C#中并不是那么简单)
动态类型:
我认为动态类型比静态类型更具表现力。请注意,我非正式地使用“表达”一词来表示动态类型可以说的少而多。这是一些JavaScript代码:
var Person = {};
你知道人现在是什么吗?这是一本通用词典。我可以做这个:
Person [“ First_Name”] =“ John”;
Person [“ Last_Name”] =“ Smith”;
但这也是一个对象。我可以像这样引用任何“键”:
人名
并添加我认为必要的任何方法:
Person.changeFirstName = function(newName){
this.First_Name = newName;
};
当然,如果newName不是字符串,可能会出现问题。即使有,它也不会立即被捕获,但是您可以检查一下自己。为了安全起见,要交换表达能力和灵活性。我不介意自己添加代码来检查类型等,而且我还没有遇到类型错误,这给我带来很多麻烦(而且我知道这并没有说太多。这可能是时间问题: ))。但是,我非常喜欢这种动态适应的能力。