除了它的预定用途以外,是否有任何一种语言因其流行而广受欢迎?


70

采取这种情况:

  • 程序员创建一种语言来解决某些问题。

  • 然后,他发布了这种语言,以帮助其他人解决类似的问题。

  • 另一个程序员发现,对于某些不同类别的问题,它实际上要好得多。

  • 借助于此新应用程序,该语言随后主要在该应用程序中流行。

是否真的有这种情况发生?

换句话说,语言的预期目的是否与语言的实际使用方式或语言是否流行有关?语言具有广告目的甚至重要吗?


4
您的HTML示例似乎与您要查找的内容实际上并不匹配,技术文档是否与其他任何文档都如此不同?HTML的核心目的仍然与1989年相同,目的是为文档提供相互引用的简便方法。恕我直言,HTML与您实际查找的内容完全相反。
扬尼斯,2011年

5
考虑一长串的答案;也许相反的问题更有趣:什么(流行)语言仅用于其预期目的?
夏普

@Yannis:好点。这不是最好的例子,并且无论哪种方式都可以被争论。编辑删除。
乔恩·普迪

@Jaap:我也这么认为!
leonbloy 2011年

2
在这方面,我可能是错的,但我可以肯定,大多数语言都没有按照其创建者的意图使用。我认为,这样做的主要原因是局外人不知道该怎么用,这有助于他们对一种语言的潜能持开放态度。
肯尼思(Kenneth)

Answers:


118

Lisp。麦卡锡最初在论文中指定了Lisp,以表明很少有简单的符号就足以构成完整的图灵语言。他惊讶地发现Lisp可以用机器代码实现(Steve Russel做了第一个Lisp解释器实现)。Lisp被广泛用于AI编程。


70
+ 1,Lisp 并不是要成为一种编程语言!我认为您无能为力。
Kilian Foth 2011年

7
OTOH,有人可能会说LISP是为在编程和数学之间的边界而设计的,并且一直存在。
MSalters 2011年

1
我相信McCarthy在他的课程中使用Lisp作为示例,并打算为其编写一个编译器,但是有一天在课程中提到,手动编码eval函数将实现解释器,但是当然“没有人会真正想要这样做”。
史蒂文·劳

我的Lisper朋友告诉我,它在AI中已经不再使用了,但它仍然无处不在
greyfade 2011年

111

Java最初旨在用于嵌入式系统编程。来自维基百科,“ Java最初是为交互式电视设计的”。但是它在应用程序和Web编程中变得非常流行。


4
嗯 不能相信我没有想到这一点。可以说这是典型的例子……尽管这并不是说我不会感到惊讶。
乔恩·珀迪

虽然,Java是否曾经真正发布过用于嵌入式工作的内容(在嵌入式Java出现之前,而不是在Web推广之后出现的)?
Marcin

设计Java中的关键设计元素是运行不受信任的代码的能力。

13
情况更糟:A)它是针对嵌入式系统的。B)但是直到将其嵌入网页之前,它才见识过。C)在用于“企业” Web应用程序之前没有得到任何尊重,D)最终被嵌入到许多电话操作系统中;但不是作为硬件控制器,而是GUI平台。
哈维尔

现在有一个将其放置到机顶盒上的项目已有10多年了–查找OCAP或tru-2way
Bill K

32

Lua最初主要是作为配置语言设计的,最终发现它是最流行的游戏脚本语言(因为它体积小,速度快,功能强大,可移植,易于扩展和嵌入,并具有用户友好的语法)。最受欢迎的游戏《魔兽世界》甚至没有真正使用它进​​行配置,而是使用XML。


...现在通过LuaJIT,它正在越来越多地用于实时处理应用程序中
哈维尔(Javier)


@lukas:“不是真的” 什么?注意,它的前身SOL和DEL甚至没有控制流,它们纯粹是配置语言。Lua是这些配置语言的扩展,以包括编程支持。

我会说“ Lua主要是作为配置语言设计的”。
卢卡斯·马顿

