编程语言分类

news2024/11/25 11:31:47

目录

❤  机器语言

 机器语言的编程

❤  汇编语言 

❤  高级语言(编程语言)

编译型

解释型

❤  动态语言和静态语言

❤  强类型定义语言和弱类型定义语言

❤  主流语言介绍

C语言

C++

java

python

JavaScript

SQL

PHP


python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm=1001.2014.3001.5501

❤  机器语言

机器语言是一种指令集的体系,机器语言是机器能直接识别的程序语言或指令代码,无需经过翻译,每一操作码在计算机内部都有相应的电路来完成,或指不经翻译即可为机器直接理解和接受的程序语言或指令代码,机器语言是用来定义计算机程序的形式语言,用来向计算机发出指令

  • 优点:执行效率高
  • 缺点:开发的效率低

 机器语言的编程

由于计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言,用机器语言编程的程序称为目标程序。只有目标程序才能被计算机直接识别和执行。但是机器语言编写的程序无明显特征,难以记忆,不便阅读和书写,且依赖于具体机种,局限性很大,机器语言属于低级语言。

例如:

# 指令部份的示例

0000 代表 加载(LOAD)
0001 代表 存储(STORE)
...

# 暂存器部份的示例

0000 代表暂存器 A
0001 代表暂存器 B
...

# 存储器部份的示例

000000000000 代表地址为 0 的存储器
000000000001 代表地址为 1 的存储器
000000010000 代表地址为 16 的存储器
100000000000 代表地址为 2^11 的存储器

# 集成示例

0000,0000,000000010000 代表 LOAD A, 16
0000,0001,000000000001 代表 LOAD B, 1
0001,0001,000000010000 代表 STORE B, 16
0001,0001,000000000001 代表 STORE B, 1[1]

❤  汇编语言 

汇编语言,即为一种低级语言,它用人类容易记忆的语言和符号来表示一组0和1的代码

也就是说,早期的程序员如果想要编程,就要将0,1数字编写的程序代码打在纸带或者卡片上,1打孔,0不打孔,再将程序通过制袋机或者卡片机输入计算机,进行运算。我们可想而知,当时的程序员是多么厉害。但是他们很快发现编写的都是0,1很难辨别和记忆,因为程序员要面对的是01010100011...的数字,稍微错一个数字也不太好发现,因此,就产生了汇编语言

我们先了解一些基础的知识

  • 机器语言
    所谓机器语言,就是只用0和1两个二进制数书写的编程语言。它有的时候也叫作原生代码(Native Code)。这里需要注意,只要CPU种类不同,对机器语言的解释也就不同。
  • 编译器
    由于计算机只能读懂机器指令,所以就需要一个能够将汇编指令转换成机器指令的翻译程序,这样的程序我们称其为编译器。程序员用汇编语言写出源程序,再用汇编编译器将其翻译为机器码。就像我们写的Java,OC,等等,都是由编译器最终转换成01代码,最后由计算机执行。
  • 时钟信号的频率
    由时钟发生器发送给CPU的电信号的频率。单位是MHZ(兆赫兹 = 100万回/秒)。时钟信号是0和1两个数之间反复变换的电信号,类似于滴答滴答左右摆动的钟摆一样。通常我们把发出一次滴答的时间称作一个时钟周期。

举例一段简单的代码:

LD A,207
OUT(2),A
LD A,255
OUT(2),A

这样的一段代码,初次见到我们肯定不太理解其意思。它就是汇编语言。我们现在在简单分析一下这段代码(不解释功能):
类似于LD、OUT这种类英语或者英语单词的东西,我们叫它:
助记符
它是根据指令功能的单词起一个相似的昵称,并将这个昵称做一个1对1的映射,而与其对应的就是0和1的组合。
那什么叫汇编语言呢?顾名思义,就是使用助记符的编程语言叫做“汇编语言“。
汇编语言的语法

