CodingTour
ARTS #207 | 国庆快乐

挂在枝头的月亮~

Algorithm

本周选择的算法题是:Min Cost to Connect All Points

impl Solution {
    pub fn min_cost_connect_points(points: Vec<Vec<i32>>) -> i32 {
        let points = points.into_iter().map(|p| (p[0], p[1])).collect::<Vec<_>>();

        let mut connected = vec![false; points.len()];
        let mut dist = vec![i32::MAX; points.len()];

        let mut min_idx = 0;
        let mut min_cost = 0;

        let mut total_cost = 0;

        for _ in 0..points.len() {
            connected[min_idx] = true;
            total_cost += min_cost;

            let cur_point = points[min_idx];
            min_cost = i32::MAX;

            for (idx, point) in points.iter().enumerate() {
                if !connected[idx] {
                    dist[idx] = dist[idx]
                        .min((cur_point.0 - point.0).abs() + (cur_point.1 - point.1).abs());
                    if dist[idx] < min_cost {
                        min_cost = dist[idx];
                        min_idx = idx;
                    }
                }
            }
        }

        total_cost
    }
}

Review

Tauri VS. Electron - Real world application

一个开发者分享了他关于 Tauri 和 Electron 的观点,内容是 2022 年 8 月的,已经有点 “过时”,比如:

  • Tauri 已经支持了 Rust 之外的 backend
  • Tauri 从 2.0 版本开始支持 iOS、Android

自 2022 年 6 月发布 Tauri 1.0 以来,一年时间也才将将发展成 2.0,在跨端市场里是一个新玩家,不过近两年受到了开发者的喜爱,Star 数直逼 Electron:

从定位上,Tauri 的对手不是 Electron,而是 Flutter,两者都有跨全平台的野心,实现路径稍有差异:Flutter 先从移动端切入,Tauri 先从桌面端切入;Flutter 是自研的渲染框架,Tauri 使用了系统自带的 WebView。Tauri 目标 2024 年初达到 2.0 版本的稳定发布,届时将收获大量移动端用户。

未来跨端的市场,很可能是 Tauri 和 Flutter 两家的竞争。

Tip

ifixit,一个教你修东西的网站,包括 Mac、iPhone、平板、游戏机、相机等常见问题的维修~

Share

分享一个 wasm 的运行时:wasm3

wasm3 是由 Mozilla、英特尔、RedHat 和 Fastly 公司宣布成立字节码联盟(Bytecode Alliance)后开发的 WebAssembly Micro Runtime(WAMR),它是用 C 语言编写,支持 AOT、JIT,底层依赖 LLVM 后端的一些能力,相比市面上的其他运行时,它最大的特点是可解释执行,这使 wasm3 能够在 iOS 这类无法在运行时生成代码段的平台上运行:

借由 wasm3 可以实现 WebAssembly 在 iOS 平台下的热更新。

而且 wasm3 不光是支持 JIT,性能和资源占用也不错,大约 64Kb 代码和10Kb 左右的 RAM,足够在 Arduino 和树莓派等嵌入式设备上运行。

Ending 曾经在 2016 年提出过 “Any application that can be compiled to WebAssembly, will be compiled to WebAssembly eventually.” 的观点,它体现了两点价值:

  1. 为 Web 时代的 C/C++ 程序员提供了重要的机会和活路,使他们能够开发高性能、跨平台、安全且可移植的 Web 应用程序
  2. 更繁荣的 Web 生态,WebAssembly 可以将任意技术与 Web 平台组合,Web 生态系统有了多样性和丰富性,它为应用场景提供了更多的选择和灵活性

得益于 WebAssembly 硬件无关的特性,WebAssembly 模块可以成为通用的组件格式在不同的环境中部署,想象力有了,到底能发展成什么程度还得继续观察 WebAssembly 生态其他的基础设施和编程语言发展状态。

目前 2.0 推进中:WebAssembly Specification