首页
学习
活动
专区
圈层
工具
发布

Go语言是用什么语言写的?

"Go语言是用什么语言写的?"这个问题看似简单,却隐藏着编程世界里的"鸡生蛋"哲学难题。想象一下:如果Go语言是用Go语言写的,那第一个Go语言编译器又是用什么写的呢?...他们选择用C语言编写Go语言的第一个编译器,这就像用"爷爷辈"工具创造"孙子辈"新技术。这种技术传承体现了编程语言发展的智慧。 随着Go语言成熟,它完成了重要里程碑:自举。...自举就是用目标语言自身来编写该语言的编译器。...Go语言的自举过程是渐进式的: C语言编译器阶段:最初用C语言编写,能编译简单的Go语言子集 Go语言重写阶段:用C编译器编译出用Go语言编写的编译器 功能完善阶段:不断改进,每个版本都比前一个更强大...了解编程语言实现方式,有助于我们做出更明智的语言选择。能够自举的语言,通常意味着成熟的工具链和活跃的社区。 写在最后 现在回到最初问题:"Go语言是用什么语言写的?"

21110

C语言这么厉害,它自身又是用什么语言写的?

“C语言本身用什么语言写的?” 换个角度来问,其实是:C语言在运行之前,得编译才行,那C语言的编译器从哪里来? 用什么语言来写的?如果是用C语言本身来写的,到底是先有蛋还是先有鸡?...汇编语言的问题解决了,就往前迈进了一大步,这时候就可以用汇编语言去写C语言的编译器,我们说这是C编译器的老祖宗。 有了这个老祖宗,就可以编译任意的C语言程序了,那是不是可以用C语言本身写一个编译器?...OK, 这么一层层上来,终于得到了一个用C语言写的编译器, 真是够麻烦的。 到这个时候,之前那个汇编写的C语言编译器就可以抛弃了。...当然,如果在C语言之前,已经出现了别的高级语言,例如Pascal,那就可以用Pascal来写一个C语言的编译器。 第一个Pascal的编译器据说使用Fortran写的。...,用什么来编译,只有用Thompson写的那第一个编译器来编译,好了, 你写的这个编译器就会被污染了,你的编译器再去编译Unix , 也会植入后门 :-) 说到这里我就想起了几年前的XcodeGhost