汇编语言的语法很简单,相比我们学的OC、Java等语言,它的语法只有一个:把标签、操作码(指令)和操作数(指令的对象)并排写在一行。
举个简单的例子:

标签      操作码     操作数
          LD       A,207
          OUT      (2),A
LOOP:     IN       A,(0)
          OUT      (1),A
          JP       LOOP

这便是一个汇编代码(没有实际意义)。这里的标签就是给该行代码对应的内存地址起个名字,下次想要跳转到该行代码的时候可以直接使用标签跳转。这里需要注意:
机器语言是二进制数,而汇编语言则是使用十进制或者十六进制数来记录数据。
接下来,就让我们看一下Z80 CPU的主要指令:

这里需要注意一下:
num表示的是数值,(num)表示的是num的地址
reg表示的是寄存器,(reg)表示存储在名为reg的寄存器中的地址。
这里说道了寄存器,其实寄存器就是CPU内部存储数据的地方。Z80 CPU中所带的寄存器有:
A、B、C、D、E、F、H、L、IR、 IX、 IY、 SP、 PC。
在汇编语言中,可以将寄存器的名字指定为操作数
接下来让我们简单分析前面的那一段代码。
LD A,207:就是把207写入到寄存器A
OUT (2),A:就是把寄存器A中的值写入到地址2中
IN A,(0):从地址0中读出数据,存放到寄存器A中
OUT (1),A:把寄存器A中的值写入到地址1中
JP LOOP:跳转到LOOP:标签,循环执行。 

也就是说,我们按照上面的转换方法就可以将汇编语言转成机器语言。例如
LD A ,207 ,转成机器语言就是00111110 11001111
JP LOOP,转成机器语言就是: 11000011 num,这里的num是地址,这里注意需要用16比特的二进制数替代作为内存地址的num,也就是00000000 00010000 (也就是00010000假如是IN A,(0)的地址,扩充之后就是00000000 00010000),因此JP LOOP的机器语言就是:
11000011 00010000 00000000。
这里你也许会疑惑,num的八个0怎么跑后面了呢?
这里需要注意,将一个2字节的数据存储到内存时,存储顺序是低八位在前、高8位在后,也叫小端序。与此相反的叫大端序。CPU种类不同,端序也不同,Z80用的小端序,因此将低八位放到了前面,高八位的00000000放到了后面,就成了:11000011 00010000 00000000。
至此,我们就成功的将汇编语言转换成了机器语言,其他的助记符到机器语言的转换可以自行搜索查看

汇编打印一句hello world,需要写十多行代码

; hello.asm 
section .data            ; 数据段声明
        msg db "Hello, world!", 0xA     ; 要输出的字符串
        len equ $ - msg                 ; 字串长度
section .text            ; 代码段声明
global _start            ; 指定入口函数
_start:                  ; 在屏幕上显示一个字符串
        mov edx, len     ; 参数三:字符串长度
        mov ecx, msg     ; 参数二:要显示的字符串
        mov ebx, 1       ; 参数一:文件描述符(stdout) 
        mov eax, 4       ; 系统调用号(sys_write) 
        int 0x80         ; 调用内核功能
                         ; 退出程序
        mov ebx, 0       ; 参数一:退出代码
        mov eax, 1       ; 系统调用号(sys_exit) 
        int 0x80         ; 调用内核功能

❤  高级语言(编程语言)

编程语言主要从以下几个角度为进行分类,编译型解释型静态语言动态语言强类型定义语言弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下

编译型

  • 优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
  • 缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

如C、C++、Delphi等

解释型

  • 优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
  • 缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

 如Python、Java、PHP、Ruby等语言

