在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
我为什么学Rust?2019年6月18日,Facebook发布了数字货币Libra的技术白皮书,我也第一时间体验了一下它的智能合约编程语言MOVE,发现这个MOVE是用Rust编写的,看来想准确理解MOVE的机制,还需要对Rust有深刻的理解,所以又开始了Rust的快速入门学习。 欧拉计划看了一下网上有关Rust的介绍,都说它的学习曲线相当陡峭,曾一度被其吓着,后来发现Rust借鉴了Haskell等函数式编程语言的优点,而我以前专门学习过Haskell,经过一段时间的入门学习,我现在已经喜欢上这门神奇的语言。 入门资料我用官方的《The Rust Programming Language》,非常权威,配合着《Rust by example》这本书一起学习,效果非常不错。 学习任何一项技能最怕没有反馈,尤其是学英语、学编程的时候,一定要“用”,学习编程时有一个非常有用的网站,它就是“欧拉计划”,网址:https://projecteuler.net 如果你的英文不过关,有人已经将几乎所有的题目翻译成了中文,网址:http://pe-cn.github.io,本书中的许多题目的描述都照搬了该网站的翻译。 欧拉计划提供了几百道由易到难的数学问题,你可以用任何办法去解决它,当然主要还得靠编程,但编程语言不限,已经有Java、C#、Python、Lisp、Haskell等各种解法,当然直接用google搜索答案就没什么乐趣了。 学习Rust最好先把基本的语法和特性看过一遍,然后就可以动手解题了,解题的过程就是学习、试错、再学习、掌握和巩固的过程,学习进度会大大加快。 题型介绍欧拉计划中的各题都标出了难度系数,以百分数来表示,5%是其中难度最低的,难度最高的为100%,截止到2019年10月10日,难题系数为5%的题共有63道,可以作为Rust的入门练手题。 这些初级难度的题目,主要涉及整除性质、素数、因子、分数、回文数、阶乘、三角数、大整数、数字序列、路径计算、日期、全排列、组合数、初级密码学等方面,通过解这些题,可以了解Rust中的基本数据类型,向量用法,理解Rust中特有的所有权体系,体会函数式编程的思维等。 在欧拉计划的官网上注册账号后,如果得出了某题的正确答案,可以在论坛里参与相关的讨论,看看其他人的解题思路和源代码,获得一些灵感。 下面我把63道题分为几大类,通过研究这些题的解法,我学会了Rust的哪些知识点。 第一部分 小试牛刀这一部分题型相对简单,可以了解Rust的基本数据类型,整数运算、文件读取和字符串操作。
主要的语法知识点:
第二部分 序列根据一定的规则,一个数字可以变换为另一个数字,但最后会收敛到一个特定的值。
主要的语法知识点:
第三部分 因子一个数有质因子,真因子等概念,然后引出了亲和数、盈数等有趣的数字。
主要的语法知识点:
第四部分 素数欧拉是一个数学家,所以欧拉计划中题型以数学题为主,而其中与素数有关的问题特别多。
主要的语法或算法:
第五部分 数字游戏勾股数、幂运算、阶乘、回文等一些数字游戏。
主要的语法知识点:
第六部分 大整数各种编程语言通常都提供64位的整数,表示的最大值为18446744073709551615,也只有20位数字。对于超过这个范围的整数,平常的数据类型就无法进行运算,这时需要用到大整数函数库num-bigint。
主要的语法知识点:
第七部分 路径求不同的路径或者最大路径,学习递归算法和改进算法。
主要的语法和算法:
第八部分 日期只有一道涉及日期的计算。
主要的语法知识点:
第九部分 排列组合学习全排列的几种生成算法。
主要的语法和算法:
第十部分 分数分数可以表示为无限循环小数,不断试除和取余来找循环节。
主要的语法知识点:
第十一部分 三角形数根据一个函数可以生成一系列的整数。
主要的语法或算法:
第十二部分 密码学这里有两道初级的黑客问题。
主要的语法知识点:
小结1、刷题容易上瘾 一开始解题是想快速掌握Rust的语法,前面进展较慢,因为语法不熟,需要边看Rust编程书,边google,边试验才能解决一道题。 在完成了30题左右之后,有点游戏闯关上瘾的感觉,有点题即使5%难度系数,解决起来也并不容易,需要不断找bug或优化算法的性能,当在projecteuler.net上输入答案得到正确反馈的一刻,有一种成功的喜悦。 然后就想会把前50题,前70题全部攻克! 然后就会忘了学Rust的初心,忘了做欧拉题的初心,我是想学MOVE编程语言,我是想学区块链的智能合约编程技术,所以就放慢了刷题的节奏。 写完这63道题的小结,也是将前面学习Rust的过程进行一次小结。后面可能会更新这本PDF书,也可能不会。 2、数学题并不是全部 欧拉计划以数学题为主,对数学或算法感兴趣的朋友,可以拿它练习,如果你学习JAVA、C#、Python等编程语言,拿它练练手,绝对挺有用。 但它的局限性也是显然的,实际的软件项目中几乎很难遇到素数判断、质因子、大整数以及全排列生成的这些算法。你更要学习模块的划分、单元测试的编写、程序的调试的基本技巧,字符串操作、数组排序、字典、哈希表的运用可能更加频繁。 3、函数式编程 现代的编程语言都结合了过程式编程和函数式编程的优点,通过这些例子的练习,你既可以知道通常的过程式算法的写法,也要理解函数式编程的优美和简洁,但在实际项目中又不能为了函数式编程减少几行代码而去刻意地炫技,让程序失去了可维护性。 需要在过程式编程和函数式编程之间达到一种平衡。 4、还得结合其它编程书籍 程序完成了,得到了正确的答案,事情并没有结束,Rust背后的一些原理,仍需要深入地理解,字符串和切片的区别,iter()的背后机制,如果定义宏,所有权的借用关系,这些都还没有掌握。 内容太多,我直接把它写成了一本电子书,下载地址: 链接:https://pan.baidu.com/s/1NRfTwAcUFH-QS8jMwo6pqw 提取码:qfha |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论