Programming languages 什么';3GLs和4GLs的真正区别是什么?

Programming languages 什么';3GLs和4GLs的真正区别是什么?,programming-languages,Programming Languages,我找不到任何有用的东西来确定一种语言是第三代还是第四代。我所发现的只是像“更高级”和“更接近英语”这样的开放式语句,一些来源说它们是特定于领域的语言,比如SQL,还有一些来源说它们可以是通用的。我真的很困惑 如果2GLs是汇编语言,5GLs是推理语言,比如Prolog,那么如何确定编程语言是3GL还是4GL?在20世纪80年代和90年代初,“语言生成”是一个热门词汇。它们总是定义不清,很少在实际的学术话语中使用 “语言世代”在20世纪80年代和90年代初是一个热门词汇。它们总是定义不清,很少在实

我找不到任何有用的东西来确定一种语言是第三代还是第四代。我所发现的只是像“更高级”和“更接近英语”这样的开放式语句,一些来源说它们是特定于领域的语言,比如SQL,还有一些来源说它们可以是通用的。我真的很困惑

如果2GLs是汇编语言,5GLs是推理语言,比如Prolog,那么如何确定编程语言是3GL还是4GL?

在20世纪80年代和90年代初,“语言生成”是一个热门词汇。它们总是定义不清,很少在实际的学术话语中使用

“语言世代”在20世纪80年代和90年代初是一个热门词汇。它们总是定义不清,很少在实际的学术话语中使用

这些术语在当时没有什么意义,现在也没有了。

这些术语的大多数用法都是纯粹的营销——“哦,你还在使用第三代语言?上周就是这样!”

在这背后,还有一点技术意义(至少有一段时间,尽管许多“4GL”忽略了这一点)。基本的区别是(应该是)第三代语言只允许您操作单个数据项,而第四代语言允许您作为一个组而不是单独操作项目组

SQL和APL就是两个明显的例子。在SQL中,您主要使用集合。查询的结果是一个集合(不完全是一个数学集合,但至少有些相似)。您可以作为一个整体使用和操作该集合,将其与其他集合合并,等等。直到或除非您将其公开给外部世界(例如,使用光标),否则您不必处理组成该集合的各个记录/行/元组

在APL中,你会得到一些相同的想法,除了你使用数组而不是集合。为了理解这意味着什么,我们假设您想要“旋转”一个数组,因此当前的第一个元素被移动到末尾,而另一个元素则向前移动一点。要在典型的3GL(Fortran、Pascal、C等)中实现这一点,您需要编写一个循环来处理数组中的各个元素。但是,在APL中,只有一个操作符可以在一个操作中对整个阵列执行此操作。使用
/
操作符一次应用于整个数组,即使是处理单个项的操作通常也很简单,因此(例如)一个名为
a
的数组中所有元素的总和可以使用
+/a
计算(或者可能是
/+a
——我已经很久没有编写任何APL了)

尽管如此,这里所涉及的区分的一般概念存在一些相当严重的问题。一个是它非常强调语法——很明显,动作涉及到内部循环之类的必需的东西,因此这种区别相当于隐式循环的语法。另一个问题是,在相当多的情况下,您最终得到了两代人的混合——例如,大多数基础知识都能够将字符串视为一个单独的东西,但需要循环来对数组/矩阵执行类似的操作。最后,相关性有一点问题:虽然在一些特殊情况下(如SQL),能够处理组/集/数组/任何数据作为一个整体确实产生了很大的不同——但在大多数情况下,它并没有让人们思考和处理更高层次的抽象(这至少是最初的意图)

这与语言的发展相结合,模糊了内置内容和库的一部分(或其他内容)之间的区别。在C++中,大多数ML族语言等,编写任意动作的函数(包括但不限于循环)是微不足道的,并将其附加到一个与语言中的语言基本上无法区分的操作符。

这是一个吸引人的短语,其含义大多数人无法解释,甚至更少人关心。这是一个成为纯粹的marketspeak的主要候选人,通常粗略地翻译为:“你应该为我的缓慢、丑陋、有缺陷的CRUD应用程序生成器支付很多钱。”

这些术语的大多数用法都是纯粹的营销--“哦,你还在使用第三代语言吗?上周就是这样!"

在这背后,有一点技术意义(至少有一段时间,尽管许多“4GL”忽略了它)第三代语言允许您仅操作单个数据项,而第四代语言允许您将项目组作为一个组而不是单独操作

SQL和APL是两个明显的例子。在SQL中,您主要使用集合。查询的结果是一个集合(不完全是一个数学集合,但至少有点类似)。您可以将该集合作为一个整体使用和操作,将其与其他集合合并,等等,直到或除非您将其公开给外部世界(例如,使用光标)您不必处理组成该集合的单个记录/行/元组

在APL中,除了使用数组而不是集合之外,你得到了一些相同的想法。为了了解这意味着什么,让我们假设你想“旋转”一个数组,因此当前的第一个元素被移动到末尾,而其他元素则向前移动了一点。在典型的3GL(Fortran、Pascal、C等)中这样做您可以编写一个处理数组中单个元素的循环。但是,在APL中,您有一个操作符可以将数组作为一个整体,在一个操作中完成。使用
/
操作符一次应用于整个数组,即使是处理单个项的操作通常也很简单,因此(例如)名为
a
的数组中所有元素的总和可以使用
+/a
计算(或者可能是