craftinginterpreters学习,持续更新

craftingin 精心制作

interpreters 编译器 ,解释器,翻译器,代码解释程序

Fairy tales are more than true: not because they tell us that dragons exist, but because they tell us that dragons can be beaten.
G.K. Chesterton by way of Neil Gaiman, Coraline

神话故事,比现实更现实, 不是因为巨龙存在,而是巨龙可以被战胜。

I’m really excited we’re going on this journey together. This is a book on implementing interpreters for programming languages. It’s also a book on how to design a language worth implementing. It’s the book I wish I’d had when I first started getting into languages, and it’s the book I’ve been writing in my head for nearly a decade.

我很兴奋,就要踏上我们的旅途了。这是一本关于实现程序预言编译器的书。也是一本关于如何设计一个值得实现的语言的书。一本在我刚接触程序开发的时候希望能拥有的书,也是一本在我脑子里写了十年的书。

In these pages, we will walk step-by-step through two complete interpreters for a full-featured language. I assume this is your first foray into languages, so I’ll cover each concept and line of code you need to build a complete, usable, fast language implementation.

在这些书页里,我们会一步步通过两个完备,完整的解释器实现一个功能齐全的语言。我假设你第一次涉足程序语言学,所以,我会cover包含所有概念,每一行代码去创建一个完整,稳定,快速的语言实现。

In order to cram two full implementations inside one book without it turning into a doorstop, this text is lighter on theory than others. As we build each piece of the system, I will introduce the history and concepts behind it. I’ll try to get you familiar with the lingo so that if you ever find yourself at a cocktail party full of PL (programming language) researchers, you’ll fit in.

为了能在一本书里搞定两个完整实现而不变成门槛,这本书会对于理论讲解轻量些,相比其他的书。对于创建的系统的每一部分,我都将讲解下历史和背后的理念。我会让你去熟悉行话,这样你如果参加一个PL(语言沙龙)一类的Party的时候能也融入其中。

作者吐槽参加过很多类似的party,这些写代码的很能喝。

But we’re mostly going to spend our brain juice getting the language up and running. This is not to say theory isn’t important. Being able to reason precisely and formally about syntax and semantics is a vital skill when working on a language. But, personally, I learn best by doing. It’s hard for me to wade through paragraphs full of abstract concepts and really absorb them. But if I’ve coded something, run it, and debugged it, then I get it.

不过,我们主要还是绞尽脑汁去让这些语言能运行上线。不是说理论不重要。能够精确且正式的推理语法和语义是极其重要的技能,当从事语言工作。
不过,个人而言,我学习最快的方法是做。我很难阅读满是抽象概念的段落还能完全理解吸收。不过如果我写代码,运行,调试,我就能学会它。(俺也一样)

Static type systems in particular require rigorous formal reasoning. Hacking on a type system has the same feel as proving a theorem in mathematics.

静态类型系统通常要求严格的公式推理。黑一个类型系统会有种数学定理证明的感觉。

That’s my goal for you. I want you to come away with a solid intuition of how a real language lives and breathes. My hope is that when you read other, more theoretical books later, the concepts there will firmly stick in your mind, adhered to this tangible substrate.

上述就是你的目标。我希望你能对真实语言的运作有一种坚实的直觉。我希望未来你阅读其他理论书籍的时候,这些概念可以牢牢的在你脑海,依附于这些实质的底层内容。

1 . 1Why Learn This Stuff?
为何而学?
Every introduction to every compiler book seems to have this section. I don’t know what it is about programming languages that causes such existential doubt. I don’t think ornithology books worry about justifying their existence. They assume the reader loves birds and start teaching.

似乎所有讲编译器的书都会有这个部分。我不知道为什么会有对学这个有必要性的质疑。我想不会有鸟类学的书会有人质疑其存在价值。书本身假设读者喜欢鸟
就直接教学。

