我在互联网上阅读了一些有关企业中编程语言选择的文章。最近,许多动态类型的语言很受欢迎,即Ruby,Python,PHP和Erlang。但是,许多企业仍然使用静态类型语言,例如C,C ++,C#和Java。

是的,静态打字语言的好处之一是,在编译时而不是在运行时,编程错误是在编程错误之前捕获的。但是,动态的类型语言也有优势。 ((有关维基百科的更多信息)

企业不开始使用Erlang,Ruby和Python之类的语言的主要原因似乎是它们是动态打字的事实。这似乎也是Stackoverflow上的人们决定反对Erlang的主要原因。看 你为什么决定“反对”埃尔兰.

但是,似乎对企业中的动态打字似乎有强烈的批评,但我真的不明白为什么 强的。

真的,为什么对企业中的动态打字有太多批评?这真的影响了项目的成本吗?但是也许我错了。

有帮助吗?

解决方案

是的,我相信他们这样做。

在选择新项目的语言中需要考虑一些原因:

  • 运行时速度。与C/C ++/Fortran相比,Perl和Python非常慢,很有趣。
  • 初始化速度。与上述快速语言相比 爪哇 跌倒并随着JVM的负载和加载而哭泣,...while(1)....
  • 原型能力。详尽地浏览C ++或Java所需的声明/定义工作增加了LOC,这是 只要 已知的公制,可可靠地与Bugcounts相关。这也需要很多时间。它还需要对类型和连接的更多思考。
  • 内部摆动性。在您开始调试您的内部之前,动态地与您的内部搞砸非常好 自修改代码. 。 (Python,Lisp,Perl)
  • 正确性验证。编译器可以在C ++中快速提供代码的半校正通行证,这可以是 真的 好的。
  • 静态分析细节。 C和Java具有很好的静态分析。 perl在A上不能完全静态分析 理论 级别(可能也是Python)。我可以合理地确定LISP也不是。
  • 一般而言,怪异的平台仅为C。
  • 支持链。如果您可以签订合同 将要 仔细查看并处理错误,这就是 巨大的.

如果您可以假设与您合作的组织具有“前进”的原则(这是一个会计术语),并且 惯于 只需随机决定不使用该软件,就可以使用该软件更好。由于没有主要业务 出售 (承担维护责任的含义)Python/Perl/$ dynamic_language,它大大降低了风险。

根据我的经验,开源维护者通常会出现完全承担错误的责任和发布更新的问题。 “它是免费的,你在做它!”是 不是 大多数企业可以接受的答案(不是其核心汇编,除其他方面)。

当然,我不是在谈论WebApp/启动世界,这往往会通过高风险/高奖励规则来发挥 非常 开放,保持在技术的泡沫边缘。

其他提示

您正在给企业决策者的技术信贷太多。有一句老话:“没有人因购买IBM而被解雇。”如果您走了一条不同的路线并且事情变得艰难(他们总是这样),那么没有人想责备被责备的风险。坚持标准,责怪别人。

有很多年轻的公司最终将成为明天的企业,并将使用这些语言。

而且,我们不要忘记VBA编写的笨拙的代码!

企业使用C,C ++,C#和Java的原因不是因为它们是静态键入的(至少不是直接)。我向您保证,企业决策者并不是根据类型系统的客观比较做出这些选择。

企业 关心:

  • 长期维护成本: :您能否合理地期望事情在10年内继续运转良好?如果语言进化是保守的和向后兼容的(与Java一样),这实际上是一件好事。静态键入在这里很有帮助,因为它在编译时间捕获了主要类型的错误,然后才能进入您的生产系统.....
  • 人才可用性 - 您是否可以找到开发人员来维护您的闪亮新系统?如果原始开发人员离开,其他所有人都会理解代码怎么办?这在引入任何“新”语言方面构成了巨大的障碍(尤其是如果它也为部署,构建系统,运营支持等创建新要求)。这给广泛使用的语言带来了巨大的优势(C,C ++,C#和Java)
  • 整合成本: :与您已经拥有或可能获得的其他技术连接 /集成容易?如果您已经有一堆Legacy J2EE系统,则需要与它们集成。与Python相比,新的Java EE解决方案可能更实用。
  • 预期 /低风险: :平台 /语言是否经过证明,我可以确定它将起作用吗?通常是 更多的 比简单的生产力重要。对于经理来说,说服他的老板要给他一个巨大的预算,让他有一个大的预算来建立一个新系统,而不是稍后再回去说这不起作用.....
  • 企业支持 /支持 - 主要国际组织是否致力于支持语言和平台?他们会签署合同以支持我,以便我有问题如果出现问题吗?
  • 供应商中立 /平台独立性 - 我要锁定一个供应商吗?还是我有各种各样的未来供应商选项 /过渡路径?您不想被困在建筑末端,在竞争对手吃午餐时无法取得进展。如果您以企业建筑师的身份正确地完成工作,则需要考虑到至少5 - 10年的时间。

就我个人而言,我认为,如果您想在企业中使用动态语言,那么到目前为止,您最好的机会就是在现有的企业生态系统上使用pipgy的东西。最值得注意的是新的动态JVM语言:例如Jruby,Groovy,Clojure。就IT管理而言,这些是“安全”的动态语言选择,因为它们在内部运行并与Java Enterprise生态系统的其余部分合适。

企业不开始使用Erlang,Ruby和Python之类的语言的主要原因似乎是它们是动态打字的事实。

我认为这只是他们的主要借口。真正的原因是,企业并没有真正认真对待他们,并觉得他们也许有点业余。 Java和.net是“大型企业名称”,拥有良好的商业营销,商业客户支持,因此确实非常重视。

不幸的是,几乎没有静态的语言与大型企业名称一样受欢迎。为什么开源/免费软件编程环境几乎总是动态键入?这可能表明一种静态的语言实际上并不容易制作,而动态键入是“懒惰的人的黑客”。如果是这种情况,那么决定反对动态性语言的企业实际上可能有一点。

  • 动态键入的语言往往比静态类型的表亲慢。
  • 错误很难捕获,很难调试
  • 编译器/解释器对您可以做的事情和不能做的事情往往不那么挑剔。即,您几乎只是在编译阶段捕获语法错误
  • 如果您对动态键入语言的设计不太谨慎,则最终会使用JavaScript,这是 代码词的语言

编辑: 我应该提到,目前我的主要编程语言是Python,它是动态键入的。就个人而言,我喜欢不必预先修复变量而带来的自由,但有时是 很好地指定(例如)函数需要什么样的参数来捕获错误,而不是迟到。

动态键入的语言(某些程序员/老板)感知到也无法正常工作的代码。动态键入程序编译的事实几乎没有告诉您其正确性。静态键入语言编译的事实告诉您更多。 (另一方面,编译和做正确的事情之间还有很长的路要走,因此这似乎不那么有意义)

动态键入的语言被认为是脚本语言。您永远不会在bash或批处理文件中编写应用程序。所有动态键入的语言都倾向于将其循环到该类别中(不公平)。

动态键入的语言比静态类型的语言慢。 (但是我们将看到JIT的工作能力如何改变)

注意:这主要是主观的,并且基于我的经验和印象。

动态键入的语言与静态类型的语言大不相同。这些差异在重量级企业软件中可能比大多数其他应用程序更重要。

静态类型的语言往往非常规定。一种方法只会采用与其签名完全匹配的输入。访问级别往往非常重要,并且界面是明确定义的,具有冗长但明确的限制来执行这些定义。

另一方面,动态键入的语言非常务实。类型转换通常会隐含地发生,只要您提供错误的输入类型,函数甚至可能会播放,只要它的行为足够相似即可。在像Python这样的语言中,即使访问级别也将基于合同而不是技术限制(即只是 private 因为您被告知不要使用它,并且有一个有趣的名字)。

许多程序员更喜欢动态语言,因为(可以说)允许快速原型制作。该代码通常会缩短(如果仅由于缺乏类型的声明),并且如果您想违反适当的协议,因为您需要快速又脏的解决方案或想测试某些内容,那么这很容易。

现在,“企业”公司通常更喜欢静态类型的语言的原因是它们对这些限制更加限制和明确。尽管在实践中,即使是编译器的白痴也可以打破静态键入的代码,但在此过程中(即运行时之前),许多问题都会更加明显。这意味着,即使代码库很大,整体且复杂,也可以轻松地捕获许多错误,而无需运行代码或将其发送给QA部门。

对于在环境之外的许多程序员来说,收益不超过弊端的原因是,这些错误通常会通过对代码进行彻底检查,甚至通过尝试运行它而轻易捕获。尤其是在遵循测试驱动的方法时,这些错误通常会变得琐碎并且易于修复。同样,由于许多这样的公司的发布周期要短得多,生产率通常比刚性更重要,而且开发人员本身正在进行许多(基本)测试。

企业公司不使用动态类型的语言的另一个原因是旧版代码。尽管在我们看来,大型公司也通常会坚持使用的解决方案,即使他们已经超越了保质期,大型公司也会坚持使用。这就是为什么如此多的主要公司执行Internet Explorer 6,并且升级其OSS的速度如此慢。这也是为什么他们经常用“旧语言”(例如Java的古代版本)编写新代码的原因:要在不使用的软件中添加几行代码要比获得全新重写的批准要容易得多。语。

tl; dr: 静态语言感觉更像是官僚主义,因此企业经理像他们一样更好。

不,我认为动态类型的语言不应该受到所有批评。 (或者,如果您愿意,他们应该受到与静态类型语言一样多的批评。)

根据我的经验(而且我没有尝试概括此陈述),批评动态语言的程序员尚未使用它们。对话通常进行“但是静态键入编译器会遇到很多错误!”我说:“嗯,根据我的经验,这不是问题”。 (通常来自Java,Delphi或类似背景的其他程序员;我不知道Haskell或ML程序员。)

真正抓住我的唯一一件事是有人声称技术无法 可能 在动态键入的语言中完成(或可能很难做到)...当该技术是通过,动态键入的语言发明的。 id?短暂聊天。自动重构?短暂聊天。呼叫者/实施者?短暂聊天。

企业只是没有足够快地采用新的语言和工具,并且有充分的理由。但是,当像C#这样的主流工具之一实现其中一些功能时,它们将被滴入主流企业。

许可以下: CC-BY-SA归因
scroll top