为什么没有更多的应用程序编写的多国语言?(Why aren't more applicati

2019-07-30 06:27发布

即使是20年前,它是可以调用一种语言编写调用写在其他代码的代码; 在学校里,我们称之为装配图形程序从Ada代码中的一个课堂作业。 值得注意的例外正在从脚本中或从编译的代码内执行的系统命令编译的代码; 但很少这样做,我们在编写C ++库在我们的Java应用程序使用。 当Java的第一次出现,它仍然缓慢,出现了用Java编写的主应用程序和瓶颈代码移入一些C / C ++ DLL使用JNI调用的选项。

所以,毕竟这些年来,是什么让我们从编写多语言应用程序吗? 当然主要的场景我心目中是当语言被认为是一个不错的选择,如果不是因为某些性能瓶颈(如在earlly的Java天),所以它不是使用两种语言的混合完全用C语言编写。

我是从架构的角度,以及语言的设计感兴趣。 你有什么很好的例子,成功的故事,或报价?

[编辑]一的最好的例子是对Java中的反弹,因为它的速度慢的性能早期。 虽然JIT编译已经解决了这个问题,我的问题是总是对的,使得它更容易编写,阅读和维护语言编写软件。 如果有一个瓶颈,写汇编或C例行只是瓶颈。 这样,你应该得到两全其美的,至少在理论上。

Answer 1:

我看到的最大的问题是,因为它需要对球队每个人都非常多样化(见乔恩斯基特的答案)。 如果你有一队十人三知道C#非常好,一些VB.NET,三知道VB.NET非常好,非常小的C#,和其他四个知道C ++非常好,但仅在C#或VB没关系。净,你能想象什么样的程序,他们会写是多语言? 它可能会变成好了,但如果你失去了几个队员,时间是至关重要的,并说这是你的C ++的家伙,现在谁去解决这个问题的代码? 肯定不是.NET球员谁不是C ++不同。 这可能会导致很多问题。

我明白为什么今天的应用大多是单一语言的第二个原因是因为当你达到一个高数行代码,这是非常好的,能够按照同样的流程,模式和看到整个系统中相同类型的代码。 你的大脑并不一定语言之间进行切换到想办法的,因为你已经在“思考C#”为例。

我在C#中的朋友,谁在VB.Net编写了用户界面,和他的后台代码,他总是存储在DLL的。 这是正常的,VB.NET和C#的工作真的很好在一起,但说他需要外包给别人修理的代码段,其中的一个错误是无论是在VB.NET和C#代码,很好,他作出需要外包两个开发人员,一个精通VB.NET,和其他在C#。 当他可以在一个刚刚做呢?这会增加成本2倍,以及开销。

然而,我完全同意有关可能使用C ++的性能关键部分的应用程序。 有次,其中根本.NET可能不是代码性能的关键部分一个不错的选择。 这种代码的混合是绝对没问题。

从长远来看,代码混合是不是一件坏事。 它可以是一件好事,因为它会帮助你作为一个开发者变得更加多样化,改变你的思维方式,并帮助你作为一个开发商。 但是,你必须为更多的开销,可能成本,甚至沿途有些无奈准备。

也许一个好主意,你(如果你正在寻找这种类型的答案)是选择每种技术的语言。 我个人写在VB.NET我所有的web应用程序(asp.net等)。 这是快写,很容易阅读和易于维护。 而对于网络,这正是你想要的。 我所有的桌面应用程序但将被推入C#,因为它在某些方面较强的语言,并提供了一些东西VB.NET没有。 真的,这是这里所有的个人喜好,但你的想法。



Answer 2:

使用多国语言包括:

  • 更加多元化的技能,而不是每个人都可以在任何地方在系统中解决问题
  • 往往有些疼痛跨语言调用,取决于所涉及的语言方面。 (你的JNI的例子是在这里好 - 这是肮脏的IME的P / Invoke是简单了很多。)
  • 往往更难调试
  • 更复杂的构建系统(例如,使用Java你得到的可移植性 - 但是如果你已经有了一个本地库来构建和部署为好,生活变得更难...)

是的,它有时是值得的 - 但我不会做它,直到我有一个很好的理由。

.NET和Java都使这个轻松了许多,当然-使用在一个平台上不同语言比之间的互操作容易得多(说)管理和本地代码。



Answer 3:

人写的多语言应用程式所有的时间。 你提到编译从脚本语言称为码。 这从Groovy中的Python,Perl和Lua中或R.或Java真的发生的时候,如C ++。 不知道多久C ++是从Java调用,但我敢肯定,它同样会发生。

这就是为什么痛饮是如此受欢迎。



Answer 4:

UNIX一种时尚后,已经解决了这个问题。 写小实用工具的UNIX风格,可以串成一个解决方案是写在多语言应用程序的一种形式。 代替限定接口和/或机构,用于语言之间的相互作用,例如JNI的,命令行或壳环境已经成为事实标准。

不知置身于UNIX,或缺乏,是什么使这个话题要么不值得努力或令人恼火分别复杂。 也就是说,那些具有UNIX的经验,因为他们不同的方式处理设计的问题,使他们的应用更加模块化的内部凝聚力和不打扰JNI; 更有利于变成一个组件中的应用程序,而不是一个单一的单片怪物的字符串。



Answer 5:

取决于你如何看待这个问题,有两种是,或者不是,很多写在多张语言的应用程序。

例如,考虑使用多个Web服务混搭的Web应用程序 。 每个Web服务可以写在不同的语言。 因此,在某种意义上, 这样的应用程序用多种语言

或者,你可以看看“简单,”非混搭,网络可能使用的应用程序

  • SQL的持久性
  • C#/ Groovy中/回报率的/ etc。 应用程序逻辑
  • JavaScript / CSS /(X)HTML呈现

甚至有可能是一个OR / M工具 ,或LINQ到 C#的情况下,SQL语句 ,用于访问数据存储。 让我们不要忘记嵌入式各级代码的正则表达式的健康洒。 这些都是不同的语言。 所以在这个意义上说, 多国语言经常用于构建应用程序

但我不认为这就是你的想法。 我觉得你的预期范围是“主体”由一个单一的项目团队生成的代码 。 你想知道为什么一个项目不写,比方说,在Java中一个组件,另外在Lisp语言,并在二郎一个三分,然后将它们全部连接在一起的一些统一交付。

有些答案已经提出了类似的构建/部署更难,或者并不是每个人都能够在系统各部分的工作,因为有些欠缺尤其是语言技能。 我不会对这些类型的答案出售。 我见过讨厌的构建/部署在主要写在一个单一的语言项目的脚本。 在我的经验,当几乎所有的项目达到一定规模,尤其是如果它是由不同的思想,就很难让每个人都在系统的每个部分深谙。 此外,从一种语言到另一种(给予足够经验丰富的开发)跳真的是不一样大的障碍的一些做出来是。

问题是,我们不能只是插上的代码拼凑像乐高积木 。 我们希望,在某些情况下,也许我们可以排序的,那种-的做到这一点。 这个问题主要是关于规范面向公众分量接口组件依赖性的成熟。 再次,我已经看到了一个“大多是一种语言”项目的方式这个东西搞定。 但是,当你跳语言边界,情况就比较复杂了。

无论如何, 具有正确的问题“正确”的语言是非常有价值的 。 如果你真的相信你有最好表现在三个组成部分,比方说,爪哇,Lisp语言,和Erlang,那么它是你的优势,在写这些语言的组件。 只要你想到的是将它们连接在一起,并保持这些链接所需的工作并不比你多语言编写得到值

现在,它真的可以归结为减少组装部件的成本。 这是一个稍微不同的概念不仅仅是说:“构建变得更难。” 具有明确的公共接口,正确的信息隐藏和相对无痛依赖发现和解决,没有理由为什么一个项目的组件不能在多个语言编写。



Answer 6:

“所以,毕竟这些年来,是什么让我们从编写多语言应用程序吗?”

这可能被视为有在语言B.字节对齐,字节序,参数顺序等覆盖所有的陷阱,让您可以在晚上睡觉调用语言A代码从代码太多的陷阱需要时间。

.NET试图解决这些,但我不知道有多好。 这是另一个讨论。



Answer 7:

我最后的4个作业已经应用程序,叫做:

  • 从C#Java和从F#C#
  • 从Java红宝石
  • Python从TCL,C ++从Python和C来自Tcl的
  • 从Java的Python和Java的计划

(这还没有算上SQL,JS,OQL等)

在我的经验,转变是相反的:更多的语言。 这种情况的原因包括:

  • 标准的虚拟机,如JVM和CLR,让语言无意中合作
  • 上C的对象系统,如GLib的,对于本地编译语言提供类似的功能
  • 计算机系统现在大,速度不够快,大家都使用同一个查询语言数据库(甚至SQLite是目前被认为是很小的!)
  • 最流行的新平台,网络,要求你,如果你想响应的客户端交互使用JS,你很可能不会在服务器上使用JS
  • 网站还提供了一个自然的方式在同一系统中,例如,一个Python程序和Ruby程序整合完全不同的程序,用正确的CSS / JS /主题化,可能看起来相同,且相互链接,使得用户甚至从来没有早知道这些是2个独立的程序

这些都是付费的项目,BTW。 在我的个人项目,我总是最后使用一种语言。 远远超过了能够拉包,并将它与我的项目快速整合的好处简单。



Answer 8:

我完全同意这个问题的前提下达成一致。

这是比较容易学习多个领域专用语言,而不是试图去学习一种通用的语言应用到一组不同的域。

不要被愚弄,以为使用一种通用语言缩小所需的技能和以任何方式学习。 只是,现在你必须学会​​如何扭曲单一语言到各种形状和学习半打框架去用它。

我们写了更换10000行的通用Java代码与750行代码与Java写成2级的DSL和粘在一起的系统。 我们之所以在1/10的时间在原来的系统,包括DSL学习时间。



Answer 9:

是什么让你觉得这是不是发生了什么?

我的ASP.NET MVC应用程序有一些C#,VB.NET的一些和一些JavaScript。 我可以很容易地扔在一些Python和F#,但还没有发现需要走那么远。



Answer 10:

一种情况是当库或其它罐装代码来从应用不同的语言。 很多这种东西是用C写的,和很多应用程序现在都没有用C写的数值的东西往往是写在Fortran语言(在读研究生,我不得不接口一个Fortran程序到Common Lisp的应用程序)。

当你有重要的部分已经写的,它是一个更容易只是使用其他语言比重写和验证别人的代码。



Answer 11:

我在最近的项目中使用C和Lua的(或C ++和Lua)的混合。 我觉得它解放得到两种语言具有不同的优点和缺点与平衡。 该Lua代码被编译大部分(烤)到同一个exe文件,所以最终的结果仅仅是一个二进制文件。

在调试这一点,理解这一切的困难,意见,是有效的。 它保持源代码行数低,但。

苹果公司的Objective-C确实几乎相同的“齐”的做法,而是通过切换线路的心态线。 我觉得困难。 Lua和C(++)让我通过源文件切换的心态。



Answer 12:

开发者一直担心性能,优化一样用C虚方法调用++或Java的字节代码运行时编译的,因为汇编被发明。 这是他们本性上的质疑什么是不很明显的。



Answer 13:

就我所见,那里包括一个解释器/编译器多langage支持两个主要的原因是:

  • 允许开发人员编写组件的功能,在那些罕见的情况下,当性能对于关键应用
  • 为缓解引入新的语言来开发谁可能会熟悉一些其他语言

第一个是很难见到,这主要是由于使用共享库(如DLL),并增加了抽象(代码和组件之间的抽象层之下是很厚),而第二个是属于市场的东西,和营销通常不是人写的语言规范(.NET是来记现在第一除外)的主要兴趣。



Answer 14:

略微不同的方面:

在20世纪80年代有能够全方位的功能的几种语言。 业务应用可以写成COBOL,但如果它需要复杂的数字程序,这些可能是写在FORTRAN提供量身定制的汇编用来管理功能由COBOL调用到FORTRAN。 现在有各种各样的学习语言和相关库,可以用一种语言提供全功能的选择。

上的计算机容量的严格限制(CPU,存储器,磁盘,I / O速度)也导致了需要使用不同语言的程序或系统的不同部分。



Answer 15:

在我家的项目,我称之为由C从C ++程序的Fortran或C程序。

在我工作的代码,我们有位C的混合的Java

它仍然发生,但人们尽量避免它,有充分的理由。



Answer 16:

即使作为一个初学编程的,我发现自己需要使用汇编语言零星的C代码,以加快东西了。 (这是用于使用相当缓慢的处理器板的一类跟踪线用照相机进料)

我建议,如果有人在某种语言写一块,比他们可能是最舒服的说的语言。 有将需要使用它们可能具有不舒服语言非常令人信服的理由。

在我的理解,很多游戏开发人员使用汇编关键数学库。



Answer 17:

我不知道是什么原因,但我想是有一个很多事情要做,我们开始有在90年代末的“语言笃怨妇”心态。 我即将踏上我想用C ++写了一个令人发狂的项目,但我想在很多其他语言的版本。 我可能会使用痛饮和的SpiderMonkey的组合这一点。

但是很多它真的可以归结为没有一个.DLL文件创建一个统一的对象/复用接口短。 COM在Windows上是伟大的。 IDispatch接口提供给任何说话IDispatch的事情。 这是伟大的C来写我们的组件++和ASP使用它们从VBScript。 但是,这样的事从来都对便携。 当然,尝试了通过CORBA和半打其他半生不熟的,而且不好接收的技术制造的 - 但它们都具有数据编组问题,调用问题,性能问题,字节序的问题。 没有人真的花时间试图解决它,现在这个行业正在向SOAP来取代它在性能不计(并坚持CORBA的地方一样)。



Answer 18:

我想的很大一部分原因是因为没有令人信服的理由这样做。 如果一种语言有足够的吸引力,使用(例如,面向对象)的特征,那么它可能有足够的吸引力,以用于整个项目。 BITD,它曾经是,你会重新汇编语言编写代码的部分,如果它不够快,或写适配器,这样你可以从C.如今调用FORTRAN统计包,没有太大的压力要做到这一点。 很多性能问题不是在代码中可以解决的(如网络延迟),并提供软件组件在几个“口味”为他们提供大多数企业(例如,Java jar文件或.NET组件)。 正如其他人所说,这里还有惯性许多开发者倾向于几个不愿意他们学习一种新的语言,尤其是如果它不同显著量。 而且,当然,如果语言一样,那么有可能是没有任何令人信服的理由,以了解它。



Answer 19:

我们写在多语言频繁。 这取决于手头的任务。 在最近的Web应用程序我编写PHP在Web框架,在客户端的JavaScript scrips,在德尔福后端引擎和PHP的插件和MS-SQL数据库。

目前,我在这里我们在德尔福进行快速原型,然后发送到生产在MS C#编码的环境中工作。 该公司还拥有多种使用其他语言。

几年前,我的工作是采用8种不同语言的项目。 这是一个正确的烂摊子,但它仍然是支持大规模。

所以,我真的不能与我们没有使用多种语言凯利法国的主张一致。 你只需要你的应用扩展到数据库或Web服务发现自己混合起来。 没有1周的语言,会做这一切。 如果有,我会使用它,它参加的教会在周日。



Answer 20:

使用多国语言,使重构更加困难和昂贵。 因为像从一个类移动的方法到另一个动作更难当这些类都写在不同的语言。



Answer 21:

我要说的是,许多比你更多的应用程序认为正在使用几种语言编写的。 只是一个例子:

  • 多少个最近的网络应用程序是用C写的? 几乎没有。
  • 有多少IP堆栈写有比C另一种语言? 几乎没有。


Answer 22:

这主要是一个管理问题。 答案是更多的是源于比技术经济Rathen市的。 简单地说,它是更昂贵。 你可以想像这样更难一切困难来管理,包括调试,重构,显影剂更换等。



Answer 23:

对于许多类型的应用,根本不需要“经典”多语言项目(涉及高级语言和低级语言),以及额外的复杂性成本显著:

  • 你的开发人员必须了解所有相关的语言
  • 构建系统必须支持他们
  • 便携性将受到影响
  • 虫子会比较模糊

OTOH,大量的现代应用程序已经使用许多不同的语言,例如,Java,JSP,XSLT和Javascript可能都在同一个项目中使用。



Answer 24:

我在python写它获取由C调用,查询使用SQL的数据库,进行使用HTTP其I / O,提供了正在使用TEI描述文件,使用XSLT转换它们,使得其在使用HTML和CSS客户端输出,格式化在一个特殊的模板语言其非文件输出,和使用JavaScript将功能添加到其的用户界面。

您可能已经注意到,这是一个非常通用的Web应用程序(除了TEI)。 你所谈论的技术是荒谬普遍。 动机不总是优化代码的速度敏感的部分,但是这些技术是肯定在那里。



文章来源: Why aren't more applications written in multiple languages?