编程语言思考系列:为什么会有这么多的编程语言?

2023-05-16

一.为什么会有这么多的编程语言?

不同的cpu有着不同的指令集,这些指令集都是二进制的0和1;后来有了汇编语言,可以认为是二进制指令的助记符表示;再后来有了高级编程语言,它们通过编译器又变回了汇编语言或者机器语言;紧接着一个又一个的高级编程语言诞生了,为什么会有这么多编程语言呢?

二.思考

因为编译原理和技术越来越成熟了。语言大体上有四个阶断
  
1、机器编码阶断,比如卡带编码。
2、汇编语言阶断。这算是比较低级的语言。
3、中级语言阶断,比如C语言。
4、高级言阶断,比如JAVA等等。
5、自然语言阶断,比如sql数据库查询语言。

整体来说,语言的发展就是机器能听懂和方便程序员的统一过程。

机器语言时代

所有语言的鼻祖的都是二元码,也就是机器码,最终都会翻译成机器码运行。但是二元码表示非常冗长。比如说大写字母 A 好了,以二元码表示成 01000001 ,如果是小写 a 呢,则是 01100001。

汇编语言时代

用纯数字的机器语言编程的难度可想而知,所以从数字到助记符号的转译很快随之出现,称作汇编语言。比如若是一组数字 0010 0000 可以让芯片把内部的一个存储单位,称作「寄存器 X」,加上一个值 Y,那么不妨就把这组数字和助记符「ADD」对应起来,上面的指令就可以写作「ADD X, Y」这样。一条条类似的指令写成一串,就是一个对于程序的描述。相对于纯数字来说,这是个质的飞跃——终于不必去扳开关了不是吗?而这样的一串字符,可以由专用的小程序来「翻译」成二进制的机器码,也就是真正可以输入处理器去按下晶体管的程序电子信号。当然,每种处理器的汇编语言仍旧是不同的。

高级语言时代

更多是考虑到程序的易读性等等。

不同的计算机语言拥有不同的「个性」,实际却都是对于最底层 0 与 1 的抽象和封装,只是方式与层级不一样——但人类对于这些方式与层级的选择态度,是非常难以改变的。也就是说,如果把语言抽象和封装的层级排成一列,那么每个人都能在这条线上找到自己的舒适区域(comfortable zone),呆在里面很舒服;抽象程度再高阶一些就会嫌不自由,再低一点却又觉得麻烦——如果这样说不够直观,那么不妨搬一个现成的例子:iOS 设备很好用,老太婆和小孩子都能搞定;但 Android 用户会说它不够「开放」(whatever that means),意思其实就是,认为它封装了太多东西,自己则希望掌控更多细节;可是除了刷 ROM 之外,多数 Android 用户从未给自己的手机写过任何一个程序——即便他对于某个理想中的 app 应该如何运作有着非常高深的见解。

三.这种发展的内在原因

一个简单的解释可以是:不同的领域有不同的需求!

对于科学和工程计算领域,要大量的处理数据的计算,如矩阵的计算,于是FORTRAN语言,就很好的适应了这一点;对于数据需要能够很好的查询、修改等操作,可能SQL语言就是一个不错的语言;对于一些底层操作的需求,c和c++可能就很好的能够适应这一点……

于是为了适应不同的应用场景,一个一个的编程语言诞生了。

可是又有了另外一个问题:那为什么不去改造一门语言,让它的功能无所不包,而是不停的创造新的编程语言呢?

一个很好的解释可以是:创造一门新的编程语言的成本有时候会比改进一门编程语言的成本更低!这里的成本,有一个基本假设:Programmer training is the dominant cost for a programming language。

(1)创造一门编程语言,有时候只是需要几个人去写写编译器,再考虑一下其他的需求即可;一旦一门新的编程语言诞生了,这门编程语言对于编程人员来说,是一门新的语言,这门语言的语法、API等等都是全新的,编程人员不会有其他的负担;

(2)而如果改造一门编程语言,需要曾经使用该语言的编程人员重新去适应新的改进,有时为了适应新的应用场景,可能的改变是巨大的。可以试想一下,如果将c++进行更新以适应web网页开发,必然需要改进很多;同样对一门语言的重大更新,还可能造成其他的影响。

(3)这也得出一个这样的结论:那些应用广泛的编程语言,可能很趋于更少的改变。(如果一门编程语言一直在不停的变来变去,干嘛还要去学它呢)。于是我们也理解了这样一个现象:对于中国这么大的国家,任何政策的微小变化,影响可能也是巨大的。

