《自制编程语言基于c语言》读书笔记

news2024/11/28 21:52:55
前言:

很久之前,我在双十一的时候入手了一本《自制编程语言基于c语言》。这本书是写《操作系统真象还原》的作者。我当时看他的关于操作系统的这本书,非常不错,就连着这本书一起入了。但是后面,因为各种事情,没有来得及仔细翻阅。(当然,当时双十一入手的书有点多,没来及看)。

环境说明

当时,这本书上的代码是基于gcc的,是在linux上面跑的。但是,前不久,我的电脑重刷了系统。下载的window的vm虚拟机也没有了。需要重新下载。下载下来有点麻烦。安装系统啥的。安装gcc啥的。而且各种环境配置也比较麻烦。后期调试也不大方便。我看了一下作者的说明。代码是基于c89的。也没有特别依赖Linux的地方。我想改成window也应该可以运行的。

尝试修改为window环境下运行

我们先拿到源代码,源代码的话,我们到异步社区下载好源码

图片

地址的话,就放到这里:https://box.lenovo.com/l/M1ZtHI

下载好代码以后,打开看一下目录。

图片

这里为了方便修改和测试,我们选择c10文件夹下面的b文件夹里面的代码。直接一步到位。

使用cmake构建项目

使用cmake构建项目,这样方便移植到linux。

  1. 修改的文件的编码格式

    因为文件编码不一样,在vs里面会警告,所以,修改了一下文件编码格式

  2. 修改了一下OBJ_TO_VALUE定义

    #define OBJ_TO_VALUE(objPtr) ({ \
      Value value; \
      value.type = VT_OBJ; \
      value.objHeader = (ObjHeader*)(objPtr); \
      value; \
    })
    static Value OBJ_TO_VALUE(void* objPtr) {
      Value value;
      value.type = VT_OBJ;
      value.objHeader = (ObjHeader*)(objPtr);
      return value;
    }

    上面的语法再gcc里面可以运行,但是在vs会报错。这里改成静态函数。

  3. 将内联类改成普通类

    inline Class* getClassOfObj(VM* vm, Value object);
    Class* getClassOfObj(VM* vm, Value object);

    这里地方只是改了定义,还有一个函数的实现也需要改一下。

  4. 改一下vm的申请内存的代码

    VM* vm = (VM*)malloc(sizeof(VM));
    
    
    VM* vm = (VM*)calloc(1,sizeof(VM));

    用malloc申请的内存不会初始化为0,后期会报错。这里改成calloc全部初始化为0就好。

测试运行

图片

图片

发现没啥问天,代码放到github上了,https://github.com/ddouworld/sparrow_vs, sparrow语言在visualstudio里面运行 (github.com)

我这边只将最后的代码转成vs的可以运行的。但是其实都差不多。有兴趣的自己尝试改改。在window下就更方便调试,理解代码了

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

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

相关文章

龙芯浏览器是哪家公司开发的?支持信创吗?

最近看到不少小伙伴在问,龙芯浏览器是哪家公司开发的?支持信创吗?这里我们小编就跟大家一起来看看,仅供参考哈! 龙芯浏览器是哪家公司开发的? 龙芯浏览器是由龙芯中科牵头,基于主流的渲染引擎G…

学习笔记|多独立样本秩和检验|克鲁斯卡尔-沃利斯检验|多个组间的多重比较|规范表达|《小白爱上SPSS》课程:SPSS第十四讲 | 多独立样本秩和检验如何做?

目录 学习目的软件版本原始文档多独立样本秩和检验一、实战案例读数据: 二、统计策略三、SPSS操作1、正态性检验2、多个独立样本的秩和检验3、多个组间的多重比较 四、结果解读第一,描述性统计结果。 第二 ,给出的是不同训练年限各自的样本量…

了解数据库设计,轻轻松松提高工作效率

每个应用程序,无论大小,最终都需要一个数据库来持久保存所有重要数据。对此没有任何争论! 什么是数据库设计? 数据库设计是帮助创建、实施和维护企业数据管理系统的一系列步骤的集合。设计数据库的主要目的是为所建议的数据库系统…

拓世法宝 | 数字经济崛起,美业如何抓住流量风口?

爱美之心,人皆有之。无论男女,都会很自然地对美好事物燃起兴致,跟高颜值相关的事物总能聚集注意力。例如直播平台里的美女网红收割流量赚得盆满钵满,面庞俊俏的年轻偶像吸引万千粉丝,还有“央视最美记者”王冰冰、“最…

R语言爬虫代码模版:技术原理与实践应用

目录 一、爬虫技术原理 二、R语言爬虫代码模板 三、实践应用与拓展 四、注意事项 总结 随着互联网的发展,网络爬虫已经成为获取网络数据的重要手段。R语言作为一门强大的数据分析工具,结合爬虫技术,可以让我们轻松地获取并分析网络数据。…

