首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

.NET开发平台安装完毕之后,别急着用功能强大的VS .NET来写程序,先来点“古老的”,用记事本来写第一个.NET程序。

从“附件”中打开Windows附带的记事本程序,在其中输入以下代码,如图1-24所示。

然后,将此代码保存为HelloVB.vb,如图1-25所示。

图1-24 第一个.NET程序 图1-25 保存代码为VB.NET文件

注意

图1-25中的“保存类型”要选择“所有文件”,文件名要加上“.vb”后缀。

现在,从Windows的“开始”菜单中按以下顺序打开DOS命令窗口:

“开始”→“所有程序”→“Microsoft Visual Studio .NET 2003”→“Visual Studio .NET 工具”→“Visual Studio .NET 2003命令提示”

输入以下命令:

vbc /t:exe HelloVB.vb

如果没有错误,将会生成HelloVB.exe。在命令行上输入:

HelloVB

可以看到屏幕上输出了一行:

Hello,VB.net!

第一个.NET程序开发顺利完成,如图1-26所示。

1-26 编译并运行HelloVB程序

现在对开发过程做一些解释。

使用记事本输入的代码其实是用VB.NET语言写的一个最简单的程序:

Module HelloVB

Sub Main()

System.Console.WriteLine("Hello,VB.net!")

End Sub

End Module

可以看到所有的代码都被包围在“Module HelloVB”和“End Module”语句之间,Module称为“模块”,其中可以包含变量、函数和Sub过程(本书将在第2章和第3章详细介绍VB.NET的语法)。

以“Sub”和“End Sub”包围的部分称为“Sub过程”,可以把任意代码放到Sub过程内部,在这个例子中,Sub Main()过程中只有一行代码:

System.Console.WriteLine("Hello,VB.net!")

其中,“System.Console”代表控制台(也就是在屏幕上看到的黑底白字的命令提示窗口)。“WriteLine”也是一个Sub过程,它负责把括号内的字符串输出到屏幕上。注意,读者并不能直接看到WriteLine具体实现输出功能的代码,这些代码已经由.NET Framework的开发者帮我们写好了,封装进了.NET Framework内部,可以直接使用,读者只需知道“WriteLine”可以把一个字符串输出到屏幕上即可。

Sub Main()是一个特殊的过程。之所以特殊,是因为它定义了程序开始执行的地方。当读者在“我的电脑”中找到一个.NET下的EXE文件并运行它时,.NET会自动将这个文件加载到内存中,并从中找到Sub Main()过程,然后顺序执行其中的代码。所以,Sub Main()过程是整个程序的入口点。在下一节中将详细介绍.NET程序的运行原理。

.NET Framework封装了大量的代码,可以完成各种各样的功能,灵活使用这些封装好的代码,就可以方便地开发出功能强大的软件。在后面的章节中还会学习更多的有关.NET Framework的知识。

写好的程序并不能直接运行,因为计算机并不认识我们所写的这些语句(哪怕这些语句是用“计算机编程语言”写的),它能执行的只能是由0和1构成的指令(称为“机器指令”),所以需要一个“翻译官”,由它来负责把程序源代码转换为机器指令,这个“翻译官”就是“编译器”。显然,不同的计算机语言需要有不同的“翻译官”。上面用到的VBC(其实是一个程序文件:VBC.exe)就是VB.NET语言的编译器,对应地,C#语言的编译器是CSC.exe。

以下命令完成编译的过程:

vbc /t:exe HelloVB.vb

vbc接收一个或多个VB.NET源文件,把它们翻译为可以执行的.NET虚拟机机器指令,并把这些.NET虚拟机机器指令存放到一个文件中(通常是EXE文件和DLL文件)。在本例中,vbc把HelloVB.vb文件编译为HelloVB.exe文件,有了这个EXE文件,即可直接在电脑中执行它。

试一试

VB.NET编译器支持许多参数,可以在命令提示窗口中输入以下命令查看它的所有参数:

vbc /?

扩充阅读

编译基础

编译程序是一种翻译程序。

通常所说的翻译程序是指这样的一个程序,它能够把某一种语言(称为源语言)改造为另一种语言(称为目标语言),而后者与前者在逻辑上是等价的。如果源语言是诸如C、PASCAL、Java或VB.NET这样的“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的翻译程序就称为编译程序。

它的执行过程可用图1-27来说明。

从源程序到目标程序的翻译是一个复杂的工作,可以分为6个阶段,如图1-28所示。

(1)词法分析阶段

这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。请看以下这行VB.NET代码:

Dim i As Integer=10

词法分析可将这条语句分解,如表1-1所示。

1-27 编译程序的功能 图1-28 编译的6个阶段

表1-1 词法分析

Dim

保留字

i

标识符

As

保留字

Integer

数据类型标识符

=

赋值号

10

整数

(2)语法分析阶段

语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,即判断这些单词组成的是一个完整的语句还是一个单独的表达式。这一般都是通过生成语法树进行判断的。例如以下语句:

文本框: 
图1-29 语法树
i = j + k * 10

可以用以图1-29所示的语法树来表达。

(3)语义分析阶段

这一阶段的任务是审查源程序有无语义错误,为代码生成阶段收集类型信息。比如进行类型审查,审查每个运算符连接的运算对象是否符合语言规范,当不符合语言规范时,编译程序应报告错误。在语句“i = j + k * 10”中,“*”连接的两个运算对象都必须是可以转换为数字的数据类型,如果k变量表示一个窗体,则此表达式就是错误的。

在这个阶段,可能会在语法分析生成的树上增加用于表示语义的节点。

(4)中间代码生成阶段

在进行了上述的语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。

(5)代码优化阶段

此阶段的任务是对前阶段产生的中间代码进行变换或改造,使生成的目标代码更为高效,即节省时间和空间。

(6)目标代码生成阶段

这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码。这些代码在装入内存后,可以被计算机直接执行。

大多数编译程序并不是一次就完成所有的编译工作的,它需要多次对源程序或其等价的中间语言程序进行扫描,每次扫描都完成特定的任务。例如第一遍可以只完成词法分析工作;第二遍完成语法分析工作。对于以多遍扫描方式工作的编译程序,第一遍的输入是用户书写的源程序,最后一遍的输出是目标语言程序,其余是上一遍的输出为下一遍的输入。

在计算机专业的核心课程——《编译原理》中,详细介绍了相关的编译理论基础。感兴趣的读者可以去自行研究。需要提醒读者的是,编译原理这门课非常抽象,要求您具备较好的数学基础与较强的抽象思维能力。然而,这门课又是非常重要的,它所介绍的理论被应用在许许多多的软件系统中。在编译理论的指导下独立地开发出一个简单的编译器,是对一名软件工程师开发能力的极好训练。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论