所以,与其对一门已有编程语言进行改进,不如重新发明一门编程语言来的清爽。

只要你能定义一个规则系统(无论多简单),就等于定义了一个编程语言。

而开发一门新的编程语言,为了使用者能够更快更好的学习,往往也会模仿已有语言的一些特性,所以我们看到的编程语言,长得往往都很像。即把一些语言特性像积木一样堆起来,比如函数式范式、面对对象范式。

一旦我们理解了为什么有这么多的编程语言,我们也不会再纠结于这么多的编程语言的选择,进而能够专心的根据不同的应用场景,选择合适的编程语言;刚开始学习不同的编程语言的时候,也许会有些混乱,可是学的多了过了混乱期,也就清楚了。

更重要的一点:有时间再去学学基础的东西,例如编译原理、汇编语言、计算机系统、算法等等知识,这些东西学的时候看似无用,一旦学明白了,后面再学习新的东西,会发现自己学的速度飞快。

四.我的思考

计算机世界的推动皆是因为具体的问题和需求来推动的,人的前进也是如此。

模拟自己置身于当时当地的遇到同样的问题,会怎么样去解决这个问题,你就可以切身处地的想明白为何会出现这门技术。

问题、需求、目的是推动这个社会不断向前发展的根本因素。

人类的社会发展也是如此,工业社会、信息社会等等,每一波浪潮都是因为人类自身发展的问题和需求。

参考资料

为什么会有这么多的编程语言?
http://www.cnblogs.com/wuguanglei/p/4302813.html