But programming languages are a little different. I suppose it is true that the odds of any of us creating a broadly successful, general-purpose programming language are slim. The designers of the world’s widely used languages could fit in a Volkswagen bus, even without putting the pop-top camper up. If joining that elite group was the only reason to learn languages, it would be hard to justify. Fortunately, it isn’t.

不过程序语言还是有些不同。我猜多数人都创造不出来很成功泛用的程序语言。能设计出世界级别泛用语言的作者估计只能装进一辆大众bus里,甚至不用敞篷。如果只是为了加入这群人去研究语言,那就很难评价学习其必要的合理性。幸运的是,并不是。

Little languages are everywhere
小而美语言很多

For every successful general-purpose language, there are a thousand successful niche ones. We used to call them “little languages”, but inflation in the jargon economy led to the name “domain-specific languages”. These are pidgins tailor-built to a specific task. Think application scripting languages, template engines, markup formats, and configuration files.

每个成功流行的语言,背后都有上千个成功的小语言。我们一般叫他们“小型语言,玩具语言,方言”,但是,行话早就通货膨胀了,我们叫他们领域语言。

太慢了,能力不足,不翻译了,直接看。Git上有翻译好的。

UE4资源网站

链接:https://pan.baidu.com/s/1Z4dC8vKQRX44UZjc5HURPw 提取码:95ue

https://www.tuto-v.com/

https://www.modongwang.com

 

开源SVG图片库,https://svgsilh.com/

UE4

官方课程蓝图

https://learn.unrealengine.com/course/2449697/module/5394454?moduletoken=UHxxnDLPW8RFTWEHpv~KBKI~colym3bKNcfFou2vGrat-D0RdbBO-kDzroDDf5Ip&LPId=0

2.动画教程

https://www.bilibili.com/video/BV1Ly4y1q7UG?spm_id_from=333.999.0.0

3.学习中心

https://www.unrealengine.com/zh-CN/learn

4.学习虚幻引擎的15套最佳在线课程

https://www.unrealengine.com/zh-CN/blog/the-15-best-online-courses-to-learn-unreal-engine?lang=zh-CN

5.建模软件分析

 

链接:https://pan.baidu.com/s/1tenxtnmnrsMMFp-ySvoMGw
提取码:5hg2
–来自百度网盘超级会员V1的分享

 

链接:https://pan.baidu.com/s/1rJtDT4g4INZNUjx96FENVw 提取码:wd8y –来自百度网盘超级会员V7的分享

GKCTF2021WP记录

Misc+Web+Re

【WP】GKCTF2021 By EDI战队

https://mp.weixin.qq.com/s?__biz=MzIzMTQ4NzE2Ng==&mid=2247488643&idx=1&sn=fc6838f86df389832ffe764f56617e51&chksm=e8a23752dfd5be445fb993ac7d3db9c57c3968952893cdb1b1623a8b502e5adeb725041feee2&mpshare=1&scene=23&srcid=0627hPHDRTjMWsOpSaqLQXGY&sharer_sharetime=1624770267861&sharer_shareid=4ab934ef6190b58c8090ecd3bd76127b#rd

GKCTF2021个人WriteUP

GKCTF X DASCTF应急挑战杯 Writeup —— CSAlab_Sec

https://mp.weixin.qq.com/s?__biz=Mzg5NTY0MTQzOQ==&mid=2247484086&idx=1&sn=86cdaeb3f06b63752d6c9efd6aeb3d53&chksm=c00c7086f77bf9907ee5deb3663d0fb08745905ce076541cd83e21b1bf4489f08de929386c9e&mpshare=1&scene=23&srcid=0627Fvp1wR2T3eRnE2ixKenR&sharer_sharetime=1624766758335&sharer_shareid=8af3bddae9a771a8f752045d90227249#rd

web

GKCTF2021

Tea加密

https://www.cnblogs.com/chevin/p/5681228.html

VeraCrypt

https://veracrypt.fr/en/Home.html

 

PWN

