در این مطلب، ویدئو OCaml 2021 – OCaml و Python: بدست آوردن بهترین های هر دو دنیا با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:20:40
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:01,421 –> 00:00:03,250
– سلام، اسم من لوران است.
2
00:00:03,250 –> 00:00:07,490
من به عنوان محقق در
خیابان جین در دفتر لندن کار می کنم.
3
00:00:07,490 –> 00:00:10,240
امروز، من
قصد دارم در مورد تجربه خود در
4
00:00:10,240 –> 00:00:14,140
استفاده از OCaml و Python
با هم در خیابان جین با شما صحبت کنم،
5
00:00:14,140 –> 00:00:17,313
امیدوارم
از هر زبان بهترین استفاده را ببریم.
6
00:00:18,990 –> 00:00:20,800
احتمالاً قبلاً آن را میشناسید،
7
00:00:20,800 –> 00:00:23,270
اما خیابان جین یک فروشگاه Ocaml است.
8
00:00:23,270 –> 00:00:26,200
ما اکثراً برای همه چیز از OCaml استفاده می کنیم
9
00:00:26,200 –> 00:00:30,510
و چیزهای زیادی
در مورد آن لذت می بریم.
10
00:00:30,510 –> 00:00:33,640
به عنوان مثال، ما
11
00:00:33,640 –> 00:00:35,840
برای تضمین برخی از متغیرهای ثابت، به سیستم نوع OCaml بسیار متکی هستیم.
12
00:00:35,840 –> 00:00:37,760
بسیار شگفت انگیز است
13
00:00:37,760 –> 00:00:40,200
که بتوانید برخی از سیستم های حیاتی را بازسازی کنید
14
00:00:40,200 –> 00:00:42,720
و به کامپایلر تکیه کنید تا شما را
15
00:00:42,720 –> 00:00:45,763
در مکان هایی از
کد که باید اصلاح کنید متوقف کند.
16
00:00:47,050 –> 00:00:49,100
عملکرد OCaml
17
00:00:49,100 –> 00:00:53,380
هنگام استفاده از باینری های بومی نیز بسیار خوب است،
و حتی بهتر از آن،
18
00:00:53,380 –> 00:00:56,593
نمایه های عملکرد
نسبتاً آسان قابل درک هستند.
19
00:00:58,180 –> 00:01:00,990
پایتون در انتهای دیگر
طیف قرار دارد.
20
00:01:00,990 –> 00:01:03,460
نسخه پیشفرض تفسیر
21
00:01:03,460 –> 00:01:06,193
میشود و
مرتبهای کندتر از OCaml است.
22
00:01:07,378 –> 00:01:08,928
همچنین هیچ بررسی نوع وجود ندارد،
23
00:01:09,780 –> 00:01:11,480
و استدلال
24
00:01:11,480 –> 00:01:13,890
در مورد کتابخانه های بزرگ در پایتون
25
00:01:13,890 –> 00:01:16,240
و تضمین
درستی رفتار آنها بسیار دشوار است.
26
00:01:18,100 –> 00:01:20,202
پس چرا باید از پایتون استفاده کنیم؟
27
00:01:20,202 –> 00:01:22,913
در
واقع چندین مزیت برای آن وجود دارد.
28
00:01:25,010 –> 00:01:27,770
پایتون در
چند
29
00:01:27,770 –> 00:01:31,550
سال گذشته به استاندارد واقعی برای تجزیه و تحلیل داده ها تبدیل شده است.
30
00:01:31,550 –> 00:01:34,430
نحو سبک وزن آن،
استفاده از آن را بسیار آسان می کند،
31
00:01:34,430 –> 00:01:38,540
و دارای
اکوسیستم پررونقی از کتابخانه ها
32
00:01:38,540 –> 00:01:41,230
برای محاسبات عددی، ترسیم
33
00:01:41,230 –> 00:01:42,833
، یادگیری ماشین و غیره است.
34
00:01:44,520 –> 00:01:47,390
یک روش رایج برای انجام
تجزیه و تحلیل داده ها در
35
00:01:47,390 –> 00:01:48,933
پایتون استفاده از برخی نوت بوک ها است.
36
00:01:49,770 –> 00:01:52,400
تجربه در آنجا بسیار تعاملی است.
37
00:01:52,400 –> 00:01:54,140
شما فقط سعی کنید کد را
38
00:01:54,140 –> 00:01:56,610
با نگاه کردن به خروجی فعلی تنظیم کنید،
39
00:01:56,610 –> 00:01:59,163
تا زمانی که آنچه را که انتظار دارید تولید کند.
40
00:02:00,300 –> 00:02:04,530
وقتی صحبت
از خواندن یک فایل CSV،
41
00:02:04,530 –> 00:02:06,880
استخراج یک سری زمانی از داده ها
42
00:02:06,880 –> 00:02:10,720
و ترسیم سریع آن و محاسبه
43
00:02:10,720 –> 00:02:13,890
شاخص های آماری روی آن می شود،
44
00:02:13,890 –> 00:02:17,563
انجام بهتر
از این تجربه نوت بوک بسیار سخت است.
45
00:02:19,760 –> 00:02:23,890
به طور کلی،
با استفاده از OCaml کاملاً متفاوت است.
46
00:02:23,890 –> 00:02:27,840
بیشتر، پایتون به
عنوان کد چسب
47
00:02:27,840 –> 00:02:30,053
بین کتابخانه های مختلف استفاده می شود.
48
00:02:31,130 –> 00:02:34,350
و در مورد ما، بیشتر برای نوشتن کدهایی است
49
00:02:34,350 –> 00:02:37,533
که به
زودی پس از استفاده کنار گذاشته می شوند.
50
00:02:38,990 –> 00:02:41,970
انجام این کار در OCaml بسیار آزاردهنده خواهد بود،
51
00:02:41,970 –> 00:02:45,690
زیرا شما باید
تمام موارد لبه را
52
00:02:45,690 –> 00:02:50,517
تا زمانی که کامپایلر باینری را تولید کند مدیریت کنید.
53
00:02:52,320 –> 00:02:55,280
در پایتون، میتوانید
54
00:02:55,280 –> 00:02:58,270
تنها بر روی بیتهایی که به آنها اهمیت میدهید تمرکز کنید.
55
00:02:58,270 –> 00:03:00,570
اگرچه بدیهی است که
شلیک
56
00:03:00,570 –> 00:03:02,063
به پای خود در این موقعیت آسان تر است.
57
00:03:03,960 –> 00:03:05,897
بنابراین هدف ما این است که از پایتون
58
00:03:05,897 –> 00:03:09,090
برای این تجربه توسعه سریع و تعاملی
استفاده کنیم،
59
00:03:09,090 –> 00:03:11,000
اما این کار را با سرویسها
60
00:03:11,870 –> 00:03:13,790
و کتابخانههای OCaml که قوی هستند
61
00:03:13,790 –> 00:03:16,953
و مقیاس خوبی دارند و
عملکرد بسیار سریعتری دارند، پشتیبان میدهیم.
62
00:03:20,340 –> 00:03:23,230
بنابراین مفسر استاندارد پایتون
cPython نامیده می شود.
63
00:03:23,230 –> 00:03:26,390
در واقع یک api C بسیار زیبا دارد
64
00:03:26,390 –> 00:03:27,913
که می تواند در OCaml پیچیده شود.
65
00:03:28,820 –> 00:03:30,697
برای این کار، ما به pyml،
66
00:03:31,550 –> 00:03:33,910
که یک کتابخانه منبع باز است، تکیه می کنیم.
67
00:03:33,910 –> 00:03:37,010
ما چندین کتابخانه در بالای آن ساخته ایم
68
00:03:37,010 –> 00:03:39,470
تا برای مورد استفاده اصلی خود،
69
00:03:39,470 –> 00:03:42,203
که فراخوانی کد OCaml از پایتون است، بهینه سازی کنیم.
70
00:03:43,810 –> 00:03:46,323
این در واقع به روش زیر عمل می کند.
71
00:03:47,490 –> 00:03:50,623
ما
کد OCaml را به عنوان یک کتابخانه مشترک کامپایل می کنیم
72
00:03:52,410 –> 00:03:54,490
و سپس پایتون این کتابخانه مشترک را بارگیری می کند
73
00:03:55,700 –> 00:03:59,233
و نقطه پایانی را که
زمان اجرا OCaml را شروع می کند فراخوانی می کند.
74
00:04:01,010 –> 00:04:03,233
سپس کد OCaml شروع به اجرا می
75
00:04:04,186 –> 00:04:08,060
کند و
ماژول ها و توابع مختلف را
76
00:04:08,060 –> 00:04:10,363
با استفاده از این api پایتون C ثبت می کند.
77
00:04:11,570 –> 00:04:14,593
پس از انجام این کار،
کنترل به پایتون برمیگردد
78
00:04:15,691 –> 00:04:18,670
و کد پایتون
میتواند از این توابع استفاده کند
79
00:04:18,670 –> 00:04:21,370
بدون اینکه بداند واقعاً
80
00:04:21,370 –> 00:04:23,243
به کد OCaml متکی هستند.
81
00:04:25,000 –> 00:04:26,790
یک نکته مهم هنگام طراحی
82
00:04:26,790 –> 00:04:28,500
این تعامل پایتون-ocaml
83
00:04:28,500 –> 00:04:30,870
این است که میخواهیم بتوانیم
84
00:04:30,870 –> 00:04:33,513
بیشتر کدها را در OCaml
85
00:04:34,850 –> 00:04:37,660
بنویسیم، زیرا تجربه بیشتری
با این زبان داریم
86
00:04:38,650 –> 00:04:42,600
و همچنین به این دلیل که در
کل تمرینهای بهتری داریم.
87
00:04:42,600 –> 00:04:45,550
مانند تست واحد مناسب، تست
88
00:04:45,550 –> 00:04:48,493
یکپارچه
سازی مداوم، استقرار مداوم،
89
00:04:49,760 –> 00:04:53,410
و استفاده از OCaml برای همه اتصالات ما
90
00:04:53,410 –> 00:04:57,450
باعث می شود که این ارتباط بسیار
خوبی با سیستم های موجود ما داشته باشد
91
00:04:57,450 –> 00:05:01,210
و همچنین به طور کلی برای
92
00:05:01,210 –> 00:05:03,413
تقویت استحکام راه اندازی خوب است.
93
00:05:04,700 –> 00:05:08,590
همانطور که گفته شد، ما همچنین تلاش قابل توجهی را
94
00:05:08,590 –> 00:05:12,933
برای
اصطلاحی کردن توابع در معرض Python انجام دادیم.
95
00:05:13,990 –> 00:05:17,543
به عنوان مثال، ما به طور
خودکار برخی از اسناد را تولید می
96
00:05:18,670 –> 00:05:22,080
کنیم، سعی می کنیم به خوبی با
کتابخانه های پایتون موجود
97
00:05:22,080 –> 00:05:25,883
مانند numpy یا پانداهایی
که بسیار مورد استفاده قرار می گیرند، ادغام کنیم.
98
00:05:28,870 –> 00:05:32,710
کتابخانه اصلی
که برای نوشتن این پیوندها استفاده می کنیم
99
00:05:32,710 –> 00:05:33,760
Python_lib نام دارد.
100
00:05:34,999 –> 00:05:37,760
pyml را گسترش می دهد و راه آسانی
101
00:05:37,760 –> 00:05:40,163
برای تعریف توابع پایتون از OCaml ارائه می دهد.
102
00:05:41,000 –> 00:05:43,613
می توانید نمونه ای را
در این اسلاید مشاهده کنید.
103
00:05:44,640 –> 00:05:46,940
ابتدا، در بالای این اسلاید
104
00:05:46,940 –> 00:05:49,550
، سمت Python چیزها را دارید،
105
00:05:49,550 –> 00:05:53,145
جایی که ما یک ماژول
به نام “ocaml” را وارد می کنیم
106
00:05:53,145 –> 00:05:56,013
که در سمت Ocaml تعریف شده است.
107
00:05:57,710 –> 00:06:00,140
و تابع “approx_pi” را
108
00:06:00,140 –> 00:06:03,113
در این ماژول با آرگومان عدد صحیح فراخوانی می کنیم.
109
00:06:04,620 –> 00:06:07,000
سپس می توانید کد OCaml
110
00:06:07,000 –> 00:06:09,603
را که برای
تولید این اتصالات استفاده شده است را مشاهده کنید.
111
00:06:11,000 –> 00:06:14,180
در python_lib، ما یک تابع کاربردی را در معرض دید
112
00:06:14,180 –> 00:06:16,300
قرار می دهیم که تعریف آرگومان
113
00:06:16,300 –> 00:06:18,210
مورد استفاده توسط تابع را آسان می کند.
114
00:06:18,210 –> 00:06:20,460
در این حالت یک آرگومان موقعیتی واحد
115
00:06:20,460 –> 00:06:23,460
به نام n از نوع عدد صحیح داریم.
116
00:06:24,803 –> 00:06:29,803
این تابع کاربردی
از آرگومانهای کلیدواژه،
117
00:06:29,820 –> 00:06:32,200
آرگومانهایی با مقادیر پیشفرض پشتیبانی میکند
118
00:06:32,200 –> 00:06:35,140
و به بررسی
جامع بودن کمک میکند، یعنی
119
00:06:35,140 –> 00:06:37,450
اینکه همه
آرگومانهای لازم پاس شدهاند،
120
00:06:37,450 –> 00:06:40,770
و هیچ آرگومان اضافی ارسال نمیشود
121
00:06:40,770 –> 00:06:45,023
و در
صورت وجود هر گونه اشتباه، پیامهای خطای خوبی را برمیگرداند.
122
00:06:47,010 –> 00:06:50,030
سپس مقداری
مقدار را در سمت OCaml
123
00:06:50,030 –> 00:06:52,680
بر اساس این آرگومان n محاسبه می کنیم.
124
00:06:52,680 –> 00:06:55,693
و در نهایت، می توانید
یک
125
00:06:56,550 –> 00:07:00,670
فراخوانی python_of_float را مشاهده کنید که float OCaml حاصل
126
00:07:00,670 –> 00:07:02,273
را به مقدار پایتون تبدیل می کند.
127
00:07:04,210 –> 00:07:07,570
سپس در پایین
، مقداری کد سطح بالایی دارید
128
00:07:07,570 –> 00:07:10,040
که ماژول “ocaml” را ایجاد می کند
129
00:07:10,040 –> 00:07:13,063
و سپس
تابع “approx_pi” را به آن متصل می کند.
130
00:07:14,770 –> 00:07:17,410
یکی از بیت های دشوار
تبدیل به عقب و جلو
131
00:07:17,410 –> 00:07:19,640
بین مقادیر پایتون و OCaml است.
132
00:07:19,640 –> 00:07:21,380
در این مثال، ما فقط
133
00:07:21,380 –> 00:07:23,463
مقادیر بسیار ساده ای را برای تبدیل مشاهده کرده ایم،
134
00:07:24,330 –> 00:07:29,330
اما انجام این کار
هنگام تبدیل مقادیر پیچیده دشوارتر است.
135
00:07:30,340 –> 00:07:33,330
به عنوان مثال،
رکوردهای OCaml به طور طبیعی
136
00:07:33,330 –> 00:07:37,340
با استفاده از رشته به عنوان کلید به دیکشنری های پایتون نگاشت می شوند،
137
00:07:37,340 –> 00:07:40,030
اما انجام چنین تبدیلی به صورت دستی
138
00:07:40,030 –> 00:07:42,050
بسیار دشوار خواهد بود.
139
00:07:42,050 –> 00:07:45,200
بنابراین، در عوض، ما یک پسوند ppx
140
00:07:45,200 –> 00:07:49,093
برای کمک به خودکارسازی این فرآیند نوشتیم.
141
00:07:51,440 –> 00:07:55,350
این پسوند ppx را می
توان برای حاشیه نویسی هر نوع استفاده کرد
142
00:07:55,350 –> 00:07:58,220
و دو تابع ایجاد می کند:
143
00:07:58,220 –> 00:08:02,740
of_python که
برای ورودی یک شی پایتون
144
00:08:02,740 –> 00:08:05,780
و تبدیل آن به نوع هدف استفاده می شود
145
00:08:05,780 –> 00:08:08,770
و to_python که برعکس
می شود
146
00:08:08,770 –> 00:08:12,053
و هدف را تبدیل می کند.
به یک شی پایتون تایپ کنید.
147
00:08:13,310 –> 00:08:16,390
همه انواع اصلی به
طور خودکار
148
00:08:16,390 –> 00:08:19,710
به نوع معادل در طرف دیگر نگاشت می شوند.
149
00:08:19,710 –> 00:08:24,710
و همچنین یک
حاشیه نویسی @python.default
150
00:08:24,810 –> 00:08:27,520
داریم تا برخی از فیلدها اختیاری باشند
151
00:08:27,520 –> 00:08:29,000
و مقداری پیش فرض دریافت کنند.
152
00:08:29,000 –> 00:08:32,780
این بسیار مفید است،
زیرا از
153
00:08:32,780 –> 00:08:37,363
نیاز کاربر پایتون به پر کردن
تمام فیلدهای مورد انتظار جلوگیری می کند.
154
00:08:39,530 –> 00:08:43,039
یکی از بیت های مشکل،
رمزگذاری انواع OCaml است،
155
00:08:43,039 –> 00:08:45,873
زیرا هیچ معادل واضحی
در سمت پایتون وجود ندارد.
156
00:08:47,100 –> 00:08:51,170
در حال حاضر، کاری که ppx
انجام می دهد این است که از یک جفت استفاده کند
157
00:08:51,170 –> 00:08:52,800
که در آن اولین عنصر جفت
158
00:08:52,800 –> 00:08:55,393
نام سازنده به عنوان رشته
159
00:08:56,470 –> 00:08:59,100
و آرگومان دوم
160
00:08:59,100 –> 00:09:01,200
جفت، آرگومان های سازنده باشد.
161
00:09:02,770 –> 00:09:05,080
ما تمایل زیادی به استفاده از آن نداریم،
162
00:09:05,080 –> 00:09:06,970
بنابراین بیشتر اوقات از
163
00:09:06,970 –> 00:09:09,441
افشای انواعی که شامل انواع مختلف هستند اجتناب می کنیم
164
00:09:09,441 –> 00:09:12,358
و سعی می کنیم بیشتر به رکوردها تکیه کنیم.
165
00:09:15,056 –> 00:09:18,080
بنابراین اشاره کردیم که
از python_lib برای نمایش
166
00:09:18,080 –> 00:09:21,730
طیف گسترده ای از کتابخانه ها
و خدمات در پایتون استفاده می کنیم.
167
00:09:21,730 –> 00:09:24,033
در واقع، ما در این مرحله کمی بیش
168
00:09:24,033 –> 00:09:26,073
از 35 مورد از آنها را در معرض دید قرار داده ایم
169
00:09:27,180 –> 00:09:29,653
و یکی از این کتابخانه
ها کاملاً خاص است.
170
00:09:30,780 –> 00:09:33,900
این api توپلوپ است.
171
00:09:33,900 –> 00:09:37,800
بنابراین این کتابخانه
که توسط کامپایلر OCaml ارائه میشود، به
172
00:09:37,800 –> 00:09:39,410
شما امکان میدهد تا به راحتی
173
00:09:39,410 –> 00:09:42,250
حلقههای خواندنی-ایوال-چاپ بسازید.
174
00:09:44,400 –> 00:09:46,543
با قرار دادن آن در پایتون،
175
00:09:47,550 –> 00:09:50,280
می توانید یک رشته پایتون
176
00:09:50,280 –> 00:09:54,663
که حاوی مقداری
کد OCaml است به آن منتقل کنید و سپس آن را ارزیابی کنید.
177
00:09:56,150 –> 00:09:59,620
بنابراین ما چنین اتصالاتی را کنار هم قرار داده
178
00:09:59,620 –> 00:10:03,730
ایم و از جادوی Jupyter نیز استفاده کرده ایم.
179
00:10:03,730 –> 00:10:06,140
بنابراین در سمت راست اسلاید،
180
00:10:06,140 –> 00:10:07,593
تعدادی سلول Jupyter را می بینید.
181
00:1