我已经阅读了this,但我没理解。
制作自己的翻译有什么用。此外,它说平台独立性。毕竟平台独立程度受到解释器可以运行的所有平台的限制。所以,我没有看到任何优势。
另外,我甚至不知道dynamic typing的一个好用途。我觉得这没用。当然,我错了,因为那里有很多动态类型的语言。
有人可以帮助我吗?感谢。
答案 0 :(得分:2)
动态语言对于简单的事物非常方便。让我们说你想写一个小程序,将在两个文件之间进行区分。在python中你所做的是:
file1 = open(<filename>)
file1.read()
file1.split('\n')
#same for file2
for line in file1:
if line not in file2:
print line
所以file1
将作为FD开始。然后它变成一个字符串。最后一个清单。相同的9代码程序在java上至少需要两倍的行。
当您想要编写非常大的程序并在团队中工作时,麻烦就开始了。在Java中管理API和接口要容易得多。
答案 1 :(得分:1)
制作自己的翻译有什么用。此外,它说平台独立性。毕竟平台独立程度受到解释器可以运行的所有平台的限制。所以,我没有看到任何优势。
好吧,您使用已经存在的语言编写解释器。因此,如果您选择在平台上运行的平台(例如,Python),那么在任何这些平台上,有人可以获得您的解释器并使用它。因此,例如,如果您在Windows上编写解释器,我可以在Linux上运行相同的解释器,它将继续工作。
但是,如果你编写了一个编译器,那么你自己就必须为每个平台编写代码生成器。因此,例如,如果您编写了编译器,以便它在Windows上正常工作,当我尝试在Linux上运行它时,它会为Windows而不是Linux生成代码,因此它将无法工作。在我可以使用它之前,您需要做额外的工作,为Linux添加代码生成器。
另外,我甚至不知道动态打字的好用。我觉得这没用。当然,我错了,因为那里有很多动态类型的语言。
我认为动态语言很受欢迎有两个原因。
首先,它们更容易编写。类型系统需要额外的工作才能正确。
其次,因为动态语言用户不需要理解(静态)类型系统,所以很多人发现动态语言更容易使用。很多人都喜欢它们。
此外,类型语言背后的理论在过去十年中确实有所改善。它们更灵活,更强大。因此,较旧的类型语言不够灵活,而且通常类型语言仍然具有严格的声誉。
答案 2 :(得分:0)
对我而言,它的快速原型设计。虽然我现在更多地投入到'严肃'的Python中,但我主要用它来敲定我后来用C重写的概念。我相信它是Minix的作者,他鼓吹大多数C程序通常是作为shell脚本出生(没有双关语)。
我将PHP用于网络应用程序,以及与数据库进行严肃业务的原型设计服务,一旦我有一个我很满意的概念,这些服务也会在C中重新完成。
正如我所说的,我开始更多地信任Python(以及我使用它的技巧),因此Python中出现的一些东西将保持这种状态。但这是偶然的,我提到它只是因为我不会惹恼Python爱好者:)
另一点是,它真的取决于语言。动态类型语言提供了快速开发的非常诱人的承诺,这对于需要启动和运行复杂的基于Web的应用程序的许多人来说至关重要。
除了少数例外情况,如果我写的是绝对关键任务的话,我会选择C或C ++,特别是在时间/时间至关重要的情况下。
答案 3 :(得分:0)
编写解释器比编译器更容易。 (通常)编写的代码较少。
要用语言执行程序,您需要(1)读取源代码,以便以某种内部格式(通常是树)表示它,并且您需要(2)运行时系统。无论您使用编译器还是解释器,都需要这些东西。
如果您为您的语言编写解释器,则添加实际执行步骤相当容易。如果只执行程序的树表示,则不需要太多代码。 (但它将比其他方法慢得多。)
对于编译器,您需要将(通常)翻译成完全不同的语言,并且(通常)插入用于管理程序流和资源的基础结构。这是更多的工作。
答案 4 :(得分:0)
交互式shell是解释语言的一个优点。这允许在编写代码时对代码进行评估和测试。 “只编写一些代码”要比编写整个程序然后先编译它的语言要快得多。在代码行中,差异可能不是很大,但开发过程是不同的。
您不一定要在解释和编译之间做出选择。一些语言具有解释的实现和编译的实现,例如的Python / Jython的/ IronPython的。这允许解释器的开发优势以及虚拟机(JRE / CLR)的性能和可移植性优势。
答案 5 :(得分:0)
维基百科谈论的优势是语言实现者的优势,而不是语言用户。对于语言用户来说,最重要的缺点是解释代码的执行速度较慢。一个优点是代码可以立即执行:您不必等待编译完成。如果你有一个快速的&amp;增量编译器(例如Lisp编译器,F#交互式)。编译然后执行比解释运行超过几毫秒的代码更快。如果您的代码花费的时间少于它,那么无论如何都会感觉到它。
完全可以在编译语言中进行动态类型化,REPL,动态作用域,评估和自动内存管理。例如,C#具有动态类型&amp;自动内存管理,F#&amp; OCaml有一个REPL,自动内存管理,Lisp具有上述所有功能。