https://mp.weixin.qq.com/s?__biz=MzIzMTQ4NzE2Ng==&mid=2247488643&idx=1&sn=fc6838f86df389832ffe764f56617e51&chksm=e8a23752dfd5be445fb993ac7d3db9c57c3968952893cdb1b1623a8b502e5adeb725041feee2&mpshare=1&scene=23&srcid=0627hPHDRTjMWsOpSaqLQXGY&sharer_sharetime=1624770267861&sharer_shareid=4ab934ef6190b58c8090ecd3bd76127b#rd

RSA与费马小定理https://www.iloveflag.com/2020/09/23/RSA%E4%B8%8E%E8%B4%B9%E9%A9%AC%E5%B0%8F%E5%AE%9A%E7%90%86/

 

awd

总结https://www.iloveflag.com/2020/09/08/awd%E6%80%BB%E7%BB%93/

总结2 https://4hou.win/wordpress/?cat=2968    AWD攻防赛之各类漏洞FIX方案

总结3 https://zhuanlan.zhihu.com/p/48141798

waf

https://blog.csdn.net/wy_97/article/details/78161363

https://github.com/litheory/AWD/blob/master/waf.php

bird https://github.com/leohearts/awd-watchbird

https://github.com/al0ne/Vxscan

npm 更换阿里镜像

npm 更换阿里镜像

使用NPM(Node.js包管理工具)安装依赖时速度特别慢,只需要使用–registry参数指定镜像服务器地址,

npm install your-need-model --registry=http://registry.npm.taobao.org

为了避免每次安装都需要--registry参数,可以使用如下命令进行永久设置:

npm config set registry http://registry.npm.taobao.org

Blender作品Show

1.第一P完成效果,建模+雕刻+材质上色,还有些细节添加。

2.添加糖果粒子效果,长短不一,方向分散,还有圆球糖果。

3.对于材质效果的增强,甜甜圈太假,增加纹理,使用,纹理贴图修改,增加噪点,凹凸效果

添加前

添加后

特别棒的APP分享

番茄Todo。。这个APP深得我心

基本上需要的功能都有了。

有上进心的小伙伴别错过了。

早餐食谱

明日早餐,周四,煎饺,煎下黄瓜,烤面包。

饮品:麦片、冲牛奶、茶

1.鸡蛋,烤面包,西红柿|黄瓜,饮品:麦片。

2.煮午餐肉,鸡蛋,青菜公仔面、煎饺、茶。

3.蒸馒头,蒸叉烧包,包子,蒸饺 | 冲脱脂奶粉。 蒸肉包子。

4.手抓饼+鸡蛋+生菜+火腿肠|印度飞饼|

5.蒸水蛋,

6.鲜肉小混沌

运动

骑到福田体育公园,跑20分钟再骑回来。准备好水!

算法记录,每日一题_无重复字符串03

题目

首先还是最原始的自己思考解决方法。。

思路就是,遍历+校验是否有重复+递归,效率低下,惨不忍睹。不过是自己思考的。

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    // 子串是相连的
    // 子序列是不相连
    if(s == ''){
        return 0;
    }
    var maxLength=1;
    var k = 0;
    for(var i=0;i<s.length;i++){
        var tempMax = 1;
        var tempList = [s[i]];
        k = i;
        function checkRepeat(list,value){
            for(var item of list){
                if(item == value){
                    return true;
                }
            }
            return false;
        }
        function checkNext(){
            k = k+1;
            if(s[k]){
                if(checkRepeat(tempList,s[k])){
                    // 有重复
                    if(tempMax>maxLength){
                        maxLength=tempMax;
                    }
                }else{
                    // 无重复
                    tempList.push(s[k]);
                    tempMax++;
                    if(tempMax>maxLength){
                        maxLength=tempMax;
                    }
                    checkNext()
                }
            }
        }
        checkNext();
    }
    return maxLength;
};

 

然后是标准答案是使用滑动窗口。