// 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 自己目前居然没有一个前端可用):
将 每个 file 压缩为 file.snappy,- 被当作 stdin
将 file 解压缩,默认标准输出
snappy [files]将 每个 file 压缩为 file.snappy,- 被当作 stdin
unsnappy [file] [output]将 file 解压缩,默认标准输出
#learn 学会了什么? 👾
0. 知道自己对
1. 写了第一行这么长又简单易懂的 GNU Makefile...
2. 机制地利用 C 给不使用 std 的 Rust 函数导出弄了个
3. 复习了 Rust,会在不使用外部 crate 和 cargo 和 IDE 的情况下工作
4. 留下了明天不睡到中午就不能平复的倦意...(悲)
0. 知道自己对
f*() 系列文件操作函数、mmap() 和 Rust FFI 还不熟(准确的说对 Rust 整个都不熟,更别提 #![no_std] 了) 1. 写了第一行这么长又简单易懂的 GNU Makefile...
2. 机制地利用 C 给不使用 std 的 Rust 函数导出弄了个
_start 不至于每天 segfault3. 复习了 Rust,会在不使用外部 crate 和 cargo 和 IDE 的情况下工作
4. 留下了明天不睡到中午就不能平复的倦意...(悲)
duangsuse::Echo
(写不下去了(毕竟熬夜太久伤身体啊
突然想到某些 JVM、Ruby 程序员可能会说 "300 多行都写了 3 个小时,真慢啊"
... 拿
还好现在是写 C 版本的 Rust,生命周期什么的考虑得少一些,不然思路绝对要迫真崩坏,惹不起啊
算法要设计半天实现起来也得画啥生命周期图分析...
Crystal 虽然比 Ruby 底层但还是有个 Slice 啊,还是有标准的 OO 类型系统啊,这个 Rust 如果不熟想的话真是要死人啊,不信你们写啊...
写了三个小时真是感觉无法形容 😶...
... 拿
#![no_std] 的 Rust 写这玩意可不止比你们那全自动高端大气上档次 GC 折腾,比完全拿 C 写还折腾...还好现在是写 C 版本的 Rust,生命周期什么的考虑得少一些,不然思路绝对要迫真崩坏,惹不起啊
算法要设计半天实现起来也得画啥生命周期图分析...
Crystal 虽然比 Ruby 底层但还是有个 Slice 啊,还是有标准的 OO 类型系统啊,这个 Rust 如果不熟想的话真是要死人啊,不信你们写啊...
写了三个小时真是感觉无法形容 😶...
duangsuse::Echo
#recommended #kotlin #dev out 等关键字:可以说是写得很好的文档了,易懂 https://www.kotlincn.net/docs/reference/keyword-reference.html
学会了什么? #learn #kotlin
1.
2. Java
3. RGB
6. 知道了可能别人也不知道,就是从 Kotlin 编译器推导的类型抄抄罢了
7.
8. 之前把图片打印倒了的说,一改循环 xy 到 yx 立刻修好
8.5. 我下面说的算法分析能力几乎没有就是指不知道为啥会打印倒 180 度,
9. 累死了
1.
java.imageio 和 java.awt 包部分功能的使用2. Java
URL 类使用3. RGB
Color
4. Kotlin vararg
5. 知道了自己现在还是不知道 Array<out String> 啥意思6. 知道了可能别人也不知道,就是从 Kotlin 编译器推导的类型抄抄罢了
7.
step 和 until 语法8. 之前把图片打印倒了的说,一改循环 xy 到 yx 立刻修好
8.5. 我下面说的算法分析能力几乎没有就是指不知道为啥会打印倒 180 度,
BufferedImage 的 get 是怎么处理的,怎么就倒悬了 (绝望)9. 累死了
总之就是算法分析模拟和理论理解能力还不够强,虽然比以前看着 MapGen 一脸蒙蔽好多了,依然有很大的提升空间,看来天才还是不存在的... 不相信天才... 即使我已经高二了