自制解释器-前言
终于,Dragonfly的1.5发布了,进入了稳定开发期,我也终于有空来照顾一下我这个博客了,距离上一篇文章已经有一个多月了,这下我打算开一个持续更新的专栏,就是自制解释器。
对于编译原理和解释器原理,有很多理论书籍专门论述,传说中的“龙书”“虎书”“鲸书”就是这一类,但是它们太过专业,事实上要自制解释器,能用到的知识是否有十分之一都说不定,所以,网上也出现了很多通俗易懂的教程,但是它们几乎都是零散的文章,大多都不全面,很多都只讲到了词法分析,连语法分析都够不着,这显然又太过肤浅了。于是,我寄希望于《两周自制脚本语言》《自制解释器》等实战书籍,但它们过于重视实用性,使用了第三方的词法分析和语法分析工具(如lex/yacc/bison),却忽略了最核心最灵魂的部分,而这部分正是我们所欠缺的。于是,我找到了这个教程:计算机自制解释器 ,这个专栏真的非常好,我照着学习之后就写出了Dragonfly,不过,还有很多内容是这个教程没有写到,我自己琢磨出来的,所以我打算自己写一个专栏,既是对原教程的阐释和补充说明,也是更进阶的提升。
比之原教程,我的这个专栏侧重于设计思想,对于理论知识没有过多的讲 ...
SOAP的概念与主要特点
前言在上一篇文章HTTP所有方法详解当中,我在最后给自己挖了一个坑,说要在下一篇文章里面介绍SOAP和RESTful,没办法,自己挖的坑怎么都得填上,于是,我写了这篇文章。
我们在开发API或者调用别人的API的过程中,可能经常听到诸如“REST API”这样的名词,而并不知道它是意味着什么,而像SOAP这样的名词,平时可能几乎不会接触到,其实,SOAP与REST是Web Service(Web Service在百度上面的教程一抓一大把,但是都云里雾里的,我们可以直接理解为Web Service就是通过Web向外提供的API组件)的两种方式。
由于它们的内容稍多,所以我要分好几篇文章来讲,这篇文章主要讲解SOAP的概念与主要特点。
概述这里的SOAP可不是肥皂的意思,SOAP指Simple Object Access Protocol,即简单对象访问协议,是一种基于HTTP和XML的简单网络协议,可使应用程序在 HTTP 之上进行信息交换。简单来说,SOAP就是一种网络协议,用HTTP传输信息,信息的格式是XML。SOAP被发明已经很有一些年头了,它最初就是在HTTP诞生之后,作为一种 ...
HTTP所有方法详解
前言我们生活中,可能每天都在使用浏览器访问一个又一个的网站,获取各种新鲜有用的信息,但是我们可能并不关心这底层的原理,即使是学爬虫的,可能也只知道GET和POST方法,而并不清楚它们的区别,对于丰富的HTTP方法,知道的更不过是冰山一角。这篇文章,就为大家介绍所有的HTTP方法,让大家无论是开发网站还是爬虫,对于这些方法都不再陌生。
GET方法概述这是所有HTTP方法中最常见的一种,我们每天访问网站几乎都是使用的这种方法,它可以用来加载文本、网页、图片、音乐、视频等等,正是它,为我们带来了丰富的页面。
特点
GET请求的作用是从指定的资源获取数据
GET请求的参数直接在URL中显示,不安全
GET请求具有幂等性(何为幂等性我们会在后面解释)
GET 请求可被缓存
GET 请求可以保存为浏览器历史记录或书签
GET 请求有长度限制
GET请求的参数提交在URL中形如a=1&b=2这样的格式,其中a与b为键,1与2为值,&是连接符,用于连接多个数据
GET请求的参数值只允许ASCII字符(中文会被转码)
响应码
200(OK) - 表示已在响应中发出
204(无内容) ...
个人博客满血复活
离我第一次搭建个人博客已经有一个月时间了,这一个月真的经历了很多,从使用Vercel + Hexo搭建博客,到选择Pure主题,到使用Gitalk评论系统,到更换到现在的Butterfly主题,到使用Twikoo评论系统,到Vercel失效,到紧急迁移到Netlify,到尝试复活Twikoo失败,到使用Freenom免费域名,到最后成功满血复活,真的学会了很多,现在我有了一个很好的顶级域名wuyuhang.ml(就是现在这个域名),还可以使用Twikoo评论系统,Butterfly主题也很好看,现在终于可以正常写作了,也感谢大家一路陪伴,以后会更新很多技术博客,敬请期待吧。
PyPy的安装和使用(一)
前言今天这个前言我们不说那么多虚的了,直接开始吐槽,Python大家肯定都用熟了,但是Python最大的弱点,相信大家也有都知道,那就是:速度慢!速度慢!速度慢!(重要的事情说三遍)Python的速度实在是太慢了,在一些需要速度的场合,比如数据分析和处理方面,Python虽然占很大的优势,比那复杂又臃肿的C++不知道好多少,但是速度也是一个硬伤啊,所以,Python在算法方面至今难望C++项背,唉~
当然,今天这篇文章可不是拿来倒苦水的,打住打住!接下来,我要隆重推出今天的主角:PyPy!
PyPy是什么?说出来你可能不信,PyPy是用Python写的一个Python解释器,是的,我没说错,你也没有听错,再重复一遍,PyPy是用Python写的一个Python解释器(舌头差点打结)。你肯定会大吃一惊:还能用Python自己写自己的解释器?!那是当然,这就是高级语言的一个特性:自举。自举是什么?简单来说,就是像PyPy这样,用自己写自己的编译器/解释器。不用惊讶,我们现在用的GCC这个很好用的C/C++编译器就是用C自己写的。听到这里,你又会疑惑不解:我听说过,Python是用C写的,所 ...
FastAPI的使用(一)
前言在开发项目的过程中,我们可能会遇到想要快速开发一个API应用,却不想要去了解Web框架底层运作的原理,只想提供一个可以用网络访问的API服务这种情况。Python无疑是这种快速应用开发最好的选择,而Python的Web框架百花齐放,Django完整而成熟,却太过臃肿;Flask简洁优雅,却难以屏蔽底层细节……这种情况,我们就需要FastAPI出场了。
FastAPI简介FastAPI是用Node.js写的一个高性能Web服务器框架,提供了对应的Python接口,由于是使用Node.js开发的,所以它的速度比Django或者Flask这种基于Python开发的框架都要快,而且FastAPI非常简单而易于上手,几乎是采用的声明式开发,所以你可以无需考虑其它,而专心的开发你的API接口,FastAPI还自带Swagger(OpenAPI)文档生成,这样你就不用手动写API文档了,FastAPI会自动为你生成,听起来很棒,是吗?那就开始吧!
安装好的模块从来都是大道至简,只需要一行代码就好:
1pip install "fastapi[all]"
解释一下,这是pip ...
Python字符串格式化
前言对于Python这种动态语言来说,字符处理这种事情简直是易如反掌,在Python的众多功能中只能算小儿科,然而,就是这样的小儿科,却也衍生出了各种不同的派别,什么正则表达式,什么编码格式,如果往深处钻研,都是非常复杂的。当然,今天这篇博客不会像它们一样让你头疼,今天我们只介绍一个小小的内容——字符串格式化。
字符串格式化虽然不复杂,也没有高深的内涵,但是在编程中每个人都会用得到,从而也诞生了很多不同的方法,这篇文章主要讨论各种方法的优劣。
0、字符串拼接介绍字符串拼接大概是大家最早接触到的字符串处理吧,这种方法几乎在所有编程语言中都是一样的,就是一行"str1" + "str2",大道至简。但之所以它的序号是0,是因为它实在是“不入流”的一种做法,只能算字符串格式化中的“旁门左道”,算不得“名门正派”,在很多项目中也不会使用这种方法,因为格式难以统一。在Python中,它的写法是这样的:
1234text1 = "Hello"text2 = "World"text = text1 + text2prin ...
个人博客写作工具推荐
前言个人博客搭建好也有一段时间了,但是,搭建好只是一个起点,重点还是在后面持续的写作,你不写作,不去用自己的知识和经验填充它,那么博客搭建的再好也只是一个空架子,如果你写了很多有意义的内容,不仅自己会感到充实,别人看了也会觉得很有帮助。俗话说得好,“工欲善其事,必先利其器”,要写好博客,顺手的工具是必不可少,这里就给大家推荐一波我正在使用,而且觉得很顺手的工具。
一、Typora说到Markdown写作工具,那就不能不提到Typora,Typora在笔记软件这一方面可谓是久负盛名了,在网上也经常看到推荐它的文章,那么,Typora究竟好在哪里呢?
1、所见即所得这可以说是Typora最知名的一个方面了。现在很多的写作工具也像Typora这样,做出了编写和预览一体的功能,但是要追根求源,所见即所得的笔记模式还是Typora开创的先河。在此之前,所有的Markdown写作工具都是采用的源码,即分屏预览模式,效果像下面这样:
这样写文章的时候眼睛要兼顾左右两边,一边看源码一边看预览效果,这样写少一点还好,字数一多就会很累,而且也非常不方便,而Typora首先推出了源码与预览一体的方式,刚写下 ...
一些好用的Python标准库
前言Python作为一门简洁优美、功能强大的脚本语言,很多实用的函数和功能都无需安装三方库或自己实现,在Python内置的标准库中就有不少很实用但知道的人不多的标准库,今天就分享一些,希望能帮到大家。
itertools介绍itertools是一个用于快速生成各种迭代的标准库,它为一些需要枚举、遍历的场合提供了一种简单而高性能的迭代方式。
调用示例:123456import itertools # 导入itertools库itertools.permutations('abcde') # 生成abcde的所有组合itertools.combinations('abcde', 3) # 在abcde中选3个的所有组合itertools.product('abcde', '123') # 生成abcde与123的笛卡尔积itertools.cycle(('a', 'b', 'c')) # 生成abcde的无限循环队列
注意事项这些函数返回的不是常见的 ...
更换博客主体通知
由于我之前搭建博客是用的一个叫做Pure的主题,然后用了一段时间这个主题有很多不合意的地方,于是我打算换一个主题,兜兜转转我选中了这个Butterfly主题,还是非常不错的,由于原来的主题遗留的配置有点多,于是我决定从头开始部署。然而,我愚蠢透顶地选择了直接一次性删除原来的项目文件夹、Github仓库和Vercel项目!这就意味着我原来写的博客(尽管只有2篇)被我彻底删除掉了!!!不过还好只有两篇文章,损失不太大,但是那两篇文章我是不会再补写了,后面会沿用这个主题,写一些博客的,以后我也会注意随时备份项目和博客的,特此告知.