❤  动态语言和静态语言

  • 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。

  • (静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。

❤  强类型定义语言和弱类型定义语言

  • 强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
  • 弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。

❤  主流语言介绍

下图是2023年跟2022年的主流语言排行榜的对比

Mar 2023Mar 2022ChangeProgramming LanguageRatingsChange
11

Python14.83%+0.57%
22

C14.73%+1.67%
33

Java13.56%+2.37%
44

C++13.29%+4.64%
55

C#7.17%+1.25%
66

Visual Basic4.75%-1.01%
77

JavaScript2.17%+0.09%
810

SQL1.95%+0.11%
98

PHP1.61%-0.30%
1013

Go1.24%+0.26%
119

Assembly language1.11%-0.79%
1215

MATLAB1.08%+0.28%
1312

Delphi/Object Pascal1.06%-0.06%
1423

Scratch1.00%+0.47%
1517
Classic Visual Basic0.98%+0.38%
1611
R0.93%-0.44%
1730

Fortran0.79%+0.40%
1816
Ruby0.76%+0.10%
1926

Rust0.73%+0.22%
2014

Swift0.71%

-0.20%

C语言

C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。UNIX 操作系统,C编译器,和几乎所有的 UNIX 应用程序都是用 C 语言编写的。由于各种原因,C 语言现在已经成为一种广泛使用的专业语言。

C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%~20%。因此,C语言可以编写系统软件。 

特点:

  易于学习,进行结构化编程

  c语言所产生的代码运行速度与汇编语言编写的代码运行速度几乎一样

  预编译处理使C语言更有弹性

优点:

代码量小

生成目标代码质量高,运行速度快

跨平台,可移植性强

使用指针,灵活性强

允许直接访问物理地址,对硬件进行操作

缺点:

数据安全性有很大问题

语法限制不严格,映像程序安全性

指针太过灵活,初学难度有点大

C++

 C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。

特点:

支持数据封装和数据隐藏

支持集成和重用

面向对象

支持多态性

优点:

类型检查比c语言更加严格

增加了面向对象机制

增加了泛型编程机制

增加了函数重载和运算符重载

 提供了标准库STL

缺点:

没有垃圾回收机制,可能引起内存泄漏

java

  Java 是最典型的面向对象语言。Java 不仅吸收了 C++ 语言的各种优点,还摒弃了 C++ 里难以理解的多继承、指针等坑爹概念。今明两年毕业的大学生大多是 Java 的同龄人(1995 年)。

特点:

纯面向对象

支持分布式

跨平台,移植性强

是一门编译性语言

支持多线程,高性能

优点:

面向对象

稳健、安全、可移植、高性能

跨平台

编译型静态语言

缺点:

编译速度慢

python

Python 是一款服务器端解释型开源非编译脚本语言。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起

te'dian

解释性语言

拥有丰富的库

跨平台

可移植、可扩展

支持GUI编程

可嵌入

优点:

简单,易学

免费,开源

可移植性强

属于解释性的一门动态语言

面向对象

拥有丰富的库

强制性缩进代码使得代码规范

缺点:

运行速度慢

国内市场小

中文资料匮乏

职业路线:

  • 用 Django 框架进行 Web 开发:和 Java 没什么两样。
  • 用 PIL 框架进行图形处理
  • 物联网:Raspberry Pi 等物联网平台都选择了 Python 作为开发语言
  • Python 有一个无所不能的 Hack 库,如果认为 “打工时不可能打工的” 就去当一个自由的黑客吧

JavaScript

JavaScript 是一种动态类型、弱类型、基于原型的直译式脚本语言,也是使用频率最高的给 HTML 网页增加动态功能的语言。外行最常闹的笑话是以为它是 Java 语言的分支。

优点:

减少网络数据传输

javascript可以方便的操纵HTML对象

支持分布式运算

缺点:

各浏览器对javascript支持程度不同

“web安全性”对javascript一些功能牺牲

职业路线:

  • 首选 HTML5 的初心:网站和手机站的前端页面开发。
  • 用 Node.js 或 Bmob 云端代码进行后台开发
  • 基于 React Native、PhoneGap、Weex、HBuilder、AppCan 进行移动开发,只需写一遍代码,就有 Android 和 iOS 两个软件
  • 微信开发:包括微信公众号、微信小游戏、微信小程序。不要把这个方向当成中国特色方向,国外的 Android 机也是需要 PWA开发的。
  • 如果以上四样全能做到,那么你就是全栈工程师。

SQL

SQL 是一种专精于数据库的特殊目的语言。用于存取数据以及查询、更新和管理关系数据库系统。

优点:

存储过程可以重复使用, 可减少数据库开发人员的工作量,开发速度快;SQL 可设定只有某此用户才具有对指定存储过程的使用权,安全性好。

缺点:

 和 Java 语言的大多数设计模式一样,SQL 开发速度是靠牺牲运行速度换来的;不同数据库系统之间的 SQL 不能完全相互通用,可移植性差。

职业路线:

掌握了 SQL 可以从事 DBA(Database Administrator,即数据库管理员),主要负责业务数据库从设计、测试到部署交付的全生命周期管理。

PHP

PHP 是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,利于学习,使用广泛,主要适用于 Web 开发领域。号称 “世界上最好的语言”

优点:

php是一个免费开源语言

开发快,运行快,语法简单,方便学习

跨平台,效率高

具有很多成熟框架

有成熟社区支持php的开发

缺点:

php是个单进程的程序,不支持多线程

只支持做web开发,不方便做.exe问件、桌面应用程序、手机程序

不适合做爬虫、自动运行脚本

后期维护比较困难,后期提速空间局限性大

职业路线:

适合进行 Web 开发,配合 Node.js 效果更佳。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/392287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅入浅出keepalived+mysql实现高可用双机热备

当数据库发生宕机的情况,如果配置了数据库主从同步模式或主主同步模式,则可以从从库中获取数据。 当数据库发生宕机的情况,要求应用系统实现高可用,应用系统不会受到影响,需要对mysql进行双机热备实现数据库的高可用。…

断点调试(debug)

目录 F8案例 ​编辑 debug过程中报错 ​编辑用debug查看方法源码 一层一层查看 Arrays.sort()方法 F9 DebugExercise 介绍:断点调试是指在程序的某一行设置一个断电,调试时,程序运行到这一行就会停住,然后可以一步步往下调试…

微服务引擎 MSE 企业版全新升级

作者:流士 随着企业应用大规模云上迁徙与应用微服务化步伐加快,微服务治理的重要性对企业不言而喻,但微服务治理本身的规范化与标准化尚未形成,导致很多企业在微服务治理方面正经历着痛苦的试错期,甚至难以满足线上环境…

工作日志day03

同时构建静态和动态库 //如果用这种方式,只会构建一个动态库,虽然静态库的后缀是.a ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC}) ADD_LIBRARY(hello STATIC ${LIBHELLO_SRC}) //修改静态库的名字,这样是可以的,但是我们往往希望他…

RK3568平台开发系列讲解(显示篇)DRM的atomic接口

🚀返回专栏总目录 文章目录 一、Property二、Standard Properties三、代码案例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢目前DRM主要推荐使用的是 Atomic(原子的) 接口。 一、Property Property(属性)—– Atomic操作必须依赖的基本元素 Property把前面的…

【教学典型案例】28.生产环境nginx限制上传大小

目录一:背景介绍二:Nginx限制上传大小1、Nginx官方文档说明2、设置参数1)、在server模块中设置2)、在http模块中设置三:问题分析过程四:总结一:背景介绍 二:Nginx限制上传大小 1、N…

