�gӭ���R�ЈD�W(w��ng) Ո | ע��

���] ��ͨRust(��2��)

�����磺�����]늳���������r�g��2021-01-01
�_���� 16�_ 퓔�(sh��)�� 454
�� �D �r:¥104.3(7.5��) ���r  ¥139.0 ��䛺�ɿ������T�r
����ُ��܇ �ղ�
�_������ ȫ�����]
?�½������س���
������Ǖ�����>

��ͨRust(��2��) �����Ϣ

��ͨRust(��2��) ������ɫ

�m�x��Ⱥ ����������Rust���W�ߺ��м�����T���x�ߑ�ԓ�߂�һ���ľ��̻��A��������־�ھ���������������Ч�������ھS�o�Ĵ��a���x����ͨ�^������������Rust���A֪�R�������S���������˽�Rust�ĸ߼�����������Rust���̼���������һ�T��(y��u)�|�ľ����Z�������H�܉���������Ʒ�|��Ч�ʣ�߀���������g�ĘI(y��)�ߵČ��I(y��)���B(y��ng)�� Rust�����•r�������Z����һ�w�������õ���Խ��Խ���_�l(f��)�ߵ�׷���� Rust��ɞ��λ���ߵ��_�l(f��)�ߣ���һ�K��Ҫ�����T�u�� Rust����һ�T�෶ʽ�Z����֧�ֺ���(sh��)ʽ������ʽ�Լ����͵Ⱦ��̷�ʽ��Rust���Z���Ϻ�C++�������߿��١��ɿ�����ȫ�ȃ�(y��u)�����������ṩ���������^C/C++�����ܺͰ�ȫ���C��ͬ�r��Ҳ��һ�N�W���������^ƽ���ğ��T�����Z���� �������Ǟ���W��Rust���̵��x�ߜʂ�ģ�ֻҪ�x�߾߂�һ���ľ��̻��A���Ϳ���ͨ�^����ȫ����˽�Rust���Ժ;����Z������ͨ�^�S���Ĵ��aʾ��������Rust�Č��ü�����

��ͨRust(��2��) ���ݺ���

Rust��һ�Tϵ�y(t��ng)�����Z�ԣ���֧�ֺ���(sh��)ʽ������ʽ�Լ����͵Ⱦ��̷�ʽ�Ķ෶ʽ�Z�ԡ�Rust���Z���Ϻ�C++�����Rust�������ɿ�����ȫ�����ṩ���������^C/C++�����ܺͰ�ȫ���C��ͬ�r��Ҳ��һ�N�W���������^ƽ���ğ��T�����Z�ԡ� �������ݹ�17�����ɜ\������v��Rust���P��֪�R���漰���A�Z����ܛ�������������yԇ���������ϵ�y(t��ng)���ȴ����������̎�������e��������l(f��)ģ�����ꡢ�ⲿ����(sh��)�ӿ����W(w��ng)�j������HTTP����(sh��)��(j��)����WebAssembly��GTK+��ܺ�GDB�{ԇ����Ҫ֪�R�c�� �����m����W��Rust���̵��x����x��ϣ���x���܉�C��C++����Python��һЩ�˽��������S���Ĵ��aʾ����Ԕ�����v���܉�����x�߿������֣���Ч������Rust������

��ͨRust(��2��) Ŀ�

��1�¡�Rust���T 1

1.1��Rust��ʲô���Լ������Ҫ�Pע����1

1.2�����bRust����朡�7

1.3��Rust���顡9

1.3.1����Ԫ��͡�12

1.3.2��׃��•���Ͳ���׃�ԡ�13

1.3.3������(sh��)��14

1.3.4���]����16

1.3.5���ַ�����17

1.3.6���l�����Дࡡ17

1.3.7��match���_ʽ��19

1.3.8��ѭ�h(hu��n)��20

1.3.9���Զ��x��(sh��)��(j��)��͡�22

1.3.10������ϵĺ���(sh��)�ͷ�����27

1.3.11��module��import��use�Z�䡡31

1.3.12�����ϡ�31

1.3.13����������35

1.4�����M�ַ�Ӌ��(sh��)����36

1.5���Y��38

��2��ʹ��Cargo�����Ŀ��39

2.1��ܛ������������40

2.2��ģ�K��40

2.2.1��Ƕ��ģ�K��40

2.2.2�����ļ�����ģ�K��43

2.2.3����Ŀ�����ģ�K��44

2.3��Cargo�ͳ���졡46

2.3.1���½�һ��Cargo�Ŀ��47