为什么现在会有这么多种编程语言?
https://www.zhihu.com/question/20104312

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编程语言思考系列:为什么会有这么多的编程语言? 的相关文章

  • 7-53 两个有序序列的中位数 (25 分)

    已知有两个等长的非降序序列S1 S2 设计函数求S1与S2并集的中位数 有序序列A 0 A 1 AN 1的中位数A N 1 2的值 即第 N 43 1 2 个数 xff08 A 0为第1个数 xff09 输入格式 输入分三行 第一行给出序列
  • PROC系列之---/proc/stat/

    包含了所有CPU活动的信息 xff0c 该文件中的所有值都是从系统启动开始累计到当前时刻 work 64 builder cat proc stat cpu 432661 13295 86656 422145968 171474 233 5
  • PROC系列之---/proc/pid/stat

    proc stat 包含了所有CPU活跃的信息 xff0c 该文件中的所有值都是从系统启动开始累计到当前时刻 root 64 localhost cat proc 6873 stat 6873 a out R 6723 6873 6723
  • PROC系列之---/proc/pid/statm

    proc statm 包含了所有CPU活跃的信息 xff0c 该文件中的所有值都是从系统启动开始累计到当前时刻 root 64 localhost cat proc self statm 654 57 44 0 0 334 0 输出解释 C
  • Linux下使用socket传输文件的C语言简单实现

    简单的C语言实现 xff0c 客户端通过TCP协议向服务器端请求传输的文件 xff0c 服务器端收到请求后向客户端发送文件 服务器程序和客户端程序应当分别运行在两台计算机上 在运行服务器端的计算机终端执行 xff1a file server
  • 设置linux进程优先级和CPU亲和性(转载)

    进程cpu资源分配就是指进程的优先权 xff08 priority xff09 优先权高的进程有优先执行权利 配置进程优先权对多任务环境的linux很有用 xff0c 可以改善系统性能 还可以把进程运行到指定的CPU上 xff0c 这样一来
  • 20130718:Linux内核编译

    最近在学习 操作系统概念 一书 xff0c 有些实验需要在系统内核中增加一些新的系统调用 xff0c 由此便产生了修改内核源码并重新编译生成新内核的需求 我的思路是 首先搞定内核编译的流程 xff0c 确保有个可用的实验环境 xff0c 在
  • Linux Bash Shell 学习笔记

    1 bash脚本的参数处理 BASH的参数可以用 加数字编号来访问 xff0c 其中 xff1a 代表脚本的参数个数 1代表脚本的第1个参数 2代表脚本的第2个参数 以此类推 xff0c n代表脚本的第n个参数 xff0c 但是 xff0c
  • L1-python中的特殊方法__str__

    1 使用场景 在Python的类的定义中 xff0c init 方法用来初始化实例属性 当创建类对象并打印输出时 xff0c 默认输出结果会是一串地址符 xff0c 如 xff1a lt main Student object at 0x0
  • L3-python语言中的几种特征操作

    汇总了目前碰到的几个Python有别于其它程序语言特征 xff0c 体现了Python语言自有的简洁与优雅 xff0c 可参考如下使用与注意事项 列表推导式 一行代码直接对列表元素进行翻倍操作 xff0c 比for的遍历 xff0c 简洁
  • 7-13 统计工龄 (20 分)

    给定公司N名员工的工龄 xff0c 要求按工龄增序输出每个工龄段有多少员工 输入格式 输入首先给出正整数N xff08 10 5 xff09 xff0c 即员工总人数 xff1b 随后给出N个整数 xff0c 即每个员工的工龄 xff0c
  • L4-深度分析Python数据库(SQLServer)访问中的连接

    1 环境准备 首先就是要安装包 xff0c 直接使用pip命令安装即可 pip install pymssql 2 Python pymssql库的数据库访问分析 参考下图 xff0c 描述了数据库连接在单次访问中的创建与关闭 值得注意的是
  • L5-利用Python生成器巧解算法小题

    介绍两个利用Python生成器替代传统的循环遍历操作来解决问题的例子 经过思考与实践 xff0c 充分利用这种自有特征 xff0c 理解实现的细节 xff0c 感受这种编程方式的优雅 1 字符替换 将 aeiou 进行替换 xff0c 规则
  • L6-Numpy中的随机函数

    文章目录 1 rand 2 randn 3 randint 4 random 5 choice 6 随机种子seed 本文汇总了Numpy中常见的取随机数的函数 xff0c 介绍了基本用法 1 rand 指定的输出的二维数组的型 xff0c
  • L7-Python字符串格式化小结

    文章目录 一 百分号 1 直接使用2 表达式赋值3 绑定变量名4 格式符汇总说明5 更精细化的控制 二 format控制基本语法1 绑定变量名2 绑定对象属性3 通过下标取元素来赋值4 填充与对齐5 精度与类型6 千位分隔符 本篇汇总了Py
  • L8-Flatten拍平多维数组的元素

    文章目录 案例说明1 最平凡 xff1a 数组索引访问2 最伤脑 xff1a 二次遍历 列表生成器3 最灵巧 xff1a 活用函数sum 为什么sum 还可以这样玩 xff1f 4 最省心 xff1a 一步到位 xff0c Numpy fl
  • L9-Python内部变量的作用域问题

    文章目录 写在开头一 连续等式判断二 函数内部变量作用域的变更1 对外部变量不进行运算 xff0c 直接访问2 直接对外部变量进行操作运算3 新增global声明 xff0c 再操作 写在开头 分享 记录两个有意思的案例 xff0c 平时碰
  • L10-简谈正则表达式中几个函数的使用

    文章目录 概述1 match 2 search 3 sub 4 compile 5 findall 6 finditer 7 split 8 subn 9 groups 10 贪婪模式与惰性模式注意事项 概述 正则表达式本身是一种小型的 高
  • L11-Python中的高阶函数的使用

    Python中的函数是一个对象 xff0c 既可以作为输入参数 xff0c 也可以作为返回结果 在这里聊聊几个常用的高阶函数 xff0c 来看看函数是如何被作为输入参数 返回结果来使用的 1 map 映射函数 语法 xff1a map fu
  • L12-聊聊Python的装饰器

    文章目录 1 基本介绍2 理解函数2 1 函数也是对象2 2 嵌套函数2 3 返回结果为函数2 4 函数作为输入参数 3 创建装饰器4 带参数的装饰器5 装饰器的应用 监控日志 1 基本介绍 定义 在函数调用前后自动打印日志 xff0c 称