2.7K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言这么厉害,它自身又是用什么语言写的?

    这是来自我的星球的一个提问:“C语言本身用什么语言写的?” 换个角度来问,其实是:C语言在运行之前,得编译才行,那C语言的编译器从哪里来? 用什么语言来写的?...汇编语言的问题解决了,就往前迈进了一大步,这时候就可以用汇编语言去写C语言的编译器,我们说这是C编译器的老祖宗。 有了这个老祖宗,就可以编译任意的C语言程序了,那是不是可以用C语言本身写一个编译器?...OK, 这么一层层上来,终于得到了一个用C语言写的编译器, 真是够麻烦的。 到这个时候,之前那个汇编写的C语言编译器就可以抛弃了。...当然,如果在C语言之前,已经出现了别的高级语言,例如Pascal,那就可以用Pascal来写一个C语言的编译器。 第一个Pascal的编译器据说使用Fortran写的。...,用什么来编译,只有用Thompson写的那第一个编译器来编译,好了, 你写的这个编译器就会被污染了,你的编译器再去编译Unix , 也会植入后门 :-) 说到这里我就想起了几年前的XcodeGhost

    2.8K20

    Windows 10是用什么语言写的?微软工程师带你“偷窥”源码

    其实 Axel 这个博客是在回答一个问题:“Windows 10 是由什么语言写就的?”...他介绍,ntoskrnl.exe 内核大部分是使用 C 编写的,在内核模式下运行的大多数内容也是用 C 编定的,包括文件系统、网络与驱动程序等。...此外,.NET BCL 与一些相关库和框架通常都是用 C# 编写的,“但它们也只不过是带有几座 C++ 小岛的 C 汪洋大海的一栗”,它们自不同的部门,代码并不属于 Windows 源码树。...、相关开发工具包的每个组件的代码。...源码的规模有多恐怖呢?作者估计完全查看这些源码的文件名,并试图理解源码具体是用来干什么的,需要花上一生的时间。

    6.1K40

    为什么程序员应该写博客?用什么博客系统?在哪写?

    作者 | 程序员小吴 来源 | 五分钟学算法 写博客的好处很多很多,如果你不知道的话记住 写博客可以装逼 就行。...可以写博客的平台也很多,这篇文章谈谈我个人对这些平台的看法,希望小伙伴们能在自己喜欢的平台记录自己的技术成长过程。...CSDN 优点 SEO做得好,无论是百度还是google(尤其是百度)在搜索问题的时候排名靠前 阅读量高,从头开始写也不怕没人看,有排名,对于追求阅读量的作者会更有动力写 博客内容基本限定在计算机领域上...免费,省钱是硬道理 不用担心搞坏,大不了删库再重新搭建一下,没什么损失 缺点 SEO 很差,Github 还限制了百度的索引,所以我之前噗嗤噗嗤的写了大半年,一点流量都没有 写博客相对麻烦,先要使用 markdown...总结 每个平台都有自己的优缺点,读者们可以结合自己的实际情况进行挑选,但最关键的是你需要 写 ! 文章才是博客最核心的内容 。

    2.4K40

    操作系统内核都是用C语言写的?

    1.从语言特点来说 ①C语言有出色的可移植性,能在多种不同体系结构的软/硬平台上运行。...②简洁紧凑,使用灵活的语法机制,并能直接访问硬件能够直接访问硬件的语言有:汇编和 C语言 汇编属于低级语言,难以完成一些复杂的功能,但是汇编比C语言访问硬件的效率更高。...所以,一般将硬件初始化的工作交给汇编,比较复杂的操作交给C语言。 ③C语言具有很高的运行效率。 2.嵌入式开发中的地位——开发工具 3.高级语言中的低级语言:面向过程VS面向对象 ?...可以说面向过程是一种基础的方法,它考虑的是实际地实现。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。 面向对象: 面向对象的分析根据抽象关键的问题域来分解系统。...最后,C语言也有他自身的缺陷,比如代码的复用性差,代码的维护性差,扩展性(新增代码时不改变原来的代码)很差。

    2.1K3129

    操作系统内核都是用C语言写的?

    1.从语言特点来说 ①C语言有出色的可移植性,能在多种不同体系结构的软/硬平台上运行。...②简洁紧凑,使用灵活的语法机制,并能直接访问硬件能够直接访问硬件的语言有:汇编和 C语言 汇编属于低级语言,难以完成一些复杂的功能,但是汇编比C语言访问硬件的效率更高。...所以,一般将硬件初始化的工作交给汇编,比较复杂的操作交给C语言。 ③C语言具有很高的运行效率。...2.嵌入式开发中的地位——开发工具 3.高级语言中的低级语言:面向过程VS面向对象 面向过程: “面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。...最后,C语言也有他自身的缺陷,比如代码的复用性差,代码的维护性差,扩展性(新增代码时不改变原来的代码)很差。

    2K2219

    用 Kotlin Native 写 Jni,以后写 Android 基本上要没有别的语言什么事儿了的节奏

    当时因为完全没有注意到 CName 这个神奇的东西的存在,所以那篇文章当中还是用 C wrapper 来做的调用。 后来,我发现根本不需要这么麻烦啊。...我们知道 JNI 如果不通过动态注册的话,Java native 方法与 C 函数的映射关系其实就是一个固定的命名规则: Java_包名_类名_方法名 换句话说,如果我们在 Java 中加载的 so 库的符号表里面有这么一个函数...,它的名字按照标准的 C 函数命名修饰方法修饰,并且修饰之前符合上面的规则,那么 Java 的 native 方法就可以与之对应上。...我们可以用 CLion 创建一个 Kotlin Native 的工程,在 gradle 当中配置为 Android 的动态链接库: ... kotlin { targets {...然后随便创建一个文件,写一个全局函数,并用 CName 进行标注如下: import kotlinx.cinterop.* import platform.android.* @CName("Java_com_example_hellojni_HelloJni_stringFromJNI

    7.1K10

    用仓颉语言写 Coding Agent:cjh 是怎么实现的

    据公开报道,这是仓颉生态里冒出来的原生AI编程工具,走的不是「套壳大模型」路线,而是用仓颉语言本身写Agent框架。消息一出,一堆人问同一个问题:仓颉写Agent,到底靠不靠谱?...仓颉为什么适合写Agent先补一点背景。仓颉是华为2020年对外公开的编程语言,定位是「面向全场景」——尤其跟鸿蒙生态绑定。它最大的几个卖点:静态类型、内存安全、现代化的并发模型。...静态类型对写Agent意味着什么?CodingAgent的核心是让模型输出结构化动作,再交给工具去执行。动作的输入输出如果类型不明确,模型一次「幻觉」就能让工具链崩溃。...校验层是「结果对不对」的收口关,决定要不要回滚。cjh目前能确认的,是它站在仓颉生态内部做这套闭环。跟「用Python粘一堆API」的路线比,它更接近「用系统级语言写一个可长期维护的Agent框架」。...说它成立,是因为AI编程工具本质是「语言能力+工具链」的组合,而仓颉在语言能力这块有真东西,不是营销包装。用一门静态类型、内存安全的语言去写Agent框架,工程上的合理性是站得住的。

    11220

    用C语言写贪吃蛇笔记-1

    本文目录 贪吃蛇设计思想 贪吃蛇设计思想 要求: 1.学完C语言大部分基础知识 2.能坚持看完本文 3.本文发布的只是思想,详细代码请关注本博客下一篇文章(要等博主自己写完哦) 目的: 1.学了一年C语言...设计思路 贪吃蛇游戏设计的虽然总体分为开始、运行、结束三个过程,但其内部程序非常之复杂具体包括开始时的状态,游戏进行中如果得分其分数的累加程序的设计,当玩家游戏结束时所出现的音频及图片效果等设计的程序主要包括主函数...用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。...,这时由于没有庆平的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来就像多一节身体,所以将蛇的最后一节用背景色覆盖。...食物的出现和消失也是由画矩形块和覆盖矩形块所覆盖。这样一个贪吃蛇游戏程序在所学的C语言知识下便设计成功。

    3.1K30

    用C语言写贪吃蛇笔记-2

    接着上篇文章写 ---- 首先分析一下贪吃蛇游戏中的元素,继而得出与它们对应的在程序中的描述: 蛇: 基本描述: 长度,颜色,位置。...对应数据与数据类型:长度—虽然可以用坐标表示,但是这样的话,运算量将很大, 所以换算成较大的单位—节数,以固定长度的每节描述;坐标 -- 整型;颜色 -- 整型; 位 置-- X,Y坐标。...增加的描述: 蛇运动的方向,蛇的生命。 对应数据与数据类型:这些描述是为了与程序的按键的输入部分与判断游戏结束部 分相联系而设的。方向只有四个方向:上下左右。...只有两个值: 0 或 1(没有食物,有食物或食物消失) 其他的元素: 墙,由于它在显示上是作为背景而存在的,所以并没有什么说明实际 的墙壁就是四条直线组成的边框,由坐标描述。...还需要的变量:键盘键入的键值(作为全局变量,整型) ; 经常要使用的循环变量; 自定义的填充图案; 说明文字的字符数组; 游戏的记分; 游戏的速度(蛇的速度) 。

    1.8K50

    在Linux上用Eclipse写C++程序

    我厂很多同学使用VC在windows上编写linux的C/C++程序,然后再传的开发服务器上,然后再编译和调试。如果有修改,可能会直接用vi去改了,然后再把源代码同步回来。其实这样做挺折腾的。...也有大神全盘vim设置emacs写,想来也是极好的。 但是,也有另外一个方案,就是在 Linux上安装个写C/C++程序的IDE,这样可以直接编写、编译、运行、上传SVN,非常方便。...Ubuntu的字体不习惯,其实可以很方便的把微软的字体(雅黑什么的)都安装过来:http://www.cnblogs.com/mamboer/archive/2011/03/26/ubuntu-yahei.html...下载安装最新的Eclipse版本,最近装的是LUNA这个版,感觉没一起的kepler什么的好用。但是也可以。...(以前我用老版本的Eclipse就没问题,很奇怪) 有了这些工具,做Google代码规范检查,做单元测试都变得轻松很多。对于写服务端代码的同学来说,绝对值得尝试!

    4.8K70

    构造器里面的super()有什么用?到底写不写?

    平时写的单独一个类如果没有直接继承父类就是直接继承的Object,有父类就是间接继承的Object,因为父类会继承Object,java的所有类都是Object的子类,哪怕不写super(),也会默认调用的父类的空构造器...B bb = new B(); } } 结果是: A的无参数构造器 B的构造器 也就是子类默认会隐式调用父类的构造器,默认在B构造器第一行添加了super(); 接着一个例子:...[] args) { B bb = new B(); } } 结果是: A的有参数构造器,参数为:123 B的构造器 显示调用了父类的构造器,就不会隐式调用空构造器了 最后一个例子...A(); 但是此时A的空构造器没有定义,所以会报错。...综上所述,如果父类有空构造器,super()可以不写,但如果父类只有含参数的构造器,这个super(...)一定要写,并且要对应父构造器的参数,否则就会报错!

    72120
    领券