SWC介绍

3 篇文章 0 订阅

SWC介绍

我们来看一下swc官方介绍:

SWC (stands for Speedy Web Compiler) is a super-fast TypeScript / JavaScript compiler written in Rust.

swc的出现其实很大一部分原因是要替换掉工程中的babel,所以babel有的功能他几乎都有。

与babel最大的区别可能就是: swc is super-fast

swc官网中还有这样一句话,体现了他的速度:

img

除了swc的官方宣传外,Next.js基于swc实现了一个Rust编译器,用来解析编译、打包代码。下面是Next.js结合swc之后给出的一个数据:

img

所以从上面这些数据也可以简单看出来swc的优势:可以提高开发效率,提升开发体验

Github

SWC 开源地址
这是一位名叫 kdy1 的韩国97年的小伙子开源的,很牛逼呀!
在这里插入图片描述

swc原理分析

(1)新建一个 debug-swc 项目

$ cargo new debug-swc
$ cd debug-swc

目录结构如下:

debug-swc
├── .gitignore
├── Cargo.toml
└── src
    └── main.rs

(2)添加依赖
Cargo.toml 文件,[dependencies] 配置项下面添加如下内容:

swc_ecma_parser = "0.31.2"
swc_common = "0.7.0"
swc_ecma_ast = "0.26.0"
swc_atoms = "0.2.2"

在这里插入图片描述

(3)新增 test.js 文件
根目录下的这个文件,用于 debug swc 的解析之用,内容如下,

const i = 1;

(4)编写 src/main.rs
官方例子 Crate: swc_ecma_parser 几乎不用做任何修改。

为了能展示 swc 解析 JavaScript 代码的结果,我增加了一个 get_identifier_name 函数,用于获取 test.js 代码中的变量名 i

extern crate swc_common;
extern crate swc_ecma_parser;

use std::path::Path;
use swc_atoms::JsWord;
use swc_common::{
    errors::{ColorConfig, Handler},
    sync::Lrc,
    SourceMap,
};
use swc_ecma_ast::{Decl, Module, ModuleItem, Pat, Stmt};
use swc_ecma_parser::{lexer::Lexer, Parser, StringInput, Syntax};

fn main() {
    swc_common::GLOBALS.set(&swc_common::Globals::new(), || {
        let cm: Lrc<SourceMap> = Default::default();
        let handler = Handler::with_tty_emitter(
            ColorConfig::Auto, true, false, Some(cm.clone()));

        let fm = cm
            .load_file(Path::new("./test.js"))
            .expect("failed to load test.js");

        let lexer = Lexer::new(
            // We want to parse ecmascript
            Syntax::Es(Default::default()),
            // JscTarget defaults to es5
            Default::default(),
            StringInput::from(&*fm),
            None,
        );

        let mut parser = Parser::new_from(lexer);

        for e in parser.take_errors() {
            e.into_diagnostic(&handler).emit();
        }

        let module = parser
            .parse_module()
            .map_err(|e| {
                // Unrecoverable fatal error occurred
                e.into_diagnostic(&handler).emit()
            })
            .expect("failed to parser module");

        if let Ok(identifier_name) = get_identifier_name(&module) {
            println!("identifier name: {}", identifier_name);
        }
    });
}

fn get_identifier_name(module: &Module) -> Result<&JsWord, ()> {
    for module_item in &module.body {
        if let ModuleItem::Stmt(Stmt::Decl(Decl::Var(var))) = module_item {
            for decl in &var.decls {
                if let Pat::Ident(identifier) = &decl.name {
                    return Ok(&identifier.id.sym);
                }
            }
        }
    }
    Err(())
}

src/main.rs 的完整源码可以看这里:github: debug-swc/src/main.rs

(4)来看一下执行结果

$ cargo run

执行 cargo run 会先进行 cargo build,最终结果如下,
在这里插入图片描述

我们经过解析 AST 从 test.js 源码中拿到了变量名 i


参考文章:
swc–babel的代替者
简单使用SWC
新一代构建工具
SWC体验
编译工具SWC

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
AutoSAR(Automotive Open System Architecture)SWC(Software Component)是用于汽车电子系统的软件组件开发和集成的一种标准方法。AutoSAR是由全球汽车行业联合推出的,旨在提高汽车电子系统的开发效率和可重用性。 AutoSAR SWC主要解决了汽车电子系统中软件组件开发和集成的问题。它将整个系统划分为多个独立的软件组件,每个组件负责实现特定的功能。每个SWC都具有标准化的接口,以便于与其他组件进行通信和集成。 AutoSAR SWC的设计原则是模块化和可重用性。每个SWC都可以在不同的车型和车系中进行重复使用,从而大大提高了开发效率。它还提供了一种灵活的组件集成方式,允许开发人员根据需求进行组合和替换。 AutoSAR SWC开发需要遵循一套标准化的流程和规范。开发人员需要定义SWC的需求、架构和接口,然后实现和测试SWC的功能。最后,将所有的SWC进行集成和验证,以确保整个系统的功能和性能符合要求。 AutoSAR SWC的应用范围很广,涵盖了汽车电子系统中的各个领域,如发动机控制、车身电子、安全系统等。它可以提供诸如数据处理、通信、故障诊断等功能,为汽车电子系统的稳定性、安全性和可靠性提供保障。 总之,AutoSAR SWC是一种用于汽车电子系统的软件组件开发和集成的标准方法。它通过模块化和可重用性的设计原则,提高了开发效率和系统的可靠性,对于实现先进的汽车电子功能和提升驾驶体验具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

phial03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值