{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

软件是用编程软件编的,编程软件又怎么来的?

Cruise_ChanCruise_Chan 回答10 收藏1
收藏问题

10条回答

gitmilk

gitmilk

回答于2022-06-22 18:33

软件是用编程软件写成的,那么编程软件是怎么来的呢?

这个吧,我真的没办法一个个给你解释到底,不然你要是打破沙锅问到底,可能一顿火锅的功夫我也没办法给你说完。举个例子哈,IntelliJ IDEA和Eclipse都是Java的IDE,用这两个IDE可以写非常多的软件,比如Android Studio先后分别基于这两个软件,Android上所有的软件都是用这玩意儿开发的,但是这两个IDE本身也都是Java语言开发的,这两个IDE呢最初肯定是在Vim/Emacs+Java开发的,咱就先说到这里,不然要喋喋不休了。

我给大家提一个思路,大家按照这个思路可以自己去找自己感兴趣的问题。我给大家说一说Google实现Go 1.5自举、去除所有的C语言程序的过程,大家慢慢就明白了,基本上计算机技术都是这样迭代出来的,比如怎么先有了C语言、现有了Unix,又如何在这些基础上,诞生了Emacs、C++等众多新的软件和技术。

事实上现在所有新的编程语言,基本上都会考虑在C语言的基础之上构建,Go语言也不例外,何况Go语言的重要设计者之一肯汤普森老爷子,还是C语言、Unix之父。Go语言发展的第一阶段,就是开发一个从C语言到Go语言的翻译器,将C语言编译器翻译成Go语言的,不过了Go语言核心设计团队的三位大神非常机智,他们最大程度避免了在Go语言编译器设计中,大量使用未来很难移植到Go语言的一些特性,比如宏、比如指针,这些都是C、C++留下的一些糟糕的设计,不符合现在的编程语言设计潮流。转换编译器源码树产生一个Go语言编译器,不过这时候还是典型C语言风格。

接下来,Google对编译器进行了优化,将编译器CPU、内存等硬件资源占用的问题解决了,并且引入了并行概念。为了改进编译器在消除边界检查等问题下的能力,同时在不依赖架构的node*s、prog*s之间引入一个中间表示。这些事情完成之后,Google就做了最后一步,用Go 1.5、也就是当时Go语言最新版本,用go/parser和go/types替换了编译器前端,至此Go语言实现了自举,并且获得了一个稳定高效的编译器实现。

Go语言本身编程难度要比C更简单,这是因为Go语言跟很多高级语言一样,摒弃了指针、规避了内存泄漏、解决了缓冲区溢出,深度递归时栈的溢出,摒弃了宏这些定义。Go语言工具链对模块化、单元测试、以及性能分析支持更好,在修改内部API或重构时,应用自动化程序重构前景更加值得期待。

你看这就是Go语言从C语言写编译器 ,到最终实现Go语言完全自举的过程,当然大家都知道图灵完备的编程语言都可以实现自举,理论上符合图灵完备的编程语言都是这么发展的,C++就是这么发展的,满足这个条件的编程语言,你才能作为其他编程语言的基础。

那么我们回到最初的问题上,编写软件的编程软件又是在什么环境下开发的呢?计算机技术发展至今,在机器语言的基础上,弄出了汇编语言,接着两位祖师爷弄了C语言和Unix系统,接着在这个基础上,又有人弄了Emacs、Vim、GCC,你看基本上现代计算机技术的所有根基技术就有了。

接着就是用C语言写各种操作系统,为了各种需求写各种编程语言,又根据各种需求开发各种集成开发环境,然后又根据各种应用需求用集成开发环境写其他应用软件,这就是一个完整的计算机技术发展进化流程。

编程软件也是,先有了机器语言,打孔时代创造和发明了汇编语言,汇编语言的基础上又有了B语言,然后B语言的基础上发明了C语言,C语言重写Unix,于是现代计算机的雏形也就有了。早期是一生一、机器语言生汇编,然后机器和汇编语言生C语言,到C语言时代就是一生万物、C语言生万物,现在就是多生万物。这就是计算机技术发展的过程。

评论0 赞同0
  •  加载中...
tinylcy

tinylcy

回答于2022-06-22 18:33

首先要明确几个概念,计算机语言、软件和开发平台,计算机语言是软件开发的基础,通过计算机语言才能实现和计算机硬件的通讯,实现对硬件的操作,一般计算机语言分为低级语言和高级语言,低级语言如:机器语言、汇编语言,可以直接操作硬件,速度快,但是编写和理解困难;高级语言如:C、C++、JAVA等,需要通过编译转换为机器语言实现对硬件操作,速度慢,但是更便于理解。

软件是通过计算机语言开发的,通过对计算机硬件的操作而实现某些功能的计算机程序的集合体,如:手机APP、PC端的应用、网站,甚至操作系统等都是软件。

一般所说的编程软件都是指的开发平台,也被称为IDE(集成开发环境),它的主要作用是通过集成一些开发常用的环境或者工具来提升软件开发的效率,如JAVA开发必须的JDK等。

所以说软件的基础是计算机语言,通过计算机语言结合一系列的算法从而实现对计算机硬件的操作,实现某些功能,而开发平台只是将代码的编辑过程进行了简化,使其更符合开发人员的思维逻辑。开发平台本身也是一个软件,也是通过某种计算机语言来写的,并且很多开发平台都是支持多语言的,如eclipse平台,除了支持JAVA开发,还支持C/C++、PHP、Python等,甚至可以开发eclipse自身的插件。

评论0 赞同0
  •  加载中...
dreamtecher

dreamtecher

回答于2022-06-22 18:33

题主可能搞混了概念。软件确切地说是编程语言编写完成。只不过在编程代码的时候,为了方便高效,我们会使用ide或编辑器等辅助工具,这些ide和编辑器应该就是题主理解的编程软件。所以,题主这个问题应该是想问“ide或编辑器是用什么开发的?”

常用的ide有microsoft visual studio、eclipse等,前者主要是c++,后者主要是java。但是,事实上随着go等新生态语言的蓬勃发展,和手机、可穿戴设备的发展,现在ide的发展趋势是跨平台,比如flutter、react native、weex等开发框架,而这些开发框架往往不是以一种语言为主开发,c/c++、js(vue、react、node)、typescript等的运用都较为普遍。

总结下来,就是软件借助ide、编辑器等使用编程语言开发,而ide、编辑器、开发框架的实现目前通常由多种编程语言共同完成。

评论0 赞同0
  •  加载中...
yuanzhanghu

yuanzhanghu

回答于2022-06-22 18:33

在这美好的一天很荣幸为大家解答这个问题,让我们一起走进这个问题,现在让我们一起探讨一下。

以下我为大家分享,我个人对这个问题的看法与想法,希望我的分享能给大家带来帮助,也希望大家能够喜欢我的分享。

我认为程序的本质是给定输入,用指定逻辑给出输出。所以用basic写汇编编译器,JavaScript写c的编程工具完全做得到。c的编译器是c写的,go的编译器是go写的,Java的编译器是Java写的。

编程语言首先需要编译器把代码翻译成机器语言。而第一个编译器是慢慢迭代出来的,就是开始写一个简单的功能,然后逐步加强,直到完成一个完整的编译器。最早的C语言编译器就是这样写出来的。

其次,计算机语言、软件和开发平台,计算机语言是软件开发的基础,通过计算机语言才能实现和计算机硬件的通讯,实现对硬件的操作,一般计算机语言分为低级语言和高级语言,低级语言如:机器语言、汇编语言,可以直接操作硬件,速度快,但是编写和理解困难;高级语言如:C、C++、JAVA等,需要通过编译转换为机器语言实现对硬件操作,速度慢,但是更便于理解。

软件是通过计算机语言开发的,通过对计算机硬件的操作而实现某些功能的计算机程序的集合体,如:手机APP、PC端的应用、网站,甚至操作系统等都是软件。

一般所说的编程软件都是指的开发平台,也被称为IDE(集成开发环境),它的主要作用是通过集成一些开发常用的环境或者工具来提升软件开发的效率,如JAVA开发必须的JDK等。

所以说软件的基础是计算机语言,通过计算机语言结合一系列的算法从而实现对计算机硬件的操作,实现某些功能,而开发平台只是将代码的编辑过程进行了简化,使其更符合开发人员的思维逻辑。开发平台本身也是一个软件,也是通过某种计算机语言来写的,并且很多开发平台都是支持多语言的,如eclipse平台,除了支持JAVA开发,还支持C/C++、PHP、Python等,甚至可以开发eclipse自身的插件。

所以总结一下,编程软件通过硬件的支持,创造了我们使用的程序和其他的编程软件。

在以上的分享关于这个问题的解答都是个人的意见与建议,我希望我分享的这个问题的解答能够帮助到大家。

在这里同时也希望大家能够喜欢我的分享,大家如果有更好的关于这个问题的解答,还望分享评论出来共同讨论这话题。

我最后在这里,祝大家每天开开心心工作快快乐乐生活,健康生活每一天,家和万事兴,年年发大财,生意兴隆,谢谢!

评论0 赞同0
  •  加载中...
netmou

netmou

回答于2022-06-22 18:33

计算机最早的时候是纯用的开关按钮,就是一开一合的多种组合代表不同的功能,后来使用0和1代表开关的组合,但是人们觉得不方便记忆,于是乎发明了汇编语言,就是说利用简单的英文字母去代表0和1的组合集,随着计算机的功能增加和普及,又用发明了c语言,然后又用c语言和汇编语言发明了各种各样的高级语言。

评论0 赞同0
  •  加载中...
ninefive

ninefive

回答于2022-06-22 18:33

用一句话回答,就是: 编程软件是从0和1来的。


实际上,再复杂再高端的计算机(或叫电脑)技术,都是基于0和1两个二进制数码。 因为0和1 两个状态最容易用电路实现,电平(电压)高低、电流有无、开关通断,等等。其中最常用到的就是半导体管的通断。


0和1 既可以表达数值(比如 2位二进数 00、01、10、11,可以表示0~3,4个十进数 。以此类推,8位二进数可以表示0到255 ,256个十进数。等等);这构成计算机运算和处理的数据来源,计算机的各种数据(或信息)都建立在这基础上。


0和1 又可以表达 2个逻辑状态(比如 有、无;高、低;是、否;开、关,等等)。这构成计算机逻辑(逻辑:简单理解就是因果关系)运算的基础,计算机的各种功能都建立在逻辑运算(或叫逻辑推理)基础上。


为什么说二进制数码,而不叫数字,就是因为二进制 0和1 的数值和代码(要做的事)两个属性。


比如,在某 CPU 中,面对 0010 0100 。如果认作数值,就是十进数36;如果认作代码,就是将随后的2个数相加。


怎么区分数值和代码,是依据事先规定好的位置决定的。按照一定的规则,规定要做什么和要用到的数据在哪,就构成了面向CPU的计算机基础指令(简称计算机指令)。

有了计算机指令,就要考虑如何实现规定好的计算机指令。这需要一整套能够实现各种逻辑和算术运算的电路。这种电路,从1946年第一台电子计算机诞生,先后历经电子管(形似过去的长筒状灯泡,具备现在半导体管功能)、半导体分立元件(三极管、二极管)、小规模集成电路、中大规模集成电路、大超大规模集成电路时代。


无论哪一个阶段,无非都是围绕计算机如何实现规定的指令功能。首先,要选择计算机指令的规格:长度(以字节计,见下说明)、操作码(处于指令中首部,定义指令做什么)、操作数(定义指令需要的数据或指明数据在哪里)。


一种CPU对应一套指令(几十到几百条不等),称为指令系统。以8位计算机为例,操作码通常为1字节(可以扩展为2字节)。一条指令操作码必有(表明做什么),操作数视情况可以0字节(用不到数据)、1字节、2字节。


有了CPU 能够执行的指令,就象汉语文有了基本的单字(词)。编程,最终愿望无非是要用这些字(词),书写流芳百世的长篇巨制。但是,且慢!一口吃不成一个胖子! 你必须从识字开始(就是要精准理解每一条(类)指令的含义,这要举一反三而后死记);要学会组词、造句(编写简单程序);要学会看图说话、学会写作短文(编写有一些具有应用价值的程序);要学会写作各种题材记叙文、散文、小说直至长篇巨制。 好了,这就是一个35~40年前程序员的成长历程。太艰难了!


本人曾用“死去活来”形容进阶过程:1)广义的—首先要死死记住指令系统每一条(类)常用指令的精确定义,然后是灵活运用指令编写能完成各种任务、实现不同功能的程序。 2)狭义的—熟练掌握这门技术,必然要学得死去活来。

