




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译型语言&解释型语言&混合型语言&脚本语言计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序.翻译的方式有两种:一个是编译,一个是解释。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,以后要运行的话就不用重复翻译了,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C+、Delphi等。解释型语言在运行程序的时候才翻译,专门有一个解释器去进行翻译,每个语句都是执行的时候才翻译。效率比较低,依赖解释器,跨平台性好,如Basic。脚本语言介于HTML和C,C+,Java,C#等编程语言之间。 HTML通常用于格式化和链结文本。而编程语言通常用于向机器发出一系列复杂的指令。 脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些. 脚本与程序代码的关系:脚本也是一种语言,其同样由程序代码组成。 注:脚本语言一般都有相应的脚本引擎来解释执行。他们一般需要解释器才能运行。JAVASCRIPT、ASP、PHP、PERL都是脚本语言。C/C+编译、链接后,可形成独立执行的exe文件。 脚本语言是一种解释性的语言,例如vbscript、javascript、installshield script等等,它不象cc+等可以编译成二进制代码,以可执行文件的形式存在。脚本语言不需要编译,可以直接用,由解释器来负责解释。 脚本语言一般都是以文本形式存在,类似于一种命令。 举个例子说,如果你建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件。你为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,你的程序用这种规则来理解编写人的意图,并作出回应.那么,这一套规则就是脚本语言。 JAVA语言java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。Java既可以被编译,也可以被解释。通过编译器,可以把Java程序翻译成一种中间代码 - 称为字节码 - 可以被Java解释器解释的独立于平台的代码。通过解释器,每条Java字节指令被分析,然后在计算机上运行。只需编译一次,程序运行时解释执行。下图说明了它是如何工作的:可以把Java字节码看作运行在Java虚拟机(Java VM)上的机器代码指令。每中Java解释器,不管是Java开发工具还是可以运行Java小应用程序的Web浏览器,都是一种Java VM的实例。JavaVM也可以由硬件实现。Java字节码使“写一次,到处运行”成为可能。可以在任何有Java编译器的平台上把Java程序编译成字节码。这个字节码可以运行在任何Java VM上。例如,同一个Java程序可以运行在WindowsNT、Solaris和Macintosh上。Java平台平台是程序运行的硬件或软件环境。Java平台与大多数其它平台不同之处在于它是运行于其它基于硬件平台的纯软件平台。大多数其它平台是硬件和操作系统的结合。Java平台由两部分组成: Java虚拟机(Java VM) Java应用程序界面(Java API) Java VM是Java平台的基础,可以移植到各种基于硬件的平台上。Java API是软件组件的集合,它们提供了很多有用的功能,如图形用户界面(GUI)。Java API被分组为相关组件的库(包)。下图描述了一个运行在Java平台上的Java程序,如应用程序(application)或小应用程序(applet)。如图中显示的,JavaAPI和VM把Java程序从硬件依赖中分离出来。作为一种独立于平台的环境,Java比本地代码慢一些。然而,聪明的编译器、很好地调制过的解释器和即时字节码编译器可以在不牺牲可移植性的条件下使Java的表现接近本地代码。计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。 翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。 解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。解释是一句一句的翻译。 编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C+、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。 但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上,而解释型语言的自身特点也使得编译器厂商愿意花费更多成本来优化解释器,解释型语言性能超过编译型语言也是必然的。静态库:在编译的时候加载生成目标文件,在运行时不用加载库,在运行时对库没有依赖性。 动态库:在目标文件运行时加载,手动加载,且对库有依赖性。 两者区别: 一,静态库的使用需要: 1 包含一个对应的头文件告知编译器lib文件里面的具体内容 2 设置lib文件允许编译器去查找已经编译好的二进制代码 二,动态库的使用: 程序运行时需要加载动态库,对动态库有依赖性,需要手动加入动态库 三,依赖性: 静态链接表示静态性,在编译链接之后, lib库中需要的资源已经在可执行程序中了, 也就是静态存在,没有依赖性了 动态,就是实时性,在运行的时候载入需要的资源,那么必须在运行的时候提供 需要的 动态库,有依赖性, 运行时候没有找到库就不能运行了 四,区别: 简单讲,静态库就是直接将需要的代码连接进可执行程序;动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。 做成静态库可执行文件本身比较大,但不必附带动态库 做成动态库可执行文件本身比较小,但需要附带动态库 五: 首先纠正所谓“静态连接就是把需要的库函数放进你的exe之中”的说法。在真实世界中,有三个概念:Use static libary, static linked DLL, dynamic linked DLL. 多数人混淆了static libary 和 static linked DLL的概念,当然他们有似是而非的“相似之处”,比如都用到.lib,下面具体说明。 使用静态库(Use static libary)是把.lib和其他.obj一起build在目标文件中,目标文件可以是.exe,也可以是.dll或.oxc等。一般情况下,可以根本就没有“对应的”.dll 文件,如C Run Time(CRT)库。一个例子就是,写一个main(),build出来并不是只有几个字节,当然有人会说那还有exe文件头呢?是,即使加上文件头的尺寸,build出的执行文件仍然“莫名的大”。实际上那多出来的部分就是CRT静态库。姑且可以把静态库.lib理解成外部程序的obj文件比较合理,它包含了函数的实现。 下面再谈static linked DLL 和 dynamic linked DLL又如何? 静态链接 (static linked DLL)从操作上在VC的Project|Settings.|Link (tab)|General (category)|Object/library modules 中设置和添加。比如要使用SDK中的PropertySheet() API, 就要在这里添加 comctl32.lib,然后再调用的源程序中#include , 使用的地方直接调用PropertySheet()。当程序.exe启动时,系统会把对应comctl32.dll加载进来。作为DLL的静态引入库的.lib不包含函数的实现,只包含用于系统加载的信息,如对应的DLL名称,函数歧视地只在对应的DLL中的便宜等等。相比动态链接而言,静态链接是很简单的。 动态链接是使用LoadLibrary()/GetProcessAddress()和FreeLibrary(),详见下面的例子。 typedef BOOL (WINAPI *LPFNSHELLEXECUTEEX)(LPSHELLEXECUTEINFO); hShell32Dll = LoadLibrary(TEXT( SHELL32.DLL ); if (!hShell32Dll) goto End; lpfnShellExecuteEx = (LPFNSHELLEXECUTEEX)GetProcAddress(hShell32Dll, API_NAME(ShellExecuteEx); if (!lpfnShellExecuteEx) goto End; . fOk = (*lpfnShellExecuteEx)(pShellExecuteInfo); . End: if (hShell32Dll) FreeLibrary(hShell32Dll); lpfnShellExecuteEx = NULL; . 有人会想,动态链接这样麻烦,为什么还要用呢?这里有一个技术问题,对这个问题的解决直接导致了动态加载的需求。问题是有些DLL只在某个Windows版本中存在,或某个API只在某些Windows版本中被加入指定的DLL。当你使用静态链接的.exe试图在不支持的Windows版本上运行时,系统会弹出系统对话框提示某某.dll无法加载或无法定位某某API的消息,然后就中止.exe的运行。像这样因为个别功能的实现依赖于某个DLL,当这个DLL不可用时导致整个.exe无法运行是不明智的。避免这样的结局只有用动态链接。 1、编程实现单链表的建立、插入、删除和查找算法,语言采用C或JAVA等。 /*P33用头插法建立带头结点的单链表*/#include stdio.h#define NULL 0#define LEN sizeof(linklist)typedef struct nodeint data; struct node *next;linklist;linklist *head;void hhead_creat()/*用头插法建立带头结点的单链表*/int x; linklist *p; head=(struct node*)malloc(LEN); head-data=-999; head-next=NULL; printf(nntt请随机输入一组正整数以0作为结束符:nntt); scanf(%d,&x); while(x!=0) p=(struct node*)malloc(LEN); p-data=x; p-next=head-next; head-next=p; scanf(%d,&x); /*hr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年金融分析师职业手册深度解析金融知识面试模拟题集
- 2025年机器人技术应用与管理试卷及答案
- 2025年全国基层产科医师培训项目专业理论考核历年参考题库含答案
- 2025年注册验船师资格考试(A级船舶检验专业实务)经典试题及答案一
- 2025年注册验船师资格考试(A级船舶检验专业案例分析)全真冲刺试题及答案二
- 北京市门头沟区2024-2025学年八年级上学期期末考试道德与法制试题及答案
- 北京市门头沟区2023-2024学年七年级下学期第一次月考道德与法制考试题目及答案
- 2025年陵园服务礼仪与沟通技巧面试题
- 2025年生态修复师中级考试模拟题答案
- 2025年环境工程师专业能力评估模拟题及解析
- 学前儿童融合教育
- 2025年新疆中考道德与法治试卷真题(含标准答案)
- 科技公司薪资管理制度
- 糖尿病患者围手术期麻醉管理
- 胃肠疾病预防与健康管理
- 2025年云南省中考英语试卷真题(含标准答案及解析)
- 2025年全国新高考英语II卷试题解析及复习备考策略(课件)
- 全球化背景下文化自信的传承与创新
- 合规监督概念课件
- 电力变压器智能数字孪生体的构建与展望
- 无锡金栢精密模具有限公司搬迁项目环评资料环境影响
评论
0/150
提交评论