Git 自举,编译器自举

编译器自举 这个概念很简单,但是想了解一下具体实现原理是什么,于是搜了一下 “自举”,相关的大多是 “编译器自举” 的内容,我也顺便看了一下,发现没有多少有意义的参考内容。同样的逻辑回到 Git 自举上,可能意思就只是最开始实现 Git 需要使用其它版本控制工具来管理,等到 Git 功能开发完成,可以托管代码了,这时候把 Git 本身的源码托管到 Git 上。其实通过上边两个必备事项,你应该看得出来,这里边已经形成了一个死结:编译器需要先被编译出来,不然它就没法编译其它东西(包括它自己),那这个编译器要怎么编译出来。 阅读详情

今天看一篇文章提到了“Git 自举”,它指的是 Git 实现了自我托管,也就是 Git 可以托管 Git 自身的源码。

这个概念很简单,但是想了解一下具体实现原理是什么,于是搜了一下“自举”,相关的大多是“编译器自举”的内容,我也顺便看了一下,发现没有多少有意义的参考内容。但其实也是有那么一两句介绍让我思考以后总算明白了编译器自举是怎么回事。

首先需要知道两个东西:

  • 编译器是用来编译程序的,不过其实它就是在编译程序所使用的语言的语法语义啥的,那么简单来讲编译器就是用来编译语言的
  • 编译器本身也是用某一种编程语言写出来的,并且编译器也是需要先编译出来的

其实通过上边两个必备事项,你应该看得出来,这里边已经形成了一个结:编译器需要先被编译出来,不然它就没法编译其它东西(包括它自己),那这个编译器要怎么编译出来?

假设你现在写了一个高级语言 Xlang,那这个语言需要用什么编译器来编译呢?当然是使用编译 Xlang 的编译器,问题是现在并没有可以编译 Xlang 的编译器。

其实要实现这个编译器,并不一定要使用 Xlang 语言。所以可以先用其它已有语言来实现一个可以编译 Xlang 语言的编译器。而自举就是在这个基础上,使用已经可以编译的 Xlang 语言写一个编译器,然后用这个其它语言写的编译器把它编译出来,这样,一个 Xlang 语言写的编译器就出现了,而且它本身是可以编译 Xlang 语言的,当然也就可以编译"Xlang 写的编译器——也就是它自己"。

这个思想其实有点像两数互换位置的算法,必须借用一个第三者来作中间态,不然无法完成。

同样的逻辑回到 Git 自举上,可能意思就只是最开始实现 Git 需要使用其它版本控制工具来管理,等到 Git 功能开发完成,可以托管代码了,这时候把 Git 本身的源码托管到 Git 上。

这么看来,这个所谓的“Git 自举”,跟编译器自举的意思差得有点儿远,因为它完全不必要形成一个环——也完全没有结存在——因为 Git 的开发其实也可以不用版本控制。

Day 01: 与Python的第一次亲密接触 环境搭建 、第一个程序 Hello, World!、以及Python之禅 (The Zen of Python) 的解读。 阅读详情

相关推荐

【PostgreSQL教程】PostgreSQL 特别篇之 语言接口Java

本篇教程的Java程序中开始使用PostgreSQL之前,需要确保在计算机上设置了PostgreSQL JDBC和Java。您可以检查Java教程以在计算机上安装Java。现在让本篇教程检查如何设置PostgreSQL JDBC驱动程序。

No8g攻城狮的博客 1521

Git Windows安装教程

Git 官网下载对应系统的软件了,下载地址为或者。

weixin_45490820的博客 1554

海峡公交报站模拟器V1.2.rar

巴士报站

Linux编译器--git、yum、gdb的使用

对同一份源代码分别生成其release版本和debug版本的可执行程序,并通过ll指令可以看到,debug版本发布的可执行程序的大小比release版本发布的可执行程序的大小要大一点,其原因就是以debug版本发布的可执行程序当中包含了更多的调试信息。yum是一个在Fedora、RedHat以及CentOS中的前端软件包管理器,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。但是一个人的精力有限。来控制自己的代码,并且也开源了。

sushang的博客 1231

git(一) 安装与基本使用

git Git是分布式版本控制系统,它就没有中央服务器的,每个人的电脑就是一个完整的版本库 Git 是一个开源的免费的分布式版本控制系统,可以更高效的处理项目文件。它的性能好,内存小,运行快,易上手。 与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。 状态 同时,git 又提供了三种(也可以说是四种)不同的记录状态 已修改(modified) 已暂存(staged) 已提交(committed)

