Skip to content

Instantly share code, notes, and snippets.

View tiye's full-sized avatar
💭
Make Cirru great again!

题叶 tiye

💭
Make Cirru great again!
View GitHub Profile
@tiye
tiye / sum-type-prompt.md
Created September 2, 2024 06:38
让 GPT, Gemini 生成个文章..

以 Rust 语言为例, 深入介绍 Sum Type 对于程序简洁和可靠性带来的帮助. 跟 TypeScript 当中的写法做对比. 文章分成 3 个大的部分.

第一部分介绍什么是 Sum Type(特别是带参数的情况), 比如在 Rust 当中的有哪些语法, 详细展示一下. 然后展开介绍 Sum Type 在其他编程语言的使用历史和经验, 业界怎样一步步接受 Sum Type 的使用.

第二部分展示一下 TypeScript 当中模拟带参数的 sum type 的用法, 分析一下对比 Rust 当中写法的优势和劣势. 注意提供一个案例来读取数据. 分别基于 tagged union 写法, 跟 interface 写法, 来展示和对比.

第三部分基于 Rust 的 Sum Type 展示一个业务的场景, 配合 Pattern Matching 用一段较复杂的逻辑来展示实用性. 特别是写一个例子来展示出在代码变更时, 模式匹配配合类型, 在代码的可靠性上的优势. 展示一下 Rust 是如何帮你避免因为业务变更写出 Bug 的, 比如增加一个新的 Variant, 通过代码展示一下 Rust 编译器怎样提示出现的错误.

@tiye
tiye / browser-languages.md
Created August 26, 2024 11:30
浏览器原生支持的六大编程语言,你学会了几门?

浏览器原生支持的六大编程语言,你学会了几门?

你是否知道,你的浏览器不仅仅是用来浏览网页的?它其实是一个强大的编程平台,支持着六种原生语言,赋予了网页前所未有的互动性和功能性。你是否已经掌握了这六种语言,并用它们创造出令人惊叹的 web 体验呢?

1. HTML:网页的骨架

HTML(HyperText Markup Language)是网页的基石,负责定义网页内容的结构和语义。它使用标签来标记文本、图像、视频等元素,并通过属性来控制它们的样式和行为。

代码示例:

use image::{ImageBuffer, Rgb};
use num_complex::Complex;
use std::f64::consts::PI;
const WIDTH: u32 = 512;
const HEIGHT: u32 = 255;
const MAX_ITERATIONS: u32 = 99;
fn main() {
let mut img = ImageBuffer::new(WIDTH, HEIGHT);
@tiye
tiye / Dockfile
Created July 29, 2024 07:08
Trunk rs image. requires Ubuntu for dylibs
FROM rust:1.80
RUN wget -qO- https://github.com/trunk-rs/trunk/releases/download/v0.20.2/trunk-x86_64-unknown-linux-gnu.tar.gz | tar -xzf-
RUN rustup target add wasm32-unknown-unknown
RUN mv trunk /usr/local/bin/
COPY config.toml /usr/local/cargo/config
RUN trunk --version
@tiye
tiye / why-rust-virtual-dom.md
Created June 16, 2024 10:56
Why Rust Virtual DOM, for Respo

Rust 版本的 Virtual DOM

为什么?


React 早期问题

  • JSX 当中表达式
@tiye
tiye / dyn-trait.mbt
Created June 14, 2024 17:48
demonstrage dyn trait object demo in moonbit
trait Eff {
run(Self) -> Unit
}
struct A {
a: Int
} derive (Debug)
fn A::run(self: A)-> Unit {
@tiye
tiye / no-cache.strace
Last active May 19, 2024 11:15
difference loading dylib with/out cache
execve("/home/chen/.cargo/bin/cr", ["cr", "-1"], 0x7fff39f9f308 /* 33 vars */) = 0
brk(NULL) = 0x565054d1e000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd0f18ad000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=87867, ...}) = 0
mmap(NULL, 87867, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fd0f1897000
close(3) = 0
openat(AT_FDCWD, "/lib64/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
@tiye
tiye / coredump.text
Created May 16, 2024 05:48
error from coredump
Program received signal SIGSEGV, Segmentation fault.
alloc::sync::{impl#50}::fmt<dyn core::any::Any, alloc::alloc::Global> (self=0x7fffffff5898, f=0x7fffffff3318) at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/alloc/src/sync.rs:3215
3215 /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/alloc/src/sync.rs: No such file or directory.
(gdb)
@tiye
tiye / core.text
Created May 16, 2024 03:43
sudo dmesg | tail
[13712422.135386] cr[977725]: segfault at 7f663efedd28 ip 000056087a1e2d0d sp 00007ffd5365e698 error 4 in cr[56087a098000+211000]
[13712422.135398] Code: 83 c4 18 5b 41 5c 41 5d 41 5e 41 5f 5d c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f2 48 8b 07 48 8b 08 48 8b 70 08 <48> 8b 46 10 48 ff c8 48 83 e0 f0 48 8d 3c 08 48 83 c7 10 ff 25 0a
@tiye
tiye / quadratic.wgsl
Created May 12, 2024 04:15
quadratic
// https://sequelaencollection.home.blog/3d-chaotic-attractors/
// -0.875, -0.173, 0.307, -0.436, 0.598,
// 0.003, -0.039, 0.96, -0.84, 0.885,
// 0.774, 0.281, -0.015, 0.585, 0.442,
// -0.18, -0.535, -0.151, -0.971, -0.48,
// 0.777, 0.418, 0.185, 0.006, 0.45,
// -0.066, 0.498, 0.142, -0.246, -0.939
const a0 = -0.875; const a1 = -0.173; const a2 = 0.307; const a3 = -0.436; const a4 = 0.598;
const a5 = 0.003; const a6 = -0.039; const a7 = 0.96; const a8 = -0.84; const a9 = 0.885;