X264简介-Android使用(二)

X264简介-Android使用(二) 4、Ubuntu上安装ffmpeg: 检查更新本地软件包(如果未更新,reboot Vmware): sudo apt update sudo apt upgrade官网下载的source文件安装: http://ffmpe…

基于JSP的网上书城

技术:Java、JSP等摘要:随着科技的迅速发展,计算机技术已应用到社会的各个领域。随着计算机技术和通信技术的迅速发展,网络的规模也逐渐增大,网络的元素也随之不断增加,有的利用其通信,有的利用其…

【C++】30h速成C++从入门到精通(IO流)

C语言的输入与输出C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来…

网络协议丨从物理层到MAC层

我们都知道TCP/IP协议其中一层,就是物理层。物理层其实很好理解,就是物理攻击的物理。我们使用电脑上网时的端口、网线这些都属于物理层,没有端口没有路由你没有办法上网。网线的头我们叫水晶头,也是物理层的一份子。如果你的面前…

认识CSS之基础选择器

🌟所属专栏:前端只因变凤凰之路🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该系列将持续更新前端的相关学习笔记,欢迎和我一样的小白订阅,一起学习共同进步~👉文章简…

SpringCloud——Hystrix 从入门到辗转反侧

SpringCloud-Hystrix 服务故障的“雪崩”效应 微服务的“扇出” 多个微服务之间的关联调用称为服务"扇出"。例如微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务。 由于网络原因或者自身的原因,服务并不能保证 100% 可用&…