还没完! 指令采用二进制数码或十六进数码(0~9、A~F)表达,称为机器码(CPU能直接识别执行的形式),早期也采用机器码编程。但采用机器码编程,难认难记非常不便(00~FF,256种组合对应256条指令,要背下来真心不易。本人倒是用得实在太多了,不经意间就背下来了)。


于是,人们构造了能帮助识别与记忆的英文助记符代替机器码(或称机器指令),只要能认三五十个英文单词,就能较好的记住这些指令。助记符又称符号指令,它和机器指令是一一对应的,所以运用符号指令编程也就意味着运用机器指令编程。 符号指令配套编程所需的辅助符号(称伪指令)和数据,构成所谓 汇编语言。


只不过,符号指令程序(称汇编语言程序)要通过一个简单的汇编程序(传统术语)转换成CPU能直接执行的机器指令程序。这个过程,就是最底层的程序设计(编程),凡是涉及计算机处理的系统(包含手机),都必须具备涉及计算机系统最底层硬件资源(CPU内部资源、内存、外存、IO接口等)的操作(BIOS:基本输入输出系统)。


汇编语言固然可以直接作用于CPU底层(汇编语言又称低级计算机语言),但毕竟事无巨细都要面面俱到,太过繁琐了,编程效率也太低了。于是人们又开发了许多中级计算机语言(如C)和高级计算机语言。 直到编写出很多很多优化后的高效功能模块(积木块),定义好通信接口,供使用者直接调用,实现相应功能。现如今,编程,不过是根据需求选择相应功能模块搭搭积木而已(当然,要搭得好搭得妙,悟性灵性也必不可少)。只有开创性的大型软件架构(框架)的规划设计才真正属于高端技术。