x94410891的博客 271

修改 git 默认编辑器

如果用的编辑器不是 VSCode,可以参考这里面的指令进行修改。git 的默认编辑器是 vim,嗯,反正对我来说不是非常友好(菜鸡就是这么不会玩终端),正好找到了可以修改默认编辑器的方法。告知 git 等待用户完成交互,如果是终端操作的文本编辑器就可以看到不需要这个 flag。

GoldenaArcher的博客 2341

git介绍、安装、基本使用流程

git介绍、安装、基本使用流程

qq_59993282的博客 765

ALM开发环境搭建与工作流指南

ALM是一个基于TypeScript开发的现代化开发工具,旨在为开发者提供简洁高效的开发体验。该项目采用前后端分离架构,前端使用React+Redux,后端基于Node.js构建,整体开发环境配置简单,适合快速上手。 ## 环境准备 ### 基础要求 开发ALM需要准备以下基础环境: - Node.js v5及以上版本 - Git版本控制系统(Windows用户建议安装带Git Bash的版...

gitblog_01134的博客 516

MicroHs编译器自举原理:从C代码到Haskell子集的奇妙旅程

MicroHs是一个采用组合子实现的Haskell编译器,它最令人惊叹的特性是能够**自我编译**——仅需C编译器和内置的组合子文件,就能完成从源代码到可执行程序的完整自举过程。这种"自己编译自己"的能力,不仅展示了编译器设计的精妙,更为Haskell开发者提供了一个轻量级、可移植的编译解决方案。 ## 编译器自举:为何如此重要? 自举(Bootstrapping)是编译器开发中的关键技术,指

gitblog_00845的博客 815

cproc bootstrap全攻略:如何验证编译器自举正确性

`cproc` 是一款基于 QBE 后端的 C11 编译器,支持多种架构,能够自举并通过全部测试。编译器自举(bootstrap)是验证编译器可靠性的关键步骤,本文将详细介绍如何使用 `cproc` 的自举功能确保编译器的正确性。 ## 什么是编译器自举编译器自举是指使用编译器自身编译其源代码,最终生成能够正确编译自身的可执行文件。这一过程通过多阶段编译验证编译器的一致性和可靠性。`cpr

gitblog_01104的博客 891

C2编译器自举原理深度解析:如何用C2编写C2编译器 [特殊字符]

C2编译器自举原理是编程语言领域中最令人着迷的技术之一。想象一下,一个编译器能够编译自身,就像用自己的双手举起自己一样神奇!C2编译器正是这样一个实现了**自举**的现代编程语言工具,它用C2语言编写,然后通过一个简单的C语言引导编译器来编译自己。这种自举机制不仅展示了C2语言的强大能力,也为开发者提供了一个完整的编译器开发范例。 ## 🔍 什么是编译器自举编译器自举是指用目标语言编写编

gitblog_00633的博客 343

Gitgithub的使用】Git与代码托管 版本控制工具 代码回滚 差异对比 代码托管 多版本合并 Git的历史 go语言 自举 github,码云 Git的安装

Git与代码托管 代码量很大,一个团队的需要代码维护和托管,需要一个代码仓库 一、版本控制工具作用 (1)版本 (2)作用 1.能够追踪全部代码的状态 2.能够进行版本之间的差异对比 3.能够进行版本回滚 4.能够协助多个开发者进行代码合并 二、常见的版本控制工具 (1)CVS 基本退出了历史舞台 (2)svn 2010年左右,很多人使用,中心化的版本控制工具,需要有一台中心服务器 没有中心,...

汪雯琦的博客 617

c编译器学习02:chibicc文档翻译

c编译器学习02:chibicc文档翻译...

weixin_43172531的博客 4737

MicroHs核心优势揭秘:超轻量级运行时与自举能力如何颠覆嵌入式开发

MicroHs是一款基于组合子实现的Haskell子集,其超轻量级运行时系统与强大的自举能力正在重新定义嵌入式开发的可能性。本文将深入剖析这两大核心优势,展示它们如何解决传统嵌入式开发中的资源限制与工具依赖痛点。 ## 超轻量级运行时:嵌入式设备的理想选择 MicroHs的运行时系统设计堪称嵌入式领域的典范,其核心优势在于**极致精简的资源需求**。与传统Haskell实现动辄数百MB的运行时

