update for haodan

This commit is contained in:
Xin Peng 2020-04-02 13:51:08 +08:00
parent 1a67c5abcb
commit 2bf7f04dbf
1 changed files with 5 additions and 3 deletions

View File

@ -1,7 +1,9 @@
% !TEX root = main.tex
\section{概述}
%概念的界定,怎么展开
软件工程师在开发软件系统时,不可避免地要用到某种程序设计语言。顾名思义,程序设计语言\index{程序设计语言}是程序员用来描述程序的语言,为程序员表达基于计算的解决方案提供了(通用)抽象设施。一般来说,每种程序设计语言往往具有某种应用背景、所属的语言范式\todo{前面脚注区分软件范型和语言范式}以及各自的个性特征。程序理论作为程序设计语言的基础提供程序抽象及其之间的推理和构造原理不仅可以用于描述程序设计语言的语法、语义还可以支撑程序的正确性构造、指导程序的高效正确的实现。在计算机科学领域曾出现过数百种程序设计语言。近几年TIOBE\footnote{https://www.tiobe.com/tiobe-index/}、IEEE\footnote{https://spectrum.ieee.org/computing/software/the-top-programming-languages-2019} 等给出了目前常用的程序设计语言排名居于前列的包括Java~\cite{arnold2000java}、C~\cite{kernighan2006c}、Python~\cite{van2011python}、C++~\cite{stroustrup2000c++}、C\#~\cite{hejlsberg2006c}、JavaScript~\cite{crockford2008javascript}、PHP~\cite{lerdorf2002programming}等。大多数程序设计语言的创建都受其之前语言概念的启发而新出现的程序设计语言提供更强更为自然的抽象设施使程序员的工作变得更加简单、有效。Sebesta~\cite{sebesta2012concepts}从高级语言机制的设计角度对程序设计语言进行了深入细致的介绍和比较。
软件工程师在开发软件系统时,不可避免地要用到某种程序设计语言。顾名思义,程序设计语言\index{程序设计语言}是程序员用来描述程序的语言,为程序员表达基于计算的解决方案提供了(通用)抽象设施。一般来说,每种程序设计语言往往具有某种应用背景、所属的语言范式\todo{前面脚注区分软件范型和语言范式}以及各自的个性特征。历史上曾出现过数百种程序设计语言。近几年TIOBE\footnote{https://www.tiobe.com/tiobe-index/}、IEEE\footnote{https://spectrum.ieee.org/computing/software/the-top-programming-languages-2019} 等给出了目前常用的程序设计语言排名居于前列的包括Java~\cite{arnold2000java}、C~\cite{kernighan2006c}、Python~\cite{van2011python}、C++~\cite{stroustrup2000c++}、C\#~\cite{hejlsberg2006c}、JavaScript~\cite{crockford2008javascript}、PHP~\cite{lerdorf2002programming}等。大多数程序设计语言的创建都受其之前语言概念的启发而新出现的程序设计语言提供更强更为自然的抽象设施使程序员的工作变得更加简单、有效。Sebesta~\cite{sebesta2016concepts}从高级语言机制的设计角度对程序设计语言进行了深入细致的介绍和比较。
程序理论是软件理论的重要组成部分。作为程序设计语言的基础,提供程序抽象及其之间的推理和构造原理,不仅可以用于描述程序设计语言的语法、语义,还可以支撑程序的正确性构造、指导程序的高效正确的实现。
%程序设计语言的定义可分为语法、语义等方面。语义表示程序的含义,由静态语义和动态语义组成。静态语义指程序编译时可以确定的语法成分的含义;建立在转换/迁移系统上的动态语义则描述程序如何执行。
%
@ -70,7 +72,7 @@
\end{figure}
\todo{改图,去掉“系统编程语言”中的“语言”}
%这里以多个有代表性的语言为例,分析其应用背景、设计特点与发展规律,从而展现程序设计语言发展的历史与现状。
按照程序设计语言的类型与应用,图\ref{fig:2-2}给出了以时间为主线的不同类别语言的发展过程与分类关系。从不同角度来看,一种程序设计语言既可能属于系统编程语言,又是面向对象语言。从发展过程来看,一种语言在发展过程中会不断进行扩充,融入不同的范式,进而趋近于多范式语言。计算机产业的发展往往是新的产业应用从已有的应用模式中成长出来而不是取而代之。新语言的出现往往标志着信息技术在新的应用领域的扩张。本节主要以应用驱动来组织。
按照程序设计语言的类型,图\ref{fig:2-2}给出了以时间为主线的不同类别语言的发展过程。从不同角度来看,一种程序设计语言既可能属于系统编程语言,又是面向对象语言。从发展过程来看,一种语言在发展过程中会不断进行扩充,融入不同的范式,进而趋近于多范式语言。计算机产业的发展往往是新的产业应用从已有的应用模式中成长出来而不是取而代之。新语言的出现往往标志着信息技术在新的应用领域的扩张。本节主要以应用驱动来组织。
\begin{itemize}
@ -161,7 +163,7 @@ Java语言具有平台独立及可移植性等特点被广泛用于Web应用
\subsection{程序设计语言的语法}
程序设计语言都有自己的语法,而语法的定义是一系列规则的集合,这些规则的基础就是形式语言,从而保证规则是无二义性的。文法\index{文法}是形式语言中十分重要的基本概念,是描述语言的语法结构的一组形式规则。文法有四种分类,其中最常用的为正则语言\index{正则语言}和上下文无关语言\index{上下文无关语言}。正则语言可以用正规式定义,上下文无关语言可以用上下文无关文法(元素和规则的集合)定义。程序设计语言中的大多数算术表达式可用上下文无关文法\index{上下文无关文法}生成。正则语言是最简单的语言类,是上下文无关语言类的一个真子类。对程序设计语言编写的程序进行分析和处理(编译)时,需要判断对应的句子是否合法,可以通过对应语言的自动机进行判断。自动机是语言的另一种表示方法。其中,正则语言可以转换成有限状态自动机\index{有限状态自动机}、上下文无关语言可转换成下推自动机\index{下推自动机}表示,反之亦然。针对某种特定输入的一系列有限的规则,对不同的输入元素,自动机依据自身的状态会做出不同的响应,最后达到某种特定的状态。
程序设计语言都有自己的语法,而语法的定义是一系列规则的集合,这些规则的基础就是形式语言,从而保证规则是无二义性的。文法\index{文法}是形式语言中十分重要的基本概念,是描述语言的语法结构的一组形式规则。文法有四种分类,其中最常用的为正则文法\index{正则文法}和上下文无关文法\index{上下文无关文法}。正则语言可以用正规式定义,上下文无关语言可以用上下文无关文法(元素和规则的集合)定义。程序设计语言中的大多数算术表达式可用上下文无关文法\index{上下文无关文法}生成。正则语言是最简单的语言类,是上下文无关语言类的一个真子类。对程序设计语言编写的程序进行分析和处理(编译)时,需要判断对应的句子是否合法,可以通过对应语言的自动机进行判断。自动机是形式语言的另一种表示方法。其中,正则语言可以转换成有限状态自动机\index{有限状态自动机}、上下文无关语言可转换成下推自动机\index{下推自动机}表示,反之亦然。针对某种特定输入的一系列有限的规则,对不同的输入元素,自动机依据自身的状态会做出不同的响应,最后达到某种特定的状态。
\subsection{程序设计语言的类型系统}