7
也许我应该说“预期目的”,而不是“主要设计为”。该预期的目的是使用Lua的地方正在使用SOL和DEL。这些是用户开始要求使用编程功能的配置语言。Lua是为了满足这一需求而创建的。正如作者自己所说:“ Lua在游戏中的广泛采用令我们感到意外。我们没有将游戏开发作为Lua的目标。” 这几乎就是OP所要寻找的,不是吗?

32

拉里·沃尔(Larry Wall)最初对perl的意图是使用“一种通用的Unix脚本语言来简化报表处理 ”,并且该手册页将该语言描述为:

Perl是一种解释型语言,经过优化,可用于扫描任意文本文件,从这些文本文件中提取信息并基于该信息打印报告。

当然,手册页还告诉我们Perl代表实用提取和报告语言(实际名称是最初的名称Pearl的拼写错误,当Wall发现一种已经存在的PEARL语言时便更改了该名称)。

从那时起,Perl走了很长一段路,因为这是众神在宇宙中发动力量的语言

在此处输入图片说明


23
一个人应该纠正:病理折衷的垃圾清单
理查德(Richard)

3
取消缩写的方法不止一种!非常Perly

Perl的任何缩写实际上都是反义词。
CanSpice

1
@DarkTemplar我的解释方式是perl几乎无处不在。从一开始,perl便成为一种非常流行的Web语言,一种非常流行的脚本语言,一种颇为流行的多用途语言,其正则表达式语法成为一种确定的东西,并催生了另一种语言(php)等。还提到了lisp,这是对该问题的公认答案,因此我认为这是对两种语言之间的关系的一种有趣的描述(尽管不准确)(一种是梦幻的语言,另一种是人们实际使用的语言)。
yannis

1
@DarkTemplar Yeap。这是在在TIOBE指数前十名。当然,您不会非常重视TIOBE索引,它是相对和主观的。但是仍然很好地表明了语言的流行。
yannis

28

我想JavaScript也适合这个问题,因为我不认为Brendan Eich在Netscape时代曾想过,他的LiveScript的将来版本会被用来创建当今所谓的Web“应用程序”。

JavaScript已从简单的表单验证和图像翻转转变为一种功能强大且可与脱机应用程序媲美的功能强大的工具。

但是不幸的是,我认为许多人仍然将其视为玩具。


31
有趣的是,它正在成为网络的汇编语言。换句话说,其他语言会被编译并执行。我不相信Brendan Eich希望如此

3
要添加一些内容:它不仅是一种客户端脚本语言。许多项目,例如node.js或rhino,都使用javascript作为服务器端语言
gion_13 2011年

只是好奇,但是“客户端脚本语言”与“服务器端语言”是什么?
黑暗圣堂武士

@DarkTemplar。服务器端脚本语言在服务器上运行,其输出发送到浏览器。客户端脚本语言按原样发送到浏览器,然后在该处运行。(当然,如果需要,可以使用服务器端语言来输出客户端语言。)大多数浏览器中唯一运行的语言是javascript。
TRiG 2012年

19

二郎 它是很久以前在爱立信实验室中发明的,目的是开发电话应用程序,可能用于他们的交换和访问设备系列。现在,它已发展成为一种有前途的通用动态语言,并带有有趣的并发概念。

如果将来会有更多来自电信业的语言跨界到IT世界并从那里发展,尤其是最初设计用于协议建模和验证的语言,那将是很有趣的。


这不是node.js的灵感之一吗?
dodgy_coder

认为这没有资格。Erlang被发明用于电话的原因是他们需要通用的动态并发语言。仍然是那样。
艾伦·巴尔吉


14

PHP最初是指Personal Home Page,但今天也用于一些稍大的Web应用程序。


18
当然,最大的PHP用户Facebook在许多方面仍处于个人主页市场中。
夏普

3
“ PHP / FI由Rasmus Lerdorf于1995年创建,最初是一组简单的Perl脚本,用于跟踪对其在线简历的访问。” 宝贝,这已经走了很长一段路。
尼克

