我想知道为什么C++,C语言,java开发者想要学习一种动态语言?

假设公司不会将其主要开发语言从C++/C#/Java转换为动态语言,那么动态语言有什么用呢?

在仅仅学习几天之后,动态语言可以比您使用多年的静态语言更快或更好地完成哪些助手任务?

使现代化

在看到最初的几个回复后,很明显有两个问题.

推荐答案

很多时候,出现了一些快速任务,这些任务不是您正在开发的主软件的一部分.有时任务是一次性的(将此文件与数据库进行比较,并让我知道差异).在Perl/Ruby/Python中进行文本解析要比在Java或C#中容易得多(部分原因是使用正则表达式要容易得多).使用Perl/Ruby/Python(甚至可能是vbscript cringe)解析文本文件并将其加载到数据库中所需的时间,可能比创建Java/C程序或手动解析要少得多.

此外,由于大多数动态语言解析文本都很容易,因此它们非常适合代码生成.当然,您的最终项目必须使用C#/Java/Transact-SQL,但不需要剪切和粘贴100次,查找错误,再剪切和粘贴100次,只使用代码生成器通常(但并不总是)更容易.

最近的一个例子是,我们需要将数据从一个会计系统输入我们的会计系统.该系统有一个导入格式,但旧系统有一个完全不同的格式(固定宽度,但有些东西必须匹配).任务不是创建一个程序来反复迁移数据.它是将数据推入我们的系统,然后继续在那里进行维护.因此,尽管我们是一家C#和SQL Serverstore ,但我还是使用Python将数据转换为可以由应用程序导入的格式.最终,我使用python并不重要,重要的是数据在系统中.我的老板印象深刻.

我经常看到用于测试的动态语言.创建Python/Perl/Ruby程序来链接到web服务并向其抛出一些数据要比创建等效的Java程序容易得多.您还可以使用python攻击命令行程序,生成大量垃圾(但仍然有效)测试数据,等等..很容易.

动态语言的另一个重点是代码生成.创建C#/C++/Java代码.以下是一些例子:

我经常看到的第一个代码生成任务是人们使用动态语言来维护系统中的常量.可以使用动态语言相当轻松地解析文本文件,并使用枚举创建Java/C#代码,而不是手工编写一组枚举.

SQL是一种完全不同的游戏,但通常通过剪切和粘贴100次而不是try 执行一个函数来获得更好的性能(因为缓存了执行计划,或者在函数中放入了复杂的逻辑,导致您逐行而不是一组).实际上,使用表定义自动创建某些存储过程是非常有用的.

最好是购买代码生成器.但是,即使你不这么做,花时间剪切/粘贴还是创建一个Perl/Python/Ruby脚本,然后让它生成代码更有趣?如果手工编写代码需要几个小时,但创建代码生成器所需的时间较少,那么即使在节省时间和金钱后使用它.如果创建代码生成器所需的时间比一次手工编写代码所需的时间长,但您知道必须多次更新代码,那么这仍然是有意义的.如果手工编写代码需要2个小时,编写生成器需要4个小时,但你知道,与创建生成器相比,手工编写代码的工作量还要增加5到6倍.

另外,使用动态语言比使用Java/C#/C/C++更容易一些.特别是正则表达式.如果您开始在Perl中使用正则表达式并意识到它们的价值,那么如果您以前没有使用过Java正则表达式库,您可能会突然开始使用Java正则表达式库.如果你有,那么可能还有别的东西.

我将给你们最后一个例子,这对于一门动态语言来说是非常好的任务.我的同事不得不拿出一个目录,里面有很多文件,然后把它们刻录到不同客户的cd上.有几个客户,但有很多文件,你必须查看他们,看看他们是什么.他手工完成了这项任务....一个Java/C#程序本来可以节省时间,但这一次,加上所有的开发开销,它是不值得的.然而,在Perl/Python/Ruby中拼凑一些东西可能是值得的.他花了几个小时做这件事.创建Python脚本来判断每个文件,匹配它要访问的客户,然后将文件移动到适当的位置,只需不到一个步骤.....同样,这不是标准工作的一部分.但这项任务是一次性完成的.是自己做更好,花更多的时间让Java/C完成任务,还是花更少的时间在Python/Perl/Ruby中完成任务.如果你使用C或C++,则由于C或C++编程中的额外关注(指针、无数组边界判断等),这一点更为引人注目.

Ruby相关问答推荐

Ruby脚本递归地创建深度嵌套的目录

鲁比.METHOD_MISSING+SEND对于带有命名参数的混合参数失败

定义Struct时如何指定成员的类型?

当数据包含换行符时,Ruby PKCS7 无法验证

Ruby 中的 Monad 类似功能

由模块中定义的另一个覆盖方法

需要Ruby

Encoding::UndefinedConversionError

Ruby 中是否有像 C 中一样的主要方法?

如何将参数传递给 array.map 快捷方式?

如何将 each每个方法添加到 Ruby 对象(或者我应该扩展 Array)?

Rails - RSpec - let和let!之间的区别

如何判断是否安装了gem?

读取文件时如何避免 UTF-8 BOM

如何在 ruby​​ net/http 中实现 cookie 支持?

如何在 Ruby 中创建可重用的块/proc/lambda?

RSpec allow/expec vs expect/and_return

在 OSX 10.10 Yosemite 上安装 Nokogiri

OpenSSL vs GPG 用于加密异地备份?

如何使用 Ruby 的 self 关键字