forked from chenzomi12/AISystem
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path04.srt
1660 lines (1245 loc) · 27.3 KB
/
04.srt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1
00:00:00,000 --> 00:00:04,000
[字幕生成:BLACK 字幕校对:志宇]
2
00:00:07,000 --> 00:00:10,700
今天来分享一下LLVM的架构和原理
3
00:00:10,700 --> 00:00:15,100
那LLVM里面最重要是架构设计非常独特
4
00:00:15,100 --> 00:00:18,400
在前两天有很多朋友去问我
5
00:00:18,400 --> 00:00:23,000
你讲这个传统编译器跟AI编译器有什么关系?
6
00:00:23,000 --> 00:00:26,300
你到底还要不要讲AI编译器?
7
00:00:27,000 --> 00:00:28,200
ZOMI是这么看的
8
00:00:28,200 --> 00:00:30,700
首先需要去了解传统编译器
9
00:00:30,700 --> 00:00:34,500
因为AI编译器它是基于传统编译器之上去构建的
10
00:00:34,500 --> 00:00:39,600
或者部分参考借鉴了非常多传统编译器的概念
11
00:00:39,600 --> 00:00:43,600
在这里面不期望通过10分钟能把所有东西都介绍完毕
12
00:00:43,600 --> 00:00:48,500
而是通过一个系列慢慢的去给大家去普及各种各样的概念
13
00:00:48,500 --> 00:00:54,100
也给大家汇报一下AI系统、AI编译器最新进展和发展动态
14
00:00:54,100 --> 00:00:55,500
在最开始的时候
15
00:00:55,500 --> 00:00:59,000
苹果基于开源软件GCC开了一个分支
16
00:00:59,000 --> 00:01:01,000
叫做Apple GCC Bench
17
00:01:01,000 --> 00:01:04,000
Apple GCC Bench由苹果去维护
18
00:01:04,000 --> 00:01:07,800
而GCC这个Master由开源组织去维护
19
00:01:07,800 --> 00:01:13,800
一个商业线一个开源线就会引起非常大的冲突和矛盾
20
00:01:13,800 --> 00:01:16,800
苹果的商业Bench有时候会开发一些新的特性
21
00:01:16,800 --> 00:01:18,800
这些新的特性等稳定之后
22
00:01:18,800 --> 00:01:21,600
它希望合回去开源Bench里面
23
00:01:21,600 --> 00:01:23,800
但是开源Bench里面有一些新特性
24
00:01:23,800 --> 00:01:27,800
有时候苹果这个商业分支想把这些新的特性引进来
25
00:01:27,800 --> 00:01:30,800
而两个分支之间不是完全对等的
26
00:01:30,800 --> 00:01:34,300
所以越到后面版本管理就越来越乱
27
00:01:34,300 --> 00:01:36,500
这时候成本就上去了
28
00:01:36,500 --> 00:01:39,800
第二个缺点就是用户用起来就会觉得很别扭
29
00:01:39,800 --> 00:01:42,800
为什么有些特性我在GCC上面是有的
30
00:01:42,800 --> 00:01:47,000
有些特性我在苹果的Apple Bench里面没有呢
31
00:01:47,000 --> 00:01:49,000
你给翻译翻译
32
00:01:49,000 --> 00:01:51,000
什么叫惊喜
33
00:01:51,000 --> 00:01:53,500
翻译翻译什么叫惊喜
34
00:01:53,500 --> 00:01:55,000
为了解决这个问题
35
00:01:55,000 --> 00:01:57,000
苹果就引入了一个大牛
36
00:01:57,000 --> 00:01:58,000
Chris Nutton
37
00:01:58,000 --> 00:02:02,000
可以看到蓝颜不管是18岁还是48岁的时候
38
00:02:02,000 --> 00:02:03,500
样子都是没怎么变的
39
00:02:03,500 --> 00:02:05,000
还是有那么几条皱纹
40
00:02:05,000 --> 00:02:07,000
这边还是那么几条皱纹
41
00:02:07,000 --> 00:02:10,000
区别就在于他的头发更黄了
42
00:02:10,000 --> 00:02:12,000
额头更加蹭亮了
43
00:02:12,000 --> 00:02:14,000
苹果现在大部分的软硬件体系
44
00:02:14,000 --> 00:02:19,000
都是基于LLVM这个编译套装来去开发的
45
00:02:19,000 --> 00:02:21,000
刚才所给大家汇报的内容
46
00:02:21,000 --> 00:02:24,500
都是苹果基于商业线索考虑所布局的一些内容
47
00:02:24,500 --> 00:02:28,500
但是在技术上需要考虑哪些东西呢
48
00:02:28,500 --> 00:02:30,000
高瞻远瞩一下
49
00:02:30,000 --> 00:02:31,000
作为一个技术人
50
00:02:31,000 --> 00:02:33,500
肯定要了解技术相关的东西
51
00:02:33,500 --> 00:02:37,500
为什么LLVM能够逐步的代替掉GCC
52
00:02:37,500 --> 00:02:40,000
LLVM又有哪些好处呢
53
00:02:40,000 --> 00:02:42,000
在一个古老的传说里面
54
00:02:42,000 --> 00:02:44,500
有一个对编译器的定义
55
00:02:44,500 --> 00:02:47,000
人们常说编译器分为三段
56
00:02:47,000 --> 00:02:48,000
第一段是前端
57
00:02:48,000 --> 00:02:49,500
第二段是中间优化
58
00:02:49,500 --> 00:02:51,500
第三段是后端
59
00:02:51,500 --> 00:02:54,500
通常来说这三段的边界是非常分明的
60
00:02:54,500 --> 00:02:57,000
但是在实际的实现过程当中
61
00:02:57,000 --> 00:03:00,000
这三段的分界并没有这么明显
62
00:03:00,000 --> 00:03:01,500
例如GCC
63
00:03:01,500 --> 00:03:04,500
可以看到GCC里面的一个C的前端
64
00:03:04,500 --> 00:03:07,500
是直接对应到多个后端
65
00:03:07,500 --> 00:03:11,000
中间是没有通过所谓的IR去提取的
66
00:03:11,000 --> 00:03:13,000
前端直接跟后端怼到一起
67
00:03:13,000 --> 00:03:17,000
前端跟后端没有做好一个非常明确的分界
68
00:03:17,000 --> 00:03:19,000
没有做好一个非常明确的分界
69
00:03:19,000 --> 00:03:20,500
这就会引起一个什么问题呢
70
00:03:20,500 --> 00:03:22,000
在这里面看一下
71
00:03:22,000 --> 00:03:25,500
这个是Computer Language的一个技术栈
72
00:03:25,500 --> 00:03:27,500
计算机语言又分为很多种
73
00:03:27,500 --> 00:03:29,500
有种叫做High Level的Language
74
00:03:29,500 --> 00:03:31,000
就是高级语言了
75
00:03:31,000 --> 00:03:33,000
像Python、Javascript、VB
76
00:03:33,000 --> 00:03:34,500
这些是高级语言
77
00:03:34,500 --> 00:03:37,000
这些大部分都是在前端的工程师
78
00:03:37,000 --> 00:03:39,500
AI的工程师里面去用的
79
00:03:39,500 --> 00:03:41,500
另外还有一些Middle Level的Language
80
00:03:41,500 --> 00:03:45,500
就是C++、C、Object C、Swift这些
81
00:03:45,500 --> 00:03:48,000
在低级一点还可以有机器码
82
00:03:48,000 --> 00:03:50,000
然后再往下硬件指令
83
00:03:50,000 --> 00:03:53,500
还有System C、HDL等不同的硬件
84
00:03:53,500 --> 00:03:57,500
不同的硬件要对应不同的工程师去做的
85
00:03:57,500 --> 00:04:00,500
假设按照GCC这个套路
86
00:04:00,500 --> 00:04:02,500
每一个前端都对应到后端
87
00:04:02,500 --> 00:04:07,000
这意味着对工程师的要求就是非常的严格
88
00:04:07,000 --> 00:04:08,500
首先我作为一个工程师
89
00:04:08,500 --> 00:04:10,500
我需要去懂前端的语言
90
00:04:10,500 --> 00:04:12,000
我还要懂中间的优化
91
00:04:12,000 --> 00:04:14,500
接着我还要懂硬件的指令
92
00:04:14,500 --> 00:04:15,500
如果我都做到了
93
00:04:15,500 --> 00:04:17,000
我还坐在这里给你们分享
94
00:04:17,000 --> 00:04:18,000
给你们汇报
95
00:04:18,000 --> 00:04:19,000
给你们讲
96
00:04:19,000 --> 00:04:20,000
内容干嘛了
97
00:04:20,000 --> 00:04:21,000
我已经躺赢了
98
00:04:21,000 --> 00:04:23,000
我早就已经年薪百万了
99
00:04:23,000 --> 00:04:24,000
然并卵
100
00:04:24,000 --> 00:04:26,000
我现在还是很苦逼的
101
00:04:26,000 --> 00:04:27,000
没什么关注
102
00:04:27,000 --> 00:04:29,000
然后才给你们做一些简单的分享
103
00:04:29,000 --> 00:04:31,000
就是希望能够有一天
104
00:04:31,000 --> 00:04:32,000
看到我的光明
105
00:04:32,000 --> 00:04:33,000
看到我的领导
106
00:04:33,000 --> 00:04:35,000
能看到我的视频
107
00:04:35,000 --> 00:04:37,000
然后给我一个表扬
108
00:04:38,000 --> 00:04:40,000
你无情你无耻你无理取闹
109
00:04:40,000 --> 00:04:43,000
那你就不无情不无耻不无理取闹吗
110
00:04:43,000 --> 00:04:46,000
LVM提出了一个非常光明的概念
111
00:04:46,000 --> 00:04:47,000
就是IR
112
00:04:47,000 --> 00:04:49,000
所谓的中间表达
113
00:04:49,000 --> 00:04:50,000
C语言对接到IR
114
00:04:50,000 --> 00:04:52,000
C++语言也对接到IR
115
00:04:52,000 --> 00:04:54,000
Word语言对接到IR
116
00:04:54,000 --> 00:04:55,000
包括Java PHP Go
117
00:04:55,000 --> 00:04:57,000
也对接到IR里面
118
00:04:57,000 --> 00:04:58,000
那这个时候连线
119
00:04:58,000 --> 00:05:01,000
就比刚才少了非常的多
120
00:05:01,000 --> 00:05:02,000
编译器前端的工程师
121
00:05:02,000 --> 00:05:04,000
想要新增加一种语言
122
00:05:04,000 --> 00:05:07,000
只需要去了解IR的基本概念就可以了
123
00:05:07,000 --> 00:05:08,000
然后呢
124
00:05:08,000 --> 00:05:09,000
中间的优化
125
00:05:09,000 --> 00:05:10,000
中间的优化他也不需要了解
126
00:05:10,000 --> 00:05:12,000
底层的优化他也不需要了解
127
00:05:12,000 --> 00:05:13,000
而IR呢又对接到
128
00:05:13,000 --> 00:05:14,000
X86 ARM Mixed
129
00:05:14,000 --> 00:05:17,000
Visca C PowerPC等不同的硬件上面
130
00:05:17,000 --> 00:05:20,000
假设华为新增加了一个鲲鹏的硬件
131
00:05:20,000 --> 00:05:21,000
那这个时候呢
132
00:05:21,000 --> 00:05:23,000
只需要对接到这个IR里面
133
00:05:23,000 --> 00:05:25,000
后端的硬件工程师呢
134
00:05:25,000 --> 00:05:26,000
只需要把寄存器
135
00:05:26,000 --> 00:05:27,000
硬件调度
136
00:05:27,000 --> 00:05:28,000
指令调度
137
00:05:28,000 --> 00:05:29,000
这些对接到IR上面
138
00:05:29,000 --> 00:05:32,000
就可以在LVM这个编译体系里面呢
139
00:05:32,000 --> 00:05:34,000
新增加一个硬件了
140
00:05:34,000 --> 00:05:35,000
所以说非常简单
141
00:05:35,000 --> 00:05:38,000
IR的出现了极大的革命了
142
00:05:38,000 --> 00:05:40,000
整个编译体系的概念
143
00:05:40,000 --> 00:05:41,000
再往下看
144
00:05:41,000 --> 00:05:44,000
看看LLVM的一个很重要的特点
145
00:05:44,000 --> 00:05:46,000
就是LibBase LLVM
146
00:05:46,000 --> 00:05:50,000
LLVM基于库来去设计的一个概念
147
00:05:50,000 --> 00:05:53,000
下面看到LLVM所支持的库非常多
148
00:05:53,000 --> 00:05:54,000
刚才已经提到了
149
00:05:54,000 --> 00:05:57,000
LLVM它是一个工具集合
150
00:05:57,000 --> 00:05:58,000
所以这里面呢可以看到
151
00:05:58,000 --> 00:05:59,000
它的前头有C-Lon
152
00:05:59,000 --> 00:06:00,000
有LLDB
153
00:06:00,000 --> 00:06:02,000
还有libc
154
00:06:02,000 --> 00:06:05,000
OpenMP等非常多的工具
155
00:06:05,000 --> 00:06:08,000
去帮助构建整个编译器
156
00:06:08,000 --> 00:06:09,000
在这里面呢
157
00:06:09,000 --> 00:06:10,000
可能很多朋友听过Clang
158
00:06:10,000 --> 00:06:12,000
但是很少人可能会听过下面的
159
00:06:12,000 --> 00:06:14,000
因为大家在工作的当中
160
00:06:14,000 --> 00:06:15,000
可能就不会涉及到
161
00:06:15,000 --> 00:06:16,000
但是你涉及到的时候
162
00:06:16,000 --> 00:06:18,000
你就会发现这些工作
163
00:06:18,000 --> 00:06:19,000
把它揭露出来是非常方便
164
00:06:19,000 --> 00:06:20,000
你去学习
165
00:06:20,000 --> 00:06:21,000
而不需要去学习
166
00:06:21,000 --> 00:06:25,000
1500万行代码的GCC
167
00:06:25,000 --> 00:06:27,000
看1500万行代码
168
00:06:27,000 --> 00:06:29,000
你开我玩笑
169
00:06:34,000 --> 00:06:35,000
那现在来看看
170
00:06:35,000 --> 00:06:36,000
什么是LLVM啊
171
00:06:36,000 --> 00:06:37,000
刚才其实讲了很多
172
00:06:37,000 --> 00:06:39,000
LLVM的一些很牛逼的东西
173
00:06:40,000 --> 00:06:41,000
但LLVM呢
174
00:06:41,000 --> 00:06:42,000
你可以说它是一个编译器
175
00:06:42,000 --> 00:06:43,000
你也可以说
176
00:06:43,000 --> 00:06:44,000
它是一个编译器的前端
177
00:06:44,000 --> 00:06:45,000
你可以说
178
00:06:45,000 --> 00:06:47,000
它是一个编译器的工具集合
179
00:06:47,000 --> 00:06:49,000
或者它是一个编译器的工具链
180
00:06:49,000 --> 00:06:50,000
但实际上
181
00:06:50,000 --> 00:06:51,000
现在为止啊
182
00:06:51,000 --> 00:06:53,000
LLVM的整个项目呢
183
00:06:53,000 --> 00:06:54,000
已经发展成为一个
184
00:06:54,000 --> 00:06:56,000
非常巨大非常庞大的
185
00:06:56,000 --> 00:06:59,000
编译器相关的工具集合
186
00:06:59,000 --> 00:07:02,000
LLVM作为一个编译器的套装
187
00:07:03,000 --> 00:07:06,000
而不要把LLVM这个名字翻译出来
188
00:07:06,000 --> 00:07:07,000
LLVM的全称呢
189
00:07:07,000 --> 00:07:10,000
叫做Low Level Virtual Machine
190
00:07:10,000 --> 00:07:12,000
低层次的虚拟器
191
00:07:12,000 --> 00:07:13,000
这个名字呢
192
00:07:13,000 --> 00:07:14,000
其实已经不符合
193
00:07:14,000 --> 00:07:16,000
LLVM现在的一个定义了
194
00:07:17,000 --> 00:07:18,000
调侃完之后呢
195
00:07:18,000 --> 00:07:19,000
接着真正的来看看
196
00:07:19,000 --> 00:07:22,000
LLVM跟GCC的一个最重要的区别
197
00:07:23,000 --> 00:07:24,000
刚才已经说了
198
00:07:24,000 --> 00:07:26,000
需要实现一个新的语言
199
00:07:26,000 --> 00:07:29,000
LLVM只需要新增一个编译器的前端
200
00:07:29,000 --> 00:07:31,000
去复用优化阶段和后端
201
00:07:32,000 --> 00:07:33,000
而GCC呢
202
00:07:33,000 --> 00:07:34,000
前后端没有很好的结构
203
00:07:34,000 --> 00:07:36,000
所以都搞成一块了
204
00:07:36,000 --> 00:07:37,000
变成一坨了
205
00:07:37,000 --> 00:07:39,000
如果要支持N个目标机器
206
00:07:39,000 --> 00:07:40,000
和M种语言
207
00:07:40,000 --> 00:07:43,000
就需要M乘以M种编译器了
208
00:07:43,000 --> 00:07:45,000
这时候对挑战是非常多的
209
00:07:45,000 --> 00:07:46,000
第二个优点呢
210
00:07:46,000 --> 00:07:48,000
就是LLVM的组件呢
211
00:07:48,000 --> 00:07:49,000
都非常独立
212
00:07:49,000 --> 00:07:51,000
而且还独立成库了
213
00:07:51,000 --> 00:07:53,000
这个特性呢就非常方便呢
214
00:07:53,000 --> 00:07:54,000
LLVM或者独立的库呢
215
00:07:54,000 --> 00:07:56,000
在整个编译的Pip line里面
216
00:07:56,000 --> 00:07:59,000
去集成和优化各种各样的Path
217
00:07:59,000 --> 00:08:02,000
后面讲到的AI编译器
218
00:08:02,000 --> 00:08:04,000
也离不开这种概念
219
00:08:04,000 --> 00:08:05,000
有些编译器呢
220
00:08:05,000 --> 00:08:07,000
会直接附用LLVM的后端
221
00:08:07,000 --> 00:08:08,000
有些编译器呢
222
00:08:08,000 --> 00:08:10,000
就参考接近LLVM的这种方式
223
00:08:10,000 --> 00:08:13,000
所以说它已经成为一个通用的基础结构了
224
00:08:13,000 --> 00:08:14,000
那GCC呢
225
00:08:14,000 --> 00:08:15,000
最大的问题就是
226
00:08:15,000 --> 00:08:18,000
饱受分层和抽象的一个困扰
227
00:08:18,000 --> 00:08:19,000
整个编译器呢
228
00:08:19,000 --> 00:08:23,000
依赖于命令行的设置和全局的数据结构
229
00:08:23,000 --> 00:08:24,000
在这里面呢
230
00:08:24,000 --> 00:08:26,000
吐槽了很多GCC的缺点
231
00:08:26,000 --> 00:08:28,000
但是GCC的优点还是很多的
232
00:08:28,000 --> 00:08:30,000
所以你不要觉得GCC已经没人用了
233
00:08:30,000 --> 00:08:31,000
GCC已经过时了
234
00:08:31,000 --> 00:08:32,000
这种idea
235
00:08:32,000 --> 00:08:34,000
它其实并不成立
236
00:08:34,000 --> 00:08:36,000
只是说它有它的缺点
237
00:08:36,000 --> 00:08:39,000
把LLVM的优点跟GCC的缺点来比
238
00:08:39,000 --> 00:08:41,000
那肯定会觉得LLVM好嘛
239
00:08:41,000 --> 00:08:43,000
但是GCC也有自己的优点
240
00:08:43,000 --> 00:08:45,000
在上一个视频里面呢
241
00:08:45,000 --> 00:08:46,000
已经给大家分享完了
242
00:08:46,000 --> 00:08:48,000
只是这里面强调一下
243
00:08:48,000 --> 00:08:50,000
大家不要先入为主
244
00:08:50,000 --> 00:08:54,000
看了LLVM优点就觉得GCC不好嘞
245
00:08:54,000 --> 00:08:55,000
那往这个图可以看到
246
00:08:55,000 --> 00:08:57,000
左边的这个就是粘土
247
00:08:57,000 --> 00:08:58,000
有点类似于GCC
248
00:08:58,000 --> 00:09:00,000
我可能就一块一块的
249
00:09:00,000 --> 00:09:01,000
然后面积比较大
250
00:09:01,000 --> 00:09:02,000
很难进行组装