虽然PHP仍然是非常多的一种Web语言,但是它却经历了一些角色互换:PHP本应作为小的片段嵌入HTML内,而现在许多项目都在PHP内生成HTML字符串。他们仍然需要<?php在文件开头添加标签!
Warbo

14

我非常确定VBScript并非旨在编写恶意软件,即使这是极其普遍的用法。


1
您认为这有点苛刻。Java和C有相当一部分恶意软件。
杰里米

@JChild:自您发表评论以来已经过去了几年。但是,即使到那时,捍卫VB也是一件很奇怪的事情。
Magus 2014年

@Magus甚至都不是VB。是VBScript。您知道扩展名为.vbs的文件。看到病毒后,您会自动认为它们是病毒。
user16764 2014年

13

最初被设计为使代码更通用的一种方法,但后来发现C ++中的模板元编程已经完成,而如今,它已被用于通过boost等库极大地改进了C ++语言。


8
......并把C ++程序员眼泪过长的构建时间;-)
quant_dev

8
和可怕的错误消息。
DeadMG

11

BASIC是另一个著名案例。它的名称(初学者的通用符号指令代码)暗示了它作为学习者语言的起源,但是自那以后它已经发展了很多。


24
嘿-微软将“初学者”替换为“业务”,并吸引了数以百万计的人
Steven A. Lowe

11

VHDLVerilog(又名VerilogHDL)最初旨在描述数字电路和组件。它们被用作文档形式并模拟组件的行为。后来,Synopsys和其他公司开发了一种技术,可以将这些描述(的一部分)转换成门的净列表,进而可以用来生产真实的硬件。

由于历史原因,VHDL和Verilog被称为硬件描述语言(HDL)。今天,它们实际上已用作硬件设计语言(相同的缩写)。


精美,真实的模型驱动开发
Jaap

@Mark是的,VHDL是超高速集成电路,硬件描述语言。Verilog是一种完全不同的语言。Verilog有时也称为Verilog HDL。en.wikipedia.org/wiki/Verilog
菲利普(Philippe)

2
QHDL与VHDL非常相似,用于描述量子计算机的电路。我无法想象一种语言与它的起源背道而驰。
Mark Booth,

@Mark Wow,那是有趣的“ QHDL”!谷歌显示出很多新意。你有参考吗?
菲利普

1
我在ACCU 2011大会上的Paul Blacks出色的“面向程序员的量子计算”会议上找到了有关此问题的信息。他的幻灯片在accu.org/content/conf2011/…–
Mark Booth

10

ML最初是一种用于开发和编写定理证明者的语言。它是定理证明者的“元语言”。


好的。值得注意的是,这是一个有效答案的原因是它的主要应用程序现在是编译器和其他此类语言工具(至少据我所知)。
乔恩·普迪

6
+1,但说ML变得“大受欢迎”有点
困难

也许吧,但除了今天的直接用户外,它几乎影响了其后的每种打字语言。
Ryan Culpepper

7

C
最初,它最初是为与Unix操作系统一起使用而开发的。但是,即使丹尼斯·里奇(Dennis Ritchie)感到惊讶,语言也变得如此流行。
在他的名著 “ C编程语言”中。Ritchie说:“它已经远远超出了UNIX操作系统语言的起源。” 当它成为应用程序开发的流行语言时,他感到惊讶。


11
好吧,它最初旨在以跨平台的方式开发系统和低级应用程序。尽管它很受欢迎,但仍然与最初的目标保持一致,因此不适合。
乔恩·普迪

3
@Jon好吧,因为它已经成为了射击脚部最简单的方法,因此超出了它的目的。
扬尼斯,2011年

1
@Yannis:哈哈,是的。但是我要问的是主要目的完全改变的语言,而不是那些仅仅包含更多目的的语言。
乔恩·普迪

我要补充一点,C成为混淆代码竞赛的主要语言之一而流行。
彼得·G。11年

它不是为了实现操作系统而设计的吗?
日航

3