随机推荐

  • L13-理解Python中的特殊的返回值-函数

    文章目录 说明1 初识返回值 函数2 辨识函数对象3 闭包的注意事项谨记如何避免 xff1f 说明 在Python中 xff0c 一切函数即对象 函数同时也可视作变量 xff0c 作为一个返回值 下面通过实际案例来说明下 xff0c 当函数
  • c语言将两个递增的顺序表合并为一个递减的顺序表

    eg xff1a 顺序表A xff1a 1 3 5 7 顺序表B xff1a 2 4 6 8 合并后的表C xff1a 8 7 6 5 4 3 2 1 思路 xff1a 从后往前遍历顺序表A和B xff0c 如果当前A表的数大于等于B表的数
  • L15-Python cookbook 数据结构与算法练习题

    文章目录 1 解压赋值给多个变量2 解压可迭代对象赋值给多个变量3 查找集合中最大 最小的N个元素 heap4 处理字典中的多值映射的两种方式 defaultdict 5 排序字典的键值对元素 OreredDict6 查找字典的相同点7 命
  • 理解递归,从递归的本质说起

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net allenchenhh133 arti
  • 靠写作能挣100万吗

    不要被标题吓到 xff0c 今天说的就是关于写作 Fenng大说 xff0c 同等能力的人绝对要文字写得好的 帅张说编程 英语 写作是程序员的3大底层能力 写作能给我带来什么 xff1f 王朔曾说 xff0c 写作是一条狗 xff0c 只要
  • “老赖”罗永浩被群嘲:莫欺少年穷,莫笑中年败,莫嘲梦想狂

    原文链接 xff1a https mp weixin qq com s x0fIynaA2hPi7blUoeYGxA 作者 l 粥左罗 来源 l 粥左罗的好奇心 xff08 ID xff1a fangdushe007 xff09 转载请联系
  • L16-分析数据库中的左连接

    许久以来 xff0c 在写表的左联接条件的时候 xff0c 似乎已彻底习惯了在右表上设置联接条件 今天意外发现居然也可以在左表上设置 xff0c 而且顺势借用到了需求实践中 重新翻看下官方文档的说明 xff0c 暂且也算温故而知新了 联接类
  • 高知的程序员必须甩脱穷人思维

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net mogoweb article det
  • L19-将多表分批次从数据库导出到Excel

    文章目录 1 应用场景2 功能事项3 主要实现概览主要方法 4 使用示例5 总结 1 应用场景 最近经常需要手工从后台数据库导出某些数据表到Excel文件 xff0c 而且源数据表的数据量大小不一 xff0c 导致在导出到本地文件这个过程中
  • L18-利用Pandas清洗与可视化时序数据

    获取时序数据并进行数据清洗与可视化分析 文章目录 获取时序数据并进行数据清洗与可视化分析1 准备工作2 加载数据3 数据处理 转化与合并4 可视化展现5 小结 1 准备工作 tushare是一个第三方财经数据接口包 xff0c 需要安装包并
  • L17-利用Pandas解析日志数据

    利用Pandas 分析日志数据 文章目录 利用Pandas 分析日志数据1 简介2 获取数据3 数据解析4 简单可视化5 小结 1 简介 app程序在日常运行中会生成多种非结构化的日志数据 xff0c 由于可读性差通常仅仅用于排错 若能将数
  • SQL Server 缓存清除与内存释放

    Sql Server系统内存管理在没有配置内存最大值 xff0c 很多时候我们会发现运行SqlServer的系统内存往往居高不下 这是由于他对于内存使用的策略是有多少闲置的内存就占用多少 xff0c 直到内存使用虑达到系统峰值时 xff08
  • 1178C C. Tiles

    C Tiles time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output Bob is
  • L27-计算连续N天的人流量

    文章目录 写在前面1 题目2 谈谈方法3 关键词4 样例分析4 注意项 写在前面 碰到LeetCode上的一个有意思的数据库题 xff0c 看了很多解法 xff0c 但都过于复杂 经过思索后 xff0c 另辟溪径 xff0c 分享一个崭新的
  • T-SQL查询:CTE - with as 子句的特殊应用

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net kk185800961 article
  • SQL Server 缓存清除与内存释放

    Sql Server系统内存管理在没有配置内存最大值 xff0c 很多时候我们会发现运行SqlServer的系统内存往往居高不下 这是由于他对于内存使用的策略是有多少闲置的内存就占用多少 xff0c 直到内存使用虑达到系统峰值时 xff08
  • 彻底理解递归,从递归的本质说起!

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net allenchenhh133 arti
  • 程序员是不是青春饭

    本文转载 原创作者 志军100 Python之禅 有人问到程序员是不是吃 34 青春饭 34 xff0c 回答是肯定的 xff0c 没有哪个行业可以像互联网一样 xff0c 不需要背景 不需要关系 xff0c 只需要才华就有舞台 看看国内国
  • PCA 原理:为什么用协方差矩阵

    PCA的理论知识以及与K L变换的关系 PCA是主成分分析 Principal Components Analysis 的简称 这是一种数据降维技术 xff0c 用于数据预处理 一般我们获取的原始数据维度都很高 xff0c 那么我们可以运用
  • 编程语言思考系列:为什么会有这么多的编程语言?

    一 为什么会有这么多的编程语言 xff1f 不同的cpu有着不同的指令集 xff0c 这些指令集都是二进制的0和1 xff1b 后来有了汇编语言 xff0c 可以认为是二进制指令的助记符表示 xff1b 再后来有了高级编程语言 xff0c