Part01、了解Clang 众所周知,编译器一般分为前端和后端,编译器前端主要负责预处理、词法分析、语法分析、语法检查、生成中间代码等与底层计算机架构无关的工作。后端以中间代码为输入,首先进行架构无关的代码优化,之后针对不同的机器架构生成不同的机器码,进行汇编链接
服务运行时,结合AOP切面编程实现方法的日志采集;二、注解原理先来看一个简单的注解使用案例,再细致地分析其中原理,案例并不复杂,就是常见的标注与解析两个关键动作;复制publicclassLogInfo{@SystemLog(model="日志模块")publicstaticvoidmain(Str
本文为来自 字节教育-成人与创新前端团队 成员的文章,已授权ELab发布。简介在计算机科学中,抽象语法树是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出
背景监控是服务端应用需要具备的一个非常重要的能力,通过监控可以直观的看到核心业务指标、服务运行质量等,而要做到可监控就需要进行相应的监控埋点。大家在埋点过程中经常会编写大量重复代码,虽能实现基本功能,但耗时耗力,不够优雅。根据“DRY(Don'tRepeaterYourself)"原则,这是代码中的
以前的项目中很少去思考SQL解析这个事情,即使在saas系统或者分库分表的时候有涉及到也会有专门的处理方案,这些方案也对使用者隐藏了实现细节。而最近的这个数据项目里面却频繁涉及到了对SQL的处理,原来只是简单地了解Druid的SqlParser模块就可以解决,慢慢地问题变得越来越复杂,直到某天改动自
Hi!大家好,我想点进来的大家应该都听过,也在浏览器或Node.js上执行过JavaScript,但你们有想过JavaScript是如何执行的吗?这背后的功臣就是JavaScript引擎,而标题提到的V8引擎也是其中之一哟!V8引擎是由Google用C++开源的JavaScript与WebAssem
前言哈喽,大家好,我是asong;通常我们在业务项目中会借助使用静态代码检查工具来保证代码质量,通过静态代码检查工具我们可以提前发现一些问题,比如变量未定义、类型不匹配、变量作用域问题、数组下标越界、内存泄露等问题,工具会按照自己的规则进行问题的严重等级划分,给出不同的标识和提示,静态代码检查助我们
前言:做基础技术的时候,会经常碰到一个问题就是如何让自己提供的代码对用户少侵入,无感。比如我提供了一个SDK收集Node.js进程的HTTP请求耗时,最简单的方式就是给用户提供一个request方法,然后让用户统一调用,这样我就可以在request里拿到这些数据。但是这种方式很多时候并不方便,这时候
不知道你是不是和我一样,看到“编译器”三个字的时候,就感觉非常高大上,同时心底会升起一丝丝“害怕”!我始终认为编译器是很复杂...很复杂的东西,不是我这种小白能懂的。而且一想到要学习编译器的知识,脑海里就浮现出那种500页起的厚书。一直到我发现the-super-tiny-compiler这个宝藏级
字符串的处理基本都会用正则表达式,用它来做字符串的匹配、提取、替换等很方便。但是正则表达式的学习还是有些难度的,比如贪婪匹配、非贪婪匹配、捕获子组、非捕获子组等概念,不止初学者难理解,有很多工作几年的人都不理解。那正则表达式怎么学比较好?怎么快速掌握正则表达式呢?推荐一个我觉得很不错的学习正则的方式
Eslint可以检查出代码中的错误和一些格式问题,并能自动修复,它的实现原理就是基于AST(抽象语法树)。通过Parser把源码解析成AST对象树,源码字符串中的各种信息就被保存到了这个对象树里,然后遍历AST,对每一部分做检查就能实现Lint的功能,而自动fix的功能则是基于字符串替换实现的,指定
各位读者朋友大家好,我是薯条,好久没更文章,不知还有多少读者记得这个号,这篇文章写的有点精分,如果你有耐心看完本文,可以翻翻留言区,我会发个新年红包。业务背景如果是本号老读者,可能知道我是做数据系统的,作为一个在线数据服务组,我们这边承接的需求是小而多的。我在一家打车公司上班,运营大佬们认为不同用户
babel和eslint都是基于AST的,一个是做代码的转换,一个是做错误检查和修复。babel插件和eslint插件都能够分析和转换代码,那这俩到底有啥不同呢?本文我们来探究下babel插件和eslint插件差别在哪里。babel插件babel的编译流程分为parse、transfor
随着前端的发展,特别是React,Vue等构造单页应用的兴起,前端的能力得以很大提升,随之而来的是项目的复杂度越来越大。此时的前端的静态资源也越来越庞大,而毫无疑问javascript资源已是前端的主体资源,对于压缩它的体积至为重要。为什么说更小的体积很重要呢:更小的体积对于用户体验来说
一、前言对于前端同学来说,编译器可能适合神奇的魔盒🎁,表面普通,但常常给我们惊喜。编译器,顾名思义,用来编译,编译什么呢?当然是编译代码咯🌹。其实我们也经常接触到编译器的使用场景: React中JSX转换成JS代码; 通过Babel将ES6及以上规范的代码转换成ES5代码;&
随着前端的发展,特别是React,Vue等构造单页应用的兴起,前端的能力得以很大提升,随之而来的是项目的复杂度越来越大。此时的前端的静态资源也越来越庞大,而毫无疑问javascript资源已是前端的主体资源,对于压缩它的体积至为重要。为什么说更小的体积很重要呢:更小的体积对于用户体验来说意味着更快的
张大胖一上班,领导就扔了一个任务给他,把项目中的JavaScript代码做点“小小”的改变:1.把==改为全等===2.把parsetInt不标准的调用改为标准用法parseInt(xxx)->parseInt(xxx,10)对不熟悉JS的同学稍微解释一下:JS在比较两个变量的时候