C ++最初被设计为“带有类的C”,以促进C ++中的面向对象编程。

然后在更高版本中提供了模板,以实现强类型容器类的实现。后来才注意到,这些模板实际上构成了图灵完备的编译时编程语言。

结果,许多应用程序现在不将C ++用作面向对象的编程语言,而是将其用作算法驱动的编程语言,该语言严重依赖于编译时多态性和元编程。


7
但是C ++被设计为通用目的,并被用作通用语言。
本杰明·B

@Ubiquité我认为C ++并不是真正被设计为通用语言。或者更确切地说,它被设计用于不同的目的(但是在特定的系统编程中)。但是它并不是设计用于多种范例的
康拉德·鲁道夫

实际上,多范式本质是设计中固有的,仅是通过将OO功能栓接到C上,同时保留了在适当情况下使用其更多过程功能的能力。
乔恩·普迪

@乔恩,我承认。但是,通用编程和模板元编程不在这些功能之列。如今,C ++是支持这些功能的唯一(可能是主要的)语言之一。
康拉德·鲁道夫

非常真实 地狱,对通用编程的支持,const是我使用C ++ 两个最重要的原因。
乔恩·普迪

2

ADA —最初是根据美国国防部合同为航空电子设备设计的。尽管仍在该应用程序中使用,但它也很流行,例如用于实时业务中间件。


5
它是作为通用语言构建的。国防部希望使用一种适用于所有事物的语言,以减少使用的不同语言的数量。
本杰明·B

真是好笑。Ada是一种明确创建的语言,旨在减少现有的不同语言的数量。按照该度量标准(“有一个目的,用于另一个目的”),Ada应该与另一种反语言语言Lisp一起投票选出最高的名单。
Jared Updike

2

“一种语言的预期目的与它的实际使用方式或它是否流行有关吗?”

我认为语言的预期目的与其实际使用和流行没有太大关系:有些伟大的语言从一开始就被设计为具有创新性,灵活性和多功能性,但是除了在非常专业的垂直市场-例如埃菲尔铁塔。多年来,OTOH,Basic,Pascal,C等主导了整个领域,尽管它们最初是为有限的特定目的而设计的。

IMO营销/财务和支持方面的 考虑一直在某些语言的传播和扩展中起着重要作用。例如:Borland提供了TurboPascal并对其进行包装,销售和支持。MS提供了C#并打包,销售和支持它。结果,这些语言变得流行起来,第三方工具行业如雨后春笋般涌现,越来越多的开发人员和企业跃入潮流。

但是在过去的几年中,开源语言和工具正在改变其动态性,如今,基于“优点”而不是营销的语言变得越来越流行,例如Ruby,Python和Perl。但这并不是因为发明者的“意图”,而是因为该语言具有扩展和方便使用的内在潜力。


2

我不认为有一种流行语言并未因其初衷而被重新利用。甚至C最初也是为了制作可移植的OS(unix)而编写的。

编写任何没有特定目标的真正通用编程语言的尝试都可能由于缺乏约束和重点而失败。


后记-无处不在(几乎在每台计算机和打印机中),但仅用于打印图形。虽然,有人可能会争辩说它在pdf内使用时已被重新利用。
13ren 2012年

1

我听说Ruby被设计为一种用于编写诗歌的语言,事实证明您也可以在其中编写漂亮的代码!

我会和你在一起 我要你哭。哭泣。甜蜜地哭泣。这本书是Ruby的辛辣指南。这意味着代码是如此美丽,以至于流下了眼泪。这意味着浩浩荡荡的故事和阴沉的真理让您在第二天早晨醒来,这本书就是怀抱。


2
听起来不错。有消息来源吗?
安托

Ruby链接将您带到一本以艺术性的方式教Ruby的书。我的回答是关于那本书的笑话,那本书断言写Ruby就像诗歌一样。实际上,也许有人会说Ruby被设计为一种通用的编程语言,但是它启发了(某些)人们将Ruby代码视为诗歌。
Tinco 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.