duangsuse::Echo
722 subscribers
4.28K photos
130 videos
583 files
6.51K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
再写一个 Bison + Re2c 的“JIT”计算器(当然不是 LLVM)...
duangsuse::Echo
(TODO List 1. chinese.h 2. 整理 GitApk.popf.rip 3. Gekyll 4. 写一些科普什么的 5. RebaseServer
之前的 TODO...
RebaseServer 充当 Laravel 小练手
之前不管啥 *Apk 都凉了的说,是彻底凉了,所以 ApkBundler 一个完全陌生的名字刚刚好,不过那不是最近的事情(但 ABS 是
之后还有 RegularPP
当然这个又依赖 TypedINI、ByteTrie 和我对 LALR 的理解(大佬轻喷
顺带把之前凉掉的 LibAxml 写了(JNI 吧

Chinese.h 已经完成
GitApk 和 Gekyll 打算完成
科普准备写
ApkBundler Scheme 要写
InScript 也打算写
Sticack 可以
MonkeyVMc 计划内
RegularPP
上面教贝塞尔的(之前我一直拼成 bsizer 后来才知道是 bezier 来着
https://en.wikipedia.org/wiki/B%C3%A9zier_curve#Quadratic_B%C3%A9zier_curves

需要的二次方算法,等我学会使用 BMP 图片了再说(懒得继续用 Crystal 的 PNG 库了
#PL #Rust #Web https://kaisery.github.io/trpl-zh-cn/ch20-01-single-threaded.html
Rust 啥时候出了这个 HTTP 服务器演示的说
This media is not supported in your browser
VIEW IN TELEGRAM
好困... 不应该用 no_std 的 Rust 来写的 (暴论)
又一次来到 Rust 面前(...
虽然这次 duangsuse 是稍微了解一点底层的菜鸟工程师(迫真)
但对于 Rust 这种高端语言还是再次学习前都无法驾驭呢
#tech #dev #PL #rust 重新回归 Rust 的怀抱,好耶!

记得 duangsuse 所认识到的第二门语言,就是 Rust。Rust 的中文社区很友好,而且大部分语法都很优雅,也适合进行各种底层操作
/etc/profile 里添加了 #guide

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup

然后再在 .bashrc .zshrc 里添加(如果自动无效的话)

export PATH=$PATH:$HOME/.cargo/bin

再执行

curl https://sh.rustup.rs -sSf | sh

即可获得现烤 Rust toolchain 一份 🍰

no_core 的时候,经常出现 libc 多了一个版本导致无法正常编译的情况,删除 commit 版本旧的那个即可
// main.rs
#![feature(lang_items)]
#![feature(no_core)]

#![feature(libc)]
#![no_core]

extern crate libc;
extern crate core;

use libc::printf;
use core::panic::PanicInfo;

#[no_mangle]
pub unsafe extern "C" fn _main(argc: i32, argv: *const *const u8) -> i32 {
printf("Hello, world!\n\00".as_ptr() as *const i8);
return 0;
}

#[lang = "eh_personality"]
#[no_mangle]
pub extern "C" fn eh_personality() {}

#[panic_handler]
#[no_mangle]
pub extern "C" fn panic_handler(p: &PanicInfo) -> ! {
loop {} // never return
}


// main.c
int _main(int _, char **__);

int main(int argc, char **argv) { return _main(argc, argv); }


# Makefile
RUSTC := rustc # rust compiler
RUSTDOC := rustdoc # rust doc generator

# compiler flags
RUSTCFLAGS := -O --color auto
RUSTDOCFLAGS := -v

# default target
RUSTTARGET := x86_64-unknown-linux-gnu
RUSTCFLAGS := $(RUSTCFLAGS) --target $(RUSTTARGET)

ifeq ($(DEBUG), 1) # use debug info
RUSTCFLAGS := $(RUSTCFLAGS) -g -v
endif

snappy: main.c libsnappy.a
$(CC) $(CFLAGS) $? -o $@
libsnappy.a: main.rs
$(RUSTC) $(RUSTCFLAGS) $? --crate-type staticlib --crate-name snappy


最后目标文件大小 8.7K,我赢了,duangsuse 想(
duangsuse::Echo
// main.rs #![feature(lang_items)] #![feature(no_core)] #![feature(libc)] #![no_core] extern crate libc; extern crate core; use libc::printf; use core::panic::PanicInfo; #[no_mangle] pub unsafe extern "C" fn _main(argc: i32, argv: *const *const u8) ->…
因为今天实在是太晚了... 暂时决定功能如此(因为 snappy 自己目前居然没有一个前端可用):

snappy [files]

将 每个 file 压缩为 file.snappy,- 被当作 stdin

unsnappy [file] [output]

将 file 解压缩,默认标准输出
(写不下去了(毕竟熬夜太久伤身体啊
#learn 学会了什么? 👾

0. 知道自己对 f*() 系列文件操作函数、mmap() 和 Rust FFI 还不熟(准确的说对 Rust 整个都不熟,更别提 #![no_std] 了)
1. 写了第一行这么长又简单易懂的 GNU Makefile...
2. 机制地利用 C 给不使用 std 的 Rust 函数导出弄了个 _start 不至于每天 segfault
3. 复习了 Rust,会在不使用外部 crate 和 cargo 和 IDE 的情况下工作
4. 留下了明天不睡到中午就不能平复的倦意...(悲)