语言和框架之间的区别是什么?

17

有人能给我一个清晰、简明的定义,说明编程语言和框架之间的区别吗?我已经搜索了整个网络,但找不到足够的定义。

额外加分题:一个语言和一个框架是否可以变得如此密不可分,以至于它们之间没有区别,或者它们之间是否有如此明显的界限,使得这种情况不可能发生?


也许你的 EC 问题的一个例子就是 NextStep 框架作为 Objective-C 的一部分。虽然不是完全不可分割,但非常接近... - Chris Thompson
如果一种语言与一个框架以任何方式“不可分割地联系在一起”,那么根据定义,该框架将成为该语言的一部分。 - mqp
1
你可以使用许多语言来编写 NeXTStep/OpenStep/Cocoa 应用程序,例如 Objective-C++、Objective-Modula-2、Ruby、Nu、FScript 等等。而且,即使没有 NeXTStep/OpenStep/Cocoa,你也可以使用 Objective-C 进行编程。Objective-C 和 NeXTStep 之间的关系类似于 C 和 POSIX 之间的关系:它们是同时发明的,并且可以很好地集成在一起,但你也可以使用 POSIX 而不使用 C(例如使用 C++、OCaml、Perl),同样你也可以使用 C 而不使用 POSIX(例如使用 Win32、NeXTStep,或者根本不使用任何环境,例如在嵌入式设备上或编写操作系统内核时)。 - Jörg W Mittag
@Jorg,完全正确。一种语言,根据定义必须独立存在。然而,我的观点只是没有使用NS库编写Objective-C代码会更加困难,因为它提供了许多核心数据抽象。 - Chris Thompson
6个回答

31

一种语言是指实现者要支持的语法、语法规则、语义(以及可能的核心库)。一个框架是指由一组有机结合的库代码组成,可以在任何给定的语言中简化编程。


1
一个框架不一定要用该语言编写,它只需要对该语言可用即可。 - David
5
@Ender: 区别在于控制反转:你调用库,但框架调用你。顺便说一下,这个问题在SO上已经广泛讨论过了。 - Jörg W Mittag
1
@Jorg:我不同意你所描述的是重要差异,更别说区分库和框架之间的差异(在我看来似乎非常模糊——框架只是一种库)。我更赞同Frederick的用法,并且我不介意他对我的答案进行修改(尽管我想强调一个框架完全由代码组成,而不是规范)。请随意尝试说服我改变看法。 - mqp
附言:我改变了主意,没有让Jorg说服我。看起来框架有一个技术定义:http://en.wikipedia.org/wiki/Software_framework 但是,我认为我的答案仍然概括了关键区别,即语言是一种规范,而框架是由代码构成的。 - mqp
我还没有看到任何自称为框架的东西能够为我简化操作(目前想到的例子有:Java EE、django、rails、PHP、Erlang的OTP)。有人能分享反例吗?同时,我百分之百地赞同Jörg的说法。 - L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
显示剩余3条评论

4
应用程序框架是任何应用程序代码的组织结构,包括文件/文件夹、类/函数等规范选择。
应用程序框架产品是任何帮助生成应用程序框架的工具。
应用程序设计模式是任何在应用程序级别组织代码的概念方法。
软件语言是一种基于语言的工具,可用于构建应用程序、实用程序、库、框架等。
库是对语言本身的原生编译功能进行扩展的任何功能扩展。
标准库是与语言产品捆绑打包的库。
外部库是不在语言产品本身中的库,可以远程调用或本地安装。
代码生成器是任何根据开发人员输入动态生成永久运行时代码的工具。

2
关于语言和框架之间的明确界限,我认为您可以将DSL(领域特定语言)视为既是语言又是框架的构造物(因为它是建立在原始语言上的框架)。
现在我只能想到 Lisp 可能会模糊这种区别:
“Lisp 的名称来源于‘LISt Processing’。链表是 Lisp 语言的主要数据结构之一,并且 Lisp 源代码本身就是由列表组成的。因此,Lisp 程序可以将源代码作为数据结构来操作,这就产生了宏系统,使程序员可以创建嵌入 Lisp 中的新语法或甚至新的领域特定语言。”
参考链接:http://en.wikipedia.org/wiki/Lisp_(programming_language)

2

我希望能够通过一个例子来解释。

Dot net是一个框架,它由大量的库组成,并支持许多编程语言。C#是一种编程语言,通过它你可以向机器(主要是计算机)发出指令。如果你的源代码是用C#编写的,那么你可以使用Dot net框架库和其他语言编写的源代码。


1

在我看来,编程语言就像一堆东西(语法、语义等),人们已经将它们结合成一个更方便、更有用、更易于使用和更愉悦的框架,而在开始制作程序之前,我喜欢有一个框架。

我知道一些编程语言,如C、PHP、ASP、Python、Java,以及一些框架,如Yii、Zend、Pygame、Struts。我所看到的是,可以从一个编程语言构建许多框架,但一个框架只能由一种编程语言构建。


-1
编程语言是程序员和计算机(在现代语言中,技术上是程序员和编译器之间的通信,编译器将您的代码解释为计算机可以处理的简单指令)之间指定的、标准化的通信方法。它是一个纯粹的抽象,规定了它的结构、语法和语义;语言的实现通常被认为是程序员开发的环境的一部分,并包括编译器和任何虚拟机实现。
框架是一组标准化的预先编写的代码库,旨在供开发人员使用和重复使用,并且更多地与环境相关。环境是语言、框架、虚拟机或运行时(一个抽象层,在其中托管或解释的代码从机器无关形式翻译成本地代码)和机器(本地指令执行的硬件层)的交集。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接