gitblog_00149的博客 279

零Cargo依赖的Rust编译器:B语言编译器bext-lang/b的nob构建系统揭秘

你想过没有:一个用 Rust 编写的编译器,居然可以完全不用 Cargo?**bext-lang/b 就是一个"零Cargo依赖的Rust编译器"**,它用纯 `rustc` 加自研的 **nob 构建系统**完成从源码到可执行文件的全流程。本文将一步步揭秘这套极简构建方案的内部原理,带你理解为什么"没有 Cargo"反而更酷。 [![bext-lang/b Rust编译器项目标识(草莓Logo

gitblog_00187的博客 790

PHP-Compiler:革命性PHP编译器的终极指南

PHP-Compiler 是一款革命性的 PHP 编译器,它能够将 PHP 代码转换为高效的机器码,为 PHP 应用带来前所未有的性能提升。无论是追求极致性能的开发者,还是希望优化现有 PHP 项目的团队,这款编译器都能满足你的需求。 ## 为什么选择 PHP-Compiler? PHP-Compiler 采用创新的编译技术,突破了传统 PHP 解释执行的性能瓶颈。与传统 PHP 解释器相比,

gitblog_00024的博客 985

Vale编译器自托管之路:从Scala到Vale的完整迁移策略

Vale编程语言编译器正经历一场意义深远的转变——从Scala实现逐步迁移到Vale自身实现的自托管(self-hosted)之旅。这一过程不仅是对Vale语言能力的终极测试,更是提升编译器性能、简化开发流程的关键战略。本文将深入剖析这一迁移的背景、现状与未来路径,为开发者揭示Vale编译器如何实现"自己编译自己"的壮举。 ## 编译器架构现状:多语言协作的过渡形态 Vale编译器当前采用混合

gitblog_00916的博客 447

【Linux】|开发工具介绍 | yum |vim | gcc/g++ | gdb | git

在Linux系统上进行开发,掌握和使用合适的工具能够大大提高开发效率和代码质量。本文将详细介绍几种常用的Linux开发工具,包括软件包管理器Yum、编辑器Vim、编译器GCC、调试器GDB、构建工具Makefile以及版本控制系统Git。通过这些工具的使用,你将能够更高效地进行软件开发和维护。

shijiaqingsnfx的博客 2398

深入解析OpenJDK编译:JNI实现、跨平台构建与Boot JDK自举原理

Java Native Interface(JNI)是Java平台实现跨平台能力的关键技术,它通过在Java代码中声明native方法,并调用C/C++编写的本地函数,为Java程序提供了直接访问操作系统底层资源和硬件的能力。这一机制使得Java在保持“一次编写,到处运行”特性的同时,能够高效处理文件I/O、网络通信、线程调度等与系统紧密交互的任务。从技术价值看,JNI不仅解决了性能关键场景的需求,还构成了Java生态与原生生态的桥梁,是理解Java虚拟机(JVM)与操作系统交互的核心。在实际应用场景中,开

Hi, Sun 451

为什么Ruby JIT应该用Ruby实现?RhizomeRuby的设计哲学与启示

RhizomeRuby是一个完全用Ruby实现的Ruby即时编译器(JIT),它挑战了"编译器必须用低级语言编写"的传统观念。这个创新项目不仅为Ruby性能优化开辟了新路径,更为动态语言运行时设计提供了独特的视角。本文将深入探讨RhizomeRuby的核心设计哲学,解析用Ruby实现JIT的优势,并展示其架构选择如何为开发者带来前所未有的灵活性。 ## 打破常规:用Ruby构建Ruby JIT的

gitblog_00616的博客 811

cproc编译器入门指南:轻量级C11编译器的终极介绍

cproc编译器是一个基于QBE后端的C11编译器,为开发者提供了轻量级、高效的C语言编译解决方案。这款开源编译器不仅支持C11标准,还实现了部分C23特性和GNU C扩展,是学习和研究编译器技术的绝佳工具。无论你是C语言初学者还是资深开发者,cproc都能为你带来简洁高效的编译体验。 ## 🚀 什么是cproc编译器? cproc是一个完全符合C11标准的编译器,采用[QBE](https

gitblog_01007的博客 176
上一篇: Burp Suite 代理机制,代理 PC、手机配置
AlimSah
博客等级 码龄11年 8粉丝 18原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值