至此,对于题目问题的已经有了答案,纵向而言(语言层次的提升方向,而不是扩大应用面),自底而上,语言层次的不断提升,都是对编程软件的贡献!而编程软件的不断凝聚、升华,终将形成自动化、智能化编程氛围。但是,智能化终究仅仅是集合了人类智慧并且受控于人类智慧。

如果有那么一天,智能化编程导致智能发散而反制人类,那将何尝不是人类的悲哀。



附录1) 长度:以字节计,1字节为8位二进数。为方便读写常表达为十六进数,4位二进数一组为十六进数,如二进数0000~1001及1010~1111 分别对应十六进数 0~9 及A~F 。咱们车牌号就是十进数不够用扩展为十六进数的。

附录2) 世界上第一台电子计算机埃尼阿克(ENIAC),诞生于1946年2月14日。ENIAC长30米,宽6米,高2.4米,占地面积约170平方米,重达30英吨,耗电量150千瓦。它包含了18000 个电子管(形似过去的长筒状灯泡,具备现在半导体管功能),计算速度是每秒5000次加法。

评论0 赞同0
  •  加载中...
xeblog

xeblog

回答于2022-06-22 18:33

最终编译成计算可以直接识别的机器码,也就是0,1序列,在存贮在计算机的地址空间上,地址计数器读到地址位了,就执行机器代码。

