首页 > 编程语言 >2.1.4 程序基本概念——编辑、编译、解释、调试的概念

2.1.4 程序基本概念——编辑、编译、解释、调试的概念

时间:2024-02-09 15:11:26浏览次数:27  
标签:解释器 语言 编译 跨平台 2.1 源代码 基本概念 运行

编辑

概念

C++程序的编辑即为,对代码的编写过程,完成这种过程需要借助相关软件,该类软件叫做C++代码编辑器。

编译和解释

概念

计算机只能识别由0、1组成的二进制代码,称为机器码。所以我们现在使用高级编程语言编写的程序就需要一个翻译过程,将其转换成计算机认识的二进制代码,而这个翻译过程就是由编译器(Compiler)或者解释器(Interpreter)完成的。采用编译器进行翻译的语言被称为编译型语言,而采用解释器进行翻译的语言被称为解释型语言。

1. 编译型语言(代表:C、C++、汇编语言)

对于编译型语言,编写完成后,编译器将所有的源代码转换成包含机器码可执行程序(比如WIn系统下的.exe程序),便可直接运行。之后便可以随时运行这个可执行程序而不用再次编译,所谓“一次编译,无限次运行”。
但编译型语言有一个明显的弊端,就是生成的可执行程序无法跨平台运行。所谓跨平台意为在Win系统下生成的可执行程序.exe无法在Mac/Linux等其他系统下运行。有些情况下甚至源代码在不同平台下的含义也不一样,比如C语言的long整型变量在Win与Linux下占用的字节数就不同。总的来讲编译型语言的移植性较差,但由于其不需要每次执行的时候都编译,所以执行速度快。

2. 解释型语言(代表:Python、JavaScript、PHP、Shell)

对于解释型语言,每次执行程序都需要一边翻译一边执行,用到哪些源代码解释器就将其转换成机器码,没用到的就不进行翻译。由于每次执行都要进行编译,所以解释型语言的效率低于编译型语言,甚至是数量级的差距。因此一般计算机的底层功能、关键算法或者嵌入式程序都由编译型语言开发、而一些应用软件、网站、小工具才使用解释型语言开发。
解释型语言最大的优点便是跨平台性。只要我们在不同的平台安装了对应的解释器,同一段代码便可在各个平台运行,所谓“一次编写、到处运行”。注意这里各个平台的解释器本质上是可执行文件,无法跨平台,跨平台的是源代码,不是解释器本身。
比如大名鼎鼎的python,现在就可以在Linux、Windows、MacOS、Android、FreeBSD等平台上运行,可移植性很强。

3. 半编译半解释型语言(代表:Java、C#)

这类语言的编译器首先将源代码转换成一种中间文件(字节码文件),然后再将这种中间文件拿到专门的虚拟机中执行(如Java的JVM)。这样兼顾了运行效率以及跨平台性,字节码文件是可以在不同平台的虚拟机上运行的。

调试

概念

让程序在系统中运行之前的查错和改错;让程序在调试器中运行,用这种手段对程序进行分析,找出并修正潜在的问题并改正,让我们的代码能够正常运行或者更加优化。

标签:解释器,语言,编译,跨平台,2.1,源代码,基本概念,运行
From: https://www.cnblogs.com/why-1017/p/18011812

相关文章

  • foobar2000 v2.1.2 汉化版
    新春佳节,送上一份新年礼物,祝您在新的一年里,万事如意,心想事成,身体健康,事业有成,财源广进,家庭和睦,笑容常开,好运连连。   foobar2000v2.1.2汉化版-----------------------【软件截图】----------------------     -----------------------【软件介绍】--------......
  • deepinV23编译文件管理器改造
    1.概述本篇博客主要介绍在deepinV23和deepinV20.9上改造编译安装dde-file-manager的过程。其中编译的过程,主要参考了:Deepin深度操作系统中编译和安装dde-file-manager-CSDN博客,感谢这位大佬的分享自己改造的部分,主要是:增加文件管理器和桌面通过ctrl+d删除文件或目录增加桌......
  • 编译原理论述
    编译程序工作的几个阶段包括:词法分析(LexicalAnalysis):也称为扫描(Scanning)或词法扫描(LexicalScanning)。这个阶段的任务是从左到右一个字符一个字符地读入源程序,将其划分成一系列的记号(token)。每个记号由两部分组成,一个是记号本身,一个是记号的属性值(比如关键字、变量名、常量值、......
  • 如何基于 spdlog 在编译期提供类 logrus 的日志接口
    如何基于spdlog在编译期提供类logrus的日志接口实现见Github,代码简单,只有一个头文件。前提几年前看到戈君在知乎上的一篇文章,关于打印日志的一些经验总结;实践下来很受用,在golang里结构化日志和logrus非常契合,最常见的使用方式如下。logrus.WithField("addr","127.0......
  • 解决编译报错——too few arguments for template template parameter “Tuple“detec
    一般出现这种问题都是cuda、pytorch和vs版本没配对上。这里出现问题的文件为torch中的cast.h。我看网上很多给的解决方法是修改下面代码:template<template<typename...>classTuple,typename...Ts>classtuple_caster;template<typenameT1,typenameT2>classtyp......
  • Ubuntu安装PHP8.2 编译安装 oci8 pdo_oci扩展
    PHP8.2是PHP语言的最新版本。新特性包括,只读类,允许布尔值作为独立类型等。从mysqli中删除libmysql的支持等。时至今天,主流的HTTP服务器已不是Apache,我们推荐使用Nginx作为HTTP服务器,Nginx相对于Apache来说简单且性能更好。本教程将向您展示如何在Ubuntu20.04安装PHP8.2并将其......
  • app.json 中未定义自定义编译中指定的启动页面
    换了启动页,这里得手动改。。。。。。。。。。。[app.json或自定义编译条件错误]app.json中未定义自定义编译中指定的启动页面./pages/index/index(env:Windows),......
  • 用Java编译一个简单计算器
    作业写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现。思路推荐:写4个方法,加减乘除利用循环+switch进行用户交互传递需要操作的两个数输出结构packagecom.hongyi.method;importjava.util.Scanner;//写一个计算器,要实现加减乘除功能,......
  • C#获得项目最后编译时间
    C#获得项目最后编译时间效果具体格式可以自定义核心代码stringGetCompileVersion(){stringOriginVersion=""+System.IO.File.GetLastWriteTime(this.GetType().Assembly.Location);intMsgCnt=0;stringyear="";stringmonth="";......
  • 2.1 不会有人数据结构比我还菜吧?
    记录三道自己菜死了的与根号有关的题。其中每道题都有polylog解法。题目名称太长了,就不放了。CF1017GTheTree根号做法:考虑操作分块,然后建虚树。建出虚树之后我们就发现很好处理了。同样的,处理每一个块结束后的真实形态,也可以借助这个虚树。总的来说,需要暴力维护一下每个虚......