fork的黑科技,它到底做了个啥,源码级分析linux内核的内存管理

最近一直在学习linux内核源码,总结一下 https://github.com/xiaozhang8tuo/linux-kernel-0.11 一份带注释的源码,学习用。 fork的黑科技,它到底做了个啥,源码级分析linux内核的内存管理 先导知识,操作系统&#xff1…

提高生活质量,增加学生对校园服务的需求,你知道有哪些?

随着电子商务平台利用移动互联网的趋势提高服务质量,越来越多的传统企业开始关注年轻大学生消费者的校园市场。 提高生活质量,增加学生对校园服务的需求 大学生越来越沉迷于用手机解决生活中的“吃、喝、玩、乐”等服务,如“吃、喝”——可…

gitlab中文社区

1、获取gitlab中文社区项目 中文社区版项目:https://gitlab.com/xhang/gitlab 2、克隆中文仓库 git clone https://gitlab.com/xhang/gitlab.git 3、查看gitlab版本 diff 获取对应版本的中文 head -1 /opt/gitlab/version-manifest.txt #安装的是gitlab-ce…

网络拓扑结构的简单介绍

网络拓扑(Network Topology)就是根据网络节点的业务量和所需的信息流特性,确定它们之间的位置关系和连接方式。网络拓扑结构是指用传输介质互连各种设备的物理布局,指构成网络的成员间特定的物理的(真实的),或者逻辑的(虚拟的)排列方式。 为什…

Linux学习第十九节-NFS网络文件系统

1.NFS概念 NFS(Network File System)网络文件系统 , 是一种基于TCP/UDP传输协议的文件共享服务。 NFS基于C/S架构,服务端启用协议将文件共享到网络上,然后允许本地NFS客户端通过网络挂载服务端共享的文件。 NFS基于…

idea downloading spring initializer下不来

图中url输入:https://plugins.jetbrains.com/ 原先是https://start.spring.io

Rust Web入门(六):服务器端web应用

本教程笔记来自 杨旭老师的 rust web 全栈教程,链接如下: https://www.bilibili.com/video/BV1RP4y1G7KF?p1&vd_source8595fbbf160cc11a0cc07cadacf22951 学习 Rust Web 需要学习 rust 的前置知识可以学习杨旭老师的另一门教程 https://www.bili…

使用免费负载生成器swingbench对oracle数据库进行压力测试(测试Oracle的功能或评估性能)

1.Swingbench 简介 Swingbench 是一个免费负载生成器(和基准测试),旨在对 Oracle 数据库 进行压力测试。目前最新版本 Swingbench 2.6。 SwingBench 由负载生成器,协调器和集群概述组成。该软件可以生成负载 并绘制交易/响应时间…