高级语言-汇编语言-机器码,基本就是这个结构。

现在大多数编程软件,也是用编程软件编写的,因为现在的编程代码都是高级语言来了。用高级语言来实现高级语言,就是这样了。

评论0 赞同0
  •  加载中...
explorer_ddf

explorer_ddf

回答于2022-06-22 18:33

计算机最开始是以0和1为基础,也就是机器码,也可以说是机器语言,以这些机器码编出了操作系统,简而言之就是从机器码到最早的操作系统,再到编程工具,编程工具也是以这些机器码从0和1开始的,但是它是在最早的操作系统上完成的。从严格的角度说,机器语言不算是真正的语言,,但是利用它却可以开发出最早的编程工具,也就是汇编语言。所以你应该问,最早的编程工具叫什么名字,是用什么开发出的。

记住:0和1→编程工具,再到到其他软件或者编程工具,编程工具也是软件的一种



评论0 赞同0
  •  加载中...
weapon

weapon

回答于2022-06-22 18:33

你这个问题和以前我想过的一个问题很类似:
1.系统都是用类似于pe的引导盘安装的。2.可以用系统刻录引导盘。
那第一个引导盘是怎么编写出来的呢。
问题答案就是用纸带,上面刻出洞,向计算机输入010101这样的机器语言编写的。
最后,计算机是如何识别0和1的机器语言呢,是电路上控制的。最原始的计算机上,基础的电路都是手工做的。这样就出现了最原始的操作系统。
有了操作系统,就可以开发更复杂的软件和系统了。

评论0 赞同0
  •  加载中...
buildupchao

buildupchao

回答于2022-06-22 18:33

早期,最困难的时期造就最厉害的程序员,最厉害的程序员创造了最厉害的开发工具,最厉害的开发工具极大的方便了开发,结果造就了垃圾程序员。

评论0 赞同0
  •  加载中...

相关问题

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<