自定义程序
1 subscriber
73 photos
15 videos
5 files
251 links
自定义程序丰富生活
Download Telegram
Forwarded from Rust 视界
用 Rust 实现 HTSP 协议

作者其实在2017年就用Rust实现了一版,现在新写了一篇文章,讲他如何用最新的异步语法来升级了之前的程序,记录下这个过程中的心得体会。HTSP 协议是 [TVHeadend](https://tvheadend.org/) 支持的一种流媒体协议。

[Read More](https://www.rubdos.be/rust/async/programming/2019/06/22/implementing-htsp-in-rust.html)
[Read More 2](https://www.rubdos.be/rust/2017/02/01/implementing-htsp-in-rust.html)
Forwarded from Rust 视界
使用 Rust 写一个 Proxy,作者感言 Rust 是编程界的未来

作者写 proxy 的目的是为了代理 API 请求和一系列的中间件服务。在写作过程中,感觉 Rust 很好,很好,很好~~~~

甚至自己做了一个EVA的图?虽然有点丑。

![img](https://cdn-images-1.medium.com/max/1600/1*EvEmKng9aZ7q_UdlERWQEg.jpeg)

[Read More](https://medium.com/@terry.raimondo/writing-a-proxy-in-rust-and-why-it-is-the-language-of-the-future-265d8bf7c6d2)
Forwarded from .
@reverseSearchBot
刚发现的一个 GIF 反向搜索引擎,支持图片表情多种格式反向搜索,输入该里番 GIF 立马返回了节目信息以及时间戳
Forwarded from .
https://lagunita.stanford.edu 使用斯坦福的在线教育系统一周花费 40 个小时一年内读完斯坦福学生的计算机课程
Forwarded from .
写下我的读后笔记

简历和作品集哪个重要?
如今的计算机专业以及数学专业依然使用简历招刚毕业的大学生,但是简历往往不代表一个学生的真实实力;每个计算机科学专业学生都应该做一个作品集:可以是一个博客,可以是一个 Github 开源项目,项目连接项目让更多人知道。对开源社区做出贡献,这样可以告诉公司你的能力,而往往计算机专业学生的 GPA 和简历并不能证明学生的实力如何。

技术性交流
公司里程序员们相互需要交流代码的 Bug 和性能问题等等,然后提交给上层,所以往往沟通能力和交流技巧很重要;在一些小公司里工程师和上层一旦传达的信息出现了偏差,后果很危险。

个人建议
建议个人熟练掌握一种演示工具,PPT 什么的都行,Markdown,LaTex 语言这样的,然后课堂作业,以后提交文档的时候可以写出清晰美观的文档。

一些建议阅读的书籍
Writing for Computer Science by Zobel
Even a Geek Can Speak by Asher
The LaTeX Companion
The TeXbook by Knuth // LaTeX 重度使用者读物
Mathematical Writing
How to Give a Good Research Talk
My advice on how to send and reply to email

———

工程
计算机科学和工程学不是一回事,但是很接近,工程师会和计算机科学家合作,所以需要一种植根于实际分析,线性代数,和概率,物理学的语言;计算机科学家应该通过使用学习电磁学来学物理学,但是如果要做到这一点需要学习多元微积分,微分方程。在构建声音模拟时,掌握概率和(通常是)线性代数是非常宝贵的。在解释结果时,没有什么能替代对统计数据的深刻理解。

推荐阅读书籍
Calculus by Spivak
All of Statistics: A Concise Course in Statistical Inference

———

Unix 哲学
计算机科学家应该熟悉并实践Unix的计算哲学。
Unix哲学(与Unix本身相反)强调通过语言抽象和组合来实现计算。
实际上,这意味着熟悉命令行计算、文本文件配置和无理想软件开发的概念。

- 导航和操作文件系统
- Shell 的原始创作
- 熟练使用emacs 和 vim
- 为软件项目创建、修改和执行 Makefile
- 学会简单的 Shell 脚本

推荐阅读书籍
The Unix Programming Environment by Kernighan and Pike
The Linux Programming Interface: A Linux and UNIX System Programming Handbook
Unix Power Tools by Powers, Peek, O'Reilly and Loukides
commandlinefu
Linux Server Hacks
The single Unix specification

———

系统管理
系统的安全问题我们也可以自学,不需要专门找寻系统管理员

每一位现代计算机科学家都应该能够:
安装并管理Linux发行版。
配置和编译Linux内核。
排除与dig、ping和traceroute的连接故障。
编译和配置像apache这样的web服务器。
编译和配置类似bind的DNS守护进程。
使用文本编辑器维护web站点。
剪断并卷曲网络电缆。

推荐阅读
UNIX and Linux System Administration Handbook
Forwarded from Rust 视界
「Rust异步之书」中文翻译

#async #book

感谢 @huangjj的分享

[Read More](https://huangjj27.github.io/async-book/index.html)
Forwarded from Rust 视界
cheats.rs 一个整洁的Rust备忘录
#rust

[cheats.rs](https://cheats.rs)是一个Rust资料备忘录网站,记载了常见Rust知识点、文档、工具等等,有了它可以把一大堆书签删掉了。夜间模式下 Ferris 的眼神蠢萌蠢萌的。

[Read More](https://cheats.rs/)
Forwarded from Rust 视界
【工具】vulkan-tutorial-rs 编程语言练习工具

#rust

[@timkofu](https://twitter.com/timkofu) 看完 The Book 后想找一个类似 [pythonchallenge.com](https://t.co/Q0vzcnTU9S) 网站,通过做一些编程练习学习 Rust,网友给他推荐了以下几个网站:

* [vulkan-tutorial-rs](https://github.com/bwasty/vulkan-tutorial-rs)
* [www.codewars.com](https://www.codewars.com/)
* [exercism.io](https://exercism.io)

刚学 Rust 不知道该做些什么项目的同学可以看看,顺便推荐[issuehub.com](http://issuehub.io),可以用“rust + help wanted”来搜索Rust 相关的开源项目,帮助开源项目解决issue也是一种练习方式。

[Read More](https://twitter.com/timkofu/status/1158415111394123776)
Forwarded from Rust 视界
十年Cpp程序员学了三个月Rust之后的感想

#cpp

文章不长,用作者的话来总结:与其把Rust看作是一门语言,倒不如将其看作是一个生态系统。他对Rust这个生态系统未来的成长感到非常excited。

- Facebook用Rust写区块链: Libra
- Goolge用Rust写操作系统: Fuchsia
- 亚马逊用Rust写虚拟化技术: FireCracker
- 微软推,崇业界都应该使用Rust语言。

看见了吗? 四大巨头的未来主要核心业务都交给或准备交给Rust了。

这也是这个10年Cpp程序员开始学习Rust的原因:未来。

Read More: [https://blog.aclysma.com/my-first-three-months-with-rust/](https://blog.aclysma.com/my-first-three-months-with-rust/)
Forwarded from Rust 视界
「SO问答」对超过240个元素的数组进行循环时,为什么会有很大的性能影响?

#stackoverflow

问题:

> 下面代码当 CAPACITY >= 240 的时候,与 CAPACITY >= 239 相比,性能慢了80倍。Rust编译器专门为240以内的长度做了优化? 使用 rustc -C opt-level=3 进行编译。

rust
use std::time::Instant;

const CAPACITY: usize = 240;
const IN_LOOPS: usize = 500000;

fn main() {
let mut arr = [0; CAPACITY];
for i in 0..CAPACITY {
arr[i] = i;
}
let mut sum = 0;
let now = Instant::now();
for _ in 0..IN_LOOPS {
let mut s = 0;
for i in 0..arr.len() {
s += arr[i];
}
sum += s;
}
println!("sum:{} time:{:?}", sum, now.elapsed());
}


解答:

> 总结:低于240,LLVM完全展开内部循环,可以优化掉重复循环,增加性能。

分析:

> 这是一个神奇的阈值,超过该阈值LLVM将停止执行某些优化。阈值是 8字节* 240 = 1920字节 (数组是usizes数组,因此长度乘以8字节,假设 x86-64 CPU)。在该问题中的基准测试中,是仅针对长度239执行的一个特定优化,所以导致了巨大的性能差异。

比如这段代码:

rust
pub fn foo() -> usize {
let arr = [0; 240];
let mut s = 0;
for i in 0..arr.len() {
s += arr[i];
}
s
}


你在 [godbolt](https://rust.godbolt.org/z/VKL9MS) 编辑器中查看生成的汇编代码,比较240和239,会发现有很大区别。比如当239的时候生成:

rust
movdqa xmm1, xmmword ptr [rsp + 32]
movdqa xmm0, xmmword ptr [rsp + 48]
paddq xmm1, xmmword ptr [rsp]
paddq xmm0, xmmword ptr [rsp + 16]
paddq xmm1, xmmword ptr [rsp + 64]
; more stuff omitted here ...
paddq xmm0, xmmword ptr [rsp + 1840]
paddq xmm1, xmmword ptr [rsp + 1856]
paddq xmm0, xmmword ptr [rsp + 1872]
paddq xmm0, xmm1
pshufd xmm1, xmm0, 78
paddq xmm1, xmm0


就是所谓的循环展开: LLVM将循环体粘贴一段时间,以避免执行那些“循环管理指令”,即循环变量的增量,检查循环是否结束和跳转。(可以自行对比一下240的输出)。但是,即便循环不展开,也不会造成80倍的性能差异。所以,实际上那个性能测试代码嵌套循环导致的(LLVM生成的代码基本上首先只执行内部循环(计算总和),然后通过多次累加总和来模拟外部循环!)。最好要使用Rust的惯用法: `arr.iter().sum()`,这样就不会产生80倍的性能差异了。

Read More: [https://stackoverflow.com/questions/57458460/why-is-there-a-large-performance-impact-when-looping-over-an-array-over-240-elem](https://stackoverflow.com/questions/57458460/why-is-there-a-large-performance-impact-when-looping-over-an-array-over-240-elem)