选择非DSL脚本语言而非C#等静态编译语言的原因是什么?
CNC中 到目前为止答案很好。我觉得我应该进一步解释。我很确定人们使用Python而不是C#,而不仅仅是品味而C#而不是其他情况下的C#。
答案 0 :(得分:4)
脚本语言主要在两个方面表现出色:
中小型项目,其中性能不是首要任务,而且运行时环境的灵活性是。
构建特定于域的语言。脚本语言的鸭子类型,动态方法调用功能使其成为设计特定于域的语言的理想选择。当然,Ruby on Rails是这种功能的典范,但是在内部开发的专有软件中也存在许多其他的例子。
答案 1 :(得分:4)
只使用静态类型语言的程序员可能只是接受这是必要的做事方式。一旦你遇到鸭子打字,你就会意识到多态性实际上就是那么简单 - 没有额外的代码行来指定类型。
所有类型声明的东西都不是程序工作所必需的 - 而且这是经验的解放 - 只是编译器可以检查某些类型的错误。
如果你不用动态语言进行测试,你可能会遇到编译器会用静态类型语言捕获的运行时错误 - 但事实证明这并不是静态类型的胜利您可能会想到的语言,因为无论如何您都应该使用这两种语言进行测试。您需要使用静态类型语言进行测试以捕获类型检查无法捕获的其他逻辑错误 - 在许多情况下,这些类型的测试传递将排除与类型相关的错误 - 因此您不需要额外的额外在动态语言中测试以抵消您不必执行的类型声明编码。
结果不仅仅是提高了工作效率,而是专注于你想要做的事情,问题的关键,而不是陷入困境,告诉编译器一堆东西,这样它可以保护你免受错误无论如何,你将(至少应该)进行测试。
性能是权衡,因为动态语言在运行时不能承担这么多 - 但很多时候性能不是问题。如果是这样,您可以用较低级别的语言重写性能关键模块。像Python这样的语言使这很容易。
具有类型推断功能的语言是值得考虑的中间地带。
答案 2 :(得分:3)
开发速度通常,脚本语言不需要编译任何东西 - 只需键入并执行它。通常,如果您在调试器中停止编辑它,可以在运行时键入,不需要重新编译,不需要“编辑和继续”支持,也不需要任何操作。
许多脚本语言对静态类型等的限制范围也较少,您只需编写代码而无需担心字符串是否需要转换为整数,反之亦然,您只需按原样使用它就可以了。这是好事还是坏事都值得商榷,但我认为这是用于某些任务而对其他任务不利的事情之一。
加载项和库通常也更容易使用 - 您无需注册或安装任何内容,或担心程序集或GAC或签名的内容,您只需包含源文件即可完成。
因此,脚本是最简单的工作方式,这就是人们使用它的原因。
答案 3 :(得分:3)
主要缺点是这些功能通常太强大,没有严格的规则,编写无法维护的代码非常容易。
答案 4 :(得分:2)
因为Python就像飞行一样:
答案 5 :(得分:1)
可移植到其他平台,以及更简单的开发环境(通常只是文本编辑器,而不是Visual Studio)。
答案 6 :(得分:1)
有点被切向提及,但问题是措辞对比'静态类型'与'脚本',这是一个错误的二分法。在F#这样的语言中,可以同时使用简洁的语法,类型推断和一个 互动REPL。双方都有一些权衡和紧张关系,但你会得到两全其美的好处。
答案 7 :(得分:1)
根据我的经验,在开始设计/编码之前,你必须做出两件事:
如果您甚至不了解模板或OOP,那么使用C ++是没有用的。
根据经验:如果你从头开始(即研究)选择你最喜欢的语言(并且ofc足以完成你的任务),如果你在一个共同的领域(即网站)进行开发,那就选择语言根据您的技能和已有的工具。
如果
只需我0.02美元
答案 8 :(得分:0)
Duck typing:如果它像鸭子一样走路,像鸭子一样说话,那就是鸭子。
答案 9 :(得分:0)
我想在列表中添加另一个点:用户定义的逻辑。
如果编写的软件应让用户定义一些使程序运行的逻辑,那么像Python这样的脚本语言是理想的选择。用例包括诸如游戏任务脚本,数据集的统计评估以及邮件过滤器之类的内容。要设置复杂的过滤器规则,您不希望用户启动Visual Studio将一些代码编译成DLL,然后将DLL作为插件加载,而只希望用户提供一些定义过滤器的文本定义。过滤逻辑。
使用脚本语言编写软件时,包括用户编写的代码通常很简单。