驱动大健康行业数字化转型升级,开利网络与艾博盾达成战略合作

在当今这个数字化飞速发展的时代,各行各业都在寻求数字化转型的创新突破口,以适应日新月异的变化。近日,开利网络科技与广东艾博盾举行战略合作签约仪式,期望基于开利网络在数字化营销领域多年沉淀的经验,为企业数字化…

【hcie-cloud】【1】华为云Stack解决方案介绍、华为文档获取方式 【上】

文章目录 华为文档获取方式前言云计算发展背景国家政策、社会发展驱动数字经济开启新时代深化数字化转型提升效率,国家数字主权云进入落地阶段从Cloud-Based到Cloud-Native,两种模式长期并存适合政企智能升级的云华为云Stack,政企智能升级首选…

Spring Security使用总结一,简单的引用Spring Security,坐着火箭就入门了

最近因为一些不能言语的原因,研究了一下Spring Security。因为感觉在使用上来说难度不大,所以把我研究的使用过程总结一下,放上来供大家学习研究思考进步的。我的思路大致就是,一个东西拿过来,先研究怎么使用&#xff…

数据库进阶教学——事务

目录 一、事务简介 二、事务操作方式 1、设置事务提交方式 1.1、命令 1.2、示例 2、开启事务 2.1、命令 2.2、示例 三、事务四大特性 四、并发事务问题 五、事务隔离级别 5.1、命令 5.2、示例 5.2.1、脏读 5.2.2、不可重复读 5.2.3、幻读 一、事务简介 事务是…

亚马逊、美客多卖家测评:如何建立养号团队实现运营化式测评?

大家好,我是跨境电商测评养号7年从事经验的珑哥。养号环境软件开发,深度解决各跨境平台矩阵养号防关联、砍单、F号问题。关注珑哥解决更多跨境养号测评问题。 测评,相信这个词对于大部分跨境卖家来说,想必都不陌生,因…

voronoi diagram(泰森多边形) 应用 - Good Manners

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 voronoi 图求解点击前往 题目链接:https://vjudge.net/problem/URAL-1504 题目大意 有一个桌子,形状是圆形。 桌上放着很多蛋糕&#xff0c…

Python模块psutil:系统进程管理与Selenium效率提升的完美结合

前言 在前面编写一个Selenium的自动化程序时候,发现一个问题。 因笔记本配置较为差,所以每次初始化Selenium的WebDriver都会非常慢,整个等待过程是不友好的。 所以我就想到: 在程序中初始化一个全局的WebDriver对象&#xff0c…

Git Rebase 优化项目历史

在软件开发过程中,版本控制是必不可少的一环。Git作为当前最流行的版本控制系统,为开发者提供了强大的工具来管理和维护代码历史。git rebase是其中一个高级特性,它可以用来重新整理提交历史,使之更加清晰和线性。本文将详细介绍g…

1060 爱丁顿数

一.问题: 英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数” E ,即满足有 E 天骑车超过 E 英里的最大整数 E。据说爱丁顿自己的 E 等于87。 现给定某人 N 天的骑车距离,请你算出对应的爱丁…

【计算机网络笔记】传输层——TCP特点与段结构

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

Springboot JSP项目如何以war、jar方式运行

文章目录 一,序二,样例代码1,代码结构2,完整代码备份 三,准备工作1. pom.xml 引入组件2. application.yml 指定jsp配置 四,war方式运行1. 修改pom.xml文件2. mvn执行打包 五,jar方式运行1. 修改…

深入了解汽车级功率MOSFET NVMFS2D3P04M8LT1G P沟道数据表

汽车级功率MOSFET是一种专门用于汽车电子领域的功率MOSFET。它具有高电压、高电流、高温、高可靠性等特点,能够满足汽车电子领域对功率器件的严格要求。汽车级功率MOSFET广泛应用于汽车电机驱动、泵电机控制、车身控制等方面,能够提高汽车电子系统的效率…

sqlserver字符串拼接

本文主要介绍了sqlserver字符串拼接的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。 1. 概 在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例&#…

Flink源码解析四之任务调度和负载均衡

源码概览 jobmanager scheduler:这部分与 Flink 的任务调度有关。 CoLocationConstraint:这是一个约束类,用于确保某些算子的不同子任务在同一个 TaskManager 上运行。这通常用于状态共享或算子链的情况。CoLocationGroup & CoLocationGroupImpl:这些与 CoLocationCon…

10月发布的5篇人工智能论文推荐

JudgeLM: Fine-tuned Large Language Models are Scalable Judges https://arxiv.org/pdf/2310.17631.pdf 由于现有基准和指标的限制,在开放式环境中评估大型语言模型(llm)是一项具有挑战性的任务。为了克服这一挑战,本文引入了微调llm作为可扩展“法官…