2.3.2��Cargo�c��ه헡�48

2.3.3��ʹ��Cargo��(zh��)�Мyԇ��50

2.3.4��ʹ��Cargo�\��ʾ����52

2.3.5��Cargo�����^(q��)��53

2.4��Cargo���ߔUչ��54

2.4.1���������Cargo���b��54

2.4.2��ʹ��clippy��ʽ�����a��56

2.4.3��Cargo.toml����ļ����顡57

2.5���Rust�_�l(f��)�h(hu��n)����60

2.6��ʹ��Cargo����imgtool����63

2.7���Y��66

��3�¡��yԇ���ęn���ͻ����u����67

3.1���yԇ��Ŀ�ġ�67

3.2���M���yԇ��68

3.3����Ԫ�yԇ��71

3.3.1��**����Ԫ�yԇ��71

3.3.2���\�Мyԇ��71

3.3.3�����x�yԇ���a��72

3.3.4�����Ϝyԇ��73

3.3.5�����Ԝyԇ��73

3.4�����ɜyԇ��74

3.4.1��**�����ɜyԇ��74

3.4.2������ͨ�ô��a��76

3.5���ęn��77

3.5.1�������ęn��78

3.5.2�����ɺͲ鿴�ęn��78

3.5.3���й��ęn��79

3.5.4���ęn���ԡ�79

3.5.5���ęn���yԇ��80

3.6�����ʡ�81

3.6.1�����õ�΢�^���ʹ��ߡ�81

3.6.2����(w��n)����Rust�ϵĻ��ʜyԇ��83

3.7�������͜yԇܛ��������߉݋�Tģ�M����86

3.8��CI���ɜyԇ�cTravisCI��90

3.9���Y��93

��4�¡���������ͺ�������94

4.1�����ϵ�y(t��ng)������Ҫ�ԡ�94

4.2�����͡�95

4.2.1����(chu��ng)������#��97

4.2.2�����͌��F(xi��n)��99

4.2.3�����͑��á�100

4.3�������������О顡102

4.3.1��������102

4.3.2�������Ķ�N��ʽ��108

4.4��ʹ�ð������͵��������������^(q��)�g��110

4.4.1������ϵ������^(q��)�g��113

4.4.2�����ͺ���(sh��)��impl���a�K�ϵ������^(q��)�g��114

4.4.3��ʹ�á�+���������M�Ϟ�^(q��)�g��115

4.4.4�������^(q��)�g�cimpl�����Z����116

4.5���˜ʎ��������顡118

4.6��ʹ���������󌍬F(xi��n)�����Ķ��B(t��i)�ԡ�125

4.6.1���ְl(f��)��125

4.6.2����������126

4.7���Y��128

��5�¡��ȴ�����Ͱ�ȫ�ԡ�129

5.1������̓ȴ桡130

5.2���������ʹ�Ãȴ桡131

5.3���ȴ����������132

5.4���ȴ���了�顡133

5.4.1���ї���133

5.4.2���ѡ�135

5.5���ȴ������ȱ�ݡ�136

5.6���ȴ氲ȫ�ԡ�137

5.7���ȴ氲ȫ��ԭ�t��139

5.7.1�����Йࡡ139

5.7.2��ͨ�^����������͡�144

5.7.3�����á�151

5.7.4�����ڽ���Ҏ(gu��)�t�ķ�����͡�156

5.7.5���������ڡ�156

5.8��Rust�е�ָ���͡�164

5.8.1�����á�����ȫ��ָᘡ�164

5.8.2��ԭʼָᘡ�165

5.8.3������ָᘡ�165

5.8.4������Ӌ��(sh��)������ָᘡ�170

5.8.5���Ȳ���׃�Եđ��á�179

5.9���Y��180

��6�¡�����̎����181

6.1������̎�����顡181

6.2���ɻ֏͵Į�����183

6.2.1��Option��183

6.2.2��Result��187

6.3��Option/Result�ĽM�ϡ�191

6.3.1����Ҋ�ĽM������191

6.3.2���M�������á�192

6.3.3��Option��Result���֮�g���D�Q��194

6.4�����緵�غ��\�����������194

6.5�����ɻ֏͵Į�����196

6.6���Զ��x�e�`��Error������199

6.7���Y��204

��7�¡��߼����205

7.1�����ϵ�y(t��ng)���顡205

7.1.1�����a�K�ͱ��_ʽ��206

7.1.2��let�Z�䡡209

7.1.3��ѭ�h(hu��n)������_ʽ��214

7.1.4����(sh��)������е���������Ⱥͷ�̖�^(q��)�֡�215

7.1.5������Ɣࡡ217

7.1.6����̈́e����218

7.2���ַ�����219

7.2.1���������Й���ַ�������String��220

7.2.2�������ַ�������&str��222

7.2.3���ַ�����Ƭ�ͷ։K��223

7.2.4���ں���(sh��)��ʹ���ַ�����225

7.2.5���ַ���ƴ�ӡ�225

7.2.6��&str��String�đ��È�����226

7.3��ȫ��ֵ��227

7.3.1��������227

7.3.2���o�B(t��i)ֵ��227

7.3.3�����g�ں���(sh��)����constfn��228

7.3.4��ͨ�^lazy_static!�ꌢ�o�B(t��i)ֵ�ӑB(t��i)����229

7.4����������230

7.5���߼���͡�235

7.5.1�������L��͡�235

7.5.2������(sh��)��͡�236

7.5.3��never��͡�!���ͺ���(sh��)�ְl(f��)��236

7.5.4��“(li��n)�ϡ�236

7.5.5��Cow��238

7.6���߼�������238

7.6.1��Sized��Sized��238

7.6.2��Borrow��AsRef��238

7.6.3��ToOwned��238

7.6.4��From��Into��239

7.6.5����������͌���ȫ�ԡ�239

7.6.6��ͨ�ú���(sh��)�{���Z����240

7.6.7������Ҏ(gu��)�t��241

7.7���]���M�A��241

7.7.1��Fn�]����241

7.7.2��FnMut�]����242

7.7.3��FnOnce�]����242

7.8���Y���w��ö�e�������еij�����243

7.9��ģ�K��·���͌��롡245

7.9.1�����롡245

7.9.2���ٴΌ�����245

7.9.3���[˽�ԡ�246

7.10���߼�ƥ��ģʽ�����o��246

7.10.1��ƥ�����o��246

7.10.2���߼�let���졡247

7.11����������D�Q��247

7.12������c�ȴ桡248

7.12.1���ȴ挦�R��248

7.12.2��std::memģ�K��249

7.13��ʹ��serde�M�����л��ͷ����л���251

7.14���Y��252

��8�¡����l(f��)��253

8.1�������(zh��)��ģ�͡�253

8.2�����l(f��)��254

8.2.1�����l(f��)������255

8.2.2��ȱ�ݡ�257

8.3��Rust�еIJ��l(f��)��259

8.3.1�����̻��A��259

8.3.2���Զ��x���̡�261

8.3.3���L�������еĔ�(sh��)��(j��)��262

8.4�����̵IJ��l(f��)ģ�͡�264

8.4.1����B(t��i)����ģ�͡�264

8.4.2�����⡡267

8.4.3��ͨ�^Arc��Mutex���F(xi��n)������׃�ԡ�268

8.4.4��ͨ�^��Ϣ���f�M��ͨ�š�270

8.5��Rust�еľ��̰�ȫ��272

8.5.1��ʲô�Ǿ��̰�ȫ��273

8.5.2�����̰�ȫ��������273

8.5.3��Send��274

8.5.4��Sync��274

8.6��ʹ��actorģ�͌��F(xi��n)���l(f��)��274

8.7����������졡277

8.8���Y��278

��9�¡����cԪ���̡�279

9.1��ʲô��Ԫ���̣���279

9.2��Rust��đ��È�����282

9.3��Rust�еĺ꼰����͡�282

9.4��ʹ��macro_rules!��(chu��ng)���ꡡ286

9.5���˜ʎ��еă��úꡡ289

9.6��macro_rules!��Ę�ӛ��͡�290

9.7�����е��؏͡�293

9.8����ĸ߼����á�����HashMap�ij�ʼ������DSL��295

9.9�����������������yԇ��296

9.10��������298

9.11���^�̺ꡡ299

9.12�������ꡡ300

9.13���{ԇ�����306

9.14�����õ��^�̺�ܛ������306

9.15���Y��307

��10�²���ȫ��Rust���ⲿ����(sh��)�ӿڡ�308

10.1����ȫ�c����ȫ��308

10.1.1������ȫ�ĺ���(sh��)�ʹ��a�K��311

10.1.2������ȫ�������͌��F(xi��n)��314

10.2����Rust���{��C���a��316

10.3��ͨ�^C�Z���{��Rust���a��319

10.4����Rustʹ���ⲿC/C++����졡322

10.5��ʹ��PyO3����ԭ��Python�Uչ��325

10.6����Rust�О�Node.js��(chu��ng)��ԭ���Uչ��328

10.7���Y��332

��11����־��333

11.1����־ӛ䛼�����Ҫ�ԡ�333

11.2����־ӛ䛿�ܵ�����335

11.3����־ӛ䛿�ܼ������ԡ�335

11.4����־ӛ䛷�����337

11.4.1���ǽY������־ӛ䛡�337

11.4.2���Y������־ӛ䛡�338

11.5��Rust�е���־ӛ䛡�338

11.5.1��log������Rust��־ӛ��ṩ���^��339

11.5.2��env_logger��340

11.5.3��log4rs��342

11.5.4��ʹ��slog�M�нY������־ӛ䛡�344

11.6���Y��350

��12��Rust�c�W(w��ng)�j���̡�351

12.1���W(w��ng)�j���̺��顡351

12.2��ͬ���W(w��ng)�jI/O��354

12.3�������W(w��ng)�jI/O��361


12.3.1��Rust�еĮ�������362


12.3.2������������Redis��������364


12.4���Y��368

��13����Rust����Web����369

13.1��Rust�е�Web���á�369

13.2����hyper�M��HTTPͨ�š�370

13.2.1��hyper��������API��������һ���̾W(w��ng)ַ���ա�371

13.2.2������͑��˵�hyper��������һ��URL�̾W(w��ng)ַ�͑��ˡ�374

13.2.3��Web��ܡ�376

13.3��actix-web���A֪�R��377

13.4��ʹ��actix-web����һ������API��377

13.5���Y��387

��14��Rust�c��(sh��)��(j��)�졡388


14.1����(sh��)��(j��)�־��Ե���Ҫ�ԡ�388

14.2��SQLite��390

14.3��PostgreSQL��395

14.4��r2d2�B�ӳء�399

14.5��Postgres��dieselORM��401

14.6���Y��408

��15��Rust�cWebAssembly��409


15.1��ʲô��WebAssmbly��409

15.2��WebAssembly���OӋĿ�ˡ�412

15.3��WebAssembly���T��412

15.3.1���ھ��Lԇ��413

15.3.2������WebAssembly�ķ�����413

15.4��Rust��WebAssembly��414

15.4.1��Wasm-bindgen��414

15.4.2������WebAssembly�Ŀ��421

15.5���Y��422

��16��Rust�c���摪�á�423


16.1��GUI�_�l(f��)���顡423

16.2��GTK+��ܡ�424

16.3��ͨ�^gtk-rs����һ����„����摪�ó���425

16.4��������437

16.5���������d��UI��ܡ�437

16.6���Y��438


�ڡ�17�� �{ԇ��439

17.1���{ԇ���顡439

17.1.1���{ԇ�����A��440

17.1.2���{ԇ���țQ�l����441

17.1.3������GDB��442

17.1.4��һ��ʾ�����򡪡�buggie��442

17.1.5��GDB���A֪�R��443

17.1.6����Visual Studio Code���GDB��448

17.2��rr�{ԇ�����顡452

17.3���Y��454

չ�_ȫ��

��ͨRust(��2��) ���ߺ���

������.ɳ����Rahul Sharma�������̽̌Wһֱ��M�������^ȥ������һֱ�ڏ���ܛ���_�l(f��)���P�Ĺ����������_�l(f��)Servo�r�_ʼ���|Rust��Servo����Mozilla Research��˾�_�l(f��)�Ğg�[�����棬������GSoC�Ŀ��һ������Ŀǰ����š��AtherEnergy��˾�����ڞ����ܻ���܇�������Ե��ƻ��A�ܘ��������dȤ���I�����ϵ�y(t��ng)�������ֲ�ʽϵ�y(t��ng)�����g���������Փ�ȡ���Ҳ��Rust��^(q��)���ؼs׫����������Mozilla��Servo�Ŀ��ָ���������� �f�_.�P���S����Vesa Kaihlavirta����5�q����_ʼ���|�����������Ǐ�C64 BASIC�_ʼ���T��������š�I(y��)Ŀ�������ܛ�������I����_�l(f��)�ߌ������Z�Ժ�ܛ���|�����J�R������һ���Y���Linux�_�l(f��)�ˆT�������ѽ�(j��ng)����źͽ����ИI(y��)������10����VesaĿǰס�ڷ��m�в���Jyvaskyla��

��Ʒ�uՓ(0�l)
���o�uՓ����
�������]
����N
��݋���]
����픲�
�ЈD�W(w��ng)
�ھ��ͷ