۳۰ آذر ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

نگاه اول به زبان موجو

هدف Mojo این است که استفاده از پایتون آسان باشد، اما به اندازه Rust قدرتمند و سریع باشد. در اینجا اولین نگاهی به جدیدترین رقیب پایتون داریم.

هدف Mojo این است که استفاده از پایتون آسان باشد، اما به اندازه Rust قدرتمند و سریع باشد. در اینجا اولین نگاهی به جدیدترین رقیب پایتون داریم.

زبان Mojo که به تازگی رونمایی شده است، به عنوان بهترین دنیاهای مختلف تبلیغ می شود: سهولت استفاده و نحو واضح Python، با سرعت و ایمنی حافظه Rust.

این ادعاها جسورانه هستند، و از آنجایی که Mojo هنوز در مراحل اولیه توسعه است، مدتی طول می کشد تا کاربران بتوانند خودشان ببینند که چگونه زبان مطابق با آنها است. اما مبتکر Mojo – شرکتی به نام Modular – دسترسی زودهنگام به یک زمین بازی آنلاین را فراهم کرده است: یک محیط Jupyter Notebook که در آن کاربران می توانند کد Mojo را اجرا کنند و در مورد ویژگی ها و رفتار زبان بیاموزند.

از آنجایی که Mojo هنوز به‌عنوان یک دانلود کاربر نهایی در دسترس نیست، این نگاه اول بر این موضوع تمرکز دارد که Mojo به عنوان یک زبان چگونه است. ما بررسی خواهیم کرد که چگونه به پایتون شباهت دارد، چگونه متفاوت است، و چه چیزی برای برنامه نویسی که با پایتون یا زبان های دیگر آشناست ارائه می دهد.

مبانی زبان موجو

Mojo را می توان به عنوان یک “ابر مجموعه” پایتون توصیف کرد. برنامه‌های نوشته شده در پایتون، برنامه‌های موجو معتبر هستند، اگرچه برخی از رفتارهای پایتون هنوز پیاده‌سازی نشده‌اند. برخی از نمونه‌هایی از رفتار پایتون که در حال حاضر در پایتون پیدا نمی‌کنید، آرگومان‌های کلمه کلیدی برای توابع، کلمه کلیدی global و درک list و dict هستند. . همچنین می‌توان از زمان اجرای واقعی پایتون برای کار با ماژول‌های موجود پایتون استفاده کرد، اگرچه هزینه‌ای برای عملکرد وجود دارد.

وقتی Mojo دستور جدیدی را معرفی می‌کند، برای ویژگی‌های برنامه‌نویسی در سطح سیستم، عمدتاً مدیریت دستی حافظه است. به عبارت دیگر، می‌توانید کد پایتون (یا چیزی تقریباً شبیه آن) را برای موارد استفاده معمولی بنویسید، سپس از Mojo برای سناریوهای برنامه‌نویسی پیشرفته‌تر و با عملکرد فشرده‌تر استفاده کنید. در هر دو مورد، می‌توانید از کتابخانه‌های پایتون موجود استفاده کنید، اما هزینه عملکرد بالاتر است.

8 ویژگی جدید جاوا اسکریپت که ممکن است از دست داده باشید

تفاوت بزرگ دیگر Mojo با پایتون این است که Mojo از طریق زمان اجرا تفسیر نمی شود، همانطور که پایتون است. Mojo با استفاده از Toolchain LLVM در کدهای بومی ماشین کامپایل شده است. برای این منظور، بهترین عملکرد با استفاده از ویژگی‌های خاص Mojo حاصل می‌شود. ویژگی‌های پایتون احتمالاً به قیمت شبیه‌سازی رفتارهای پویای پایتون است که ذاتاً کند هستند – یا دوباره فقط با استفاده از زمان اجرا پایتون.

موجو در مقابل نحو پایتون

بسیاری از ویژگی‌های زبان مادری Mojo یکی از دو کار را انجام می‌دهند. آنها یا ویژگی‌های کاملا جدیدی هستند که اصلاً در پایتون یافت نمی‌شوند، یا بسط یک ویژگی پایتون هستند که عملکرد آن را بیشتر می‌کنند، اگرچه پویایی کمتری در پایتون دارند.

به عنوان مثال، در پایتون، هیچ راهی برای اعلام رسمی یک مرجع غیرقابل تغییر در زمان اجرا وجود ندارد، اگرچه نوع hinting و مکانیسم‌های دیگر می‌توانند این را در زمان ویرایش تقلید کنند. در Mojo، می‌توانید از کلیدواژه‌های let و var برای اعلام متغیرهای خاص Mojo استفاده کنید، تقریباً به همان روشی که در Rust انجام می‌دهید. کلمه کلیدی let نشان می دهد که یک متغیر تغییرناپذیر است. var نشان می دهد که قابل تغییر است. این محدودیت‌ها در زمان کامپایل اعمال می‌شوند، بنابراین برنامه‌هایی که سعی می‌کنند منابع تغییرناپذیر را تغییر دهند حتی کامپایل نمی‌شوند.

Mojo syntax

نحو Mojo به شدت شبیه پایتون است، اما کلمات کلیدی جدیدی را برای فعال کردن ویژگی‌های خاص Mojo مانند رفتارهای متغیر ارائه می‌دهد.

موجو همچنین کلمه کلیدی struct خود را دارد که در تضاد با class پایتون است. کلاس ها فقط کلاس های پایتون هستند، با تمام رفتارهای پویا (و آهسته) که انتظار دارید. با این حال، انواع struct بیشتر شبیه همتایان C/C++ و Rust خود هستند، با طرح‌بندی‌های ثابتی که در زمان کامپایل تعیین می‌شوند، اما برای سرعت اصلی ماشین بهینه شده‌اند.

یک کلمه کلیدی دیگر Mojo که برای تشخیص رفتارهای Mojo از Python طراحی شده است fn است. اگر از def برای تعریف یک تابع استفاده کنید، یک تابع پایتون با تمام پویایی مرتبط با چنین چیزهایی دریافت خواهید کرد. کلمه کلیدی fn یک تابع را نیز تعریف می کند، اما به عنوان یک تابع Mojo. این بدان معناست که آرگومان‌ها به‌طور پیش‌فرض غیرقابل تغییر هستند و باید به صراحت تایپ شوند، و همه متغیرهای محلی باید اعلان شوند (از جمله موارد دیگر).

TypeScript 5.3 با پشتیبانی از ویژگی های import وارد می شود

زمین بازی مدولار

اگر می‌خواهید بدانید که کار کردن با Mojo در حال حاضر چگونه است، باید یک شماره بگیرید و در صف قرار بگیرید. Modular دسترسی زودهنگام به Mojo را از طریق Modular Playground، یک محیط نوت بوک مبتنی بر وب Jupyter که بر روی سرور Modular اجرا می شود، ارائه می دهد. در حال حاضر، Mojo یک زمان اجرا برای دانلود در سیستم شخصی خود ندارد. نکته مثبت این است که می توانید Mojo را از طریق هر رایانه ای با مرورگر وب اجرا کنید.

محیط آنلاین Mojo با چند نوت بوک نمونه همراه با یادداشت های درون خطی دقیق در مورد استفاده از Mojo برای کارهای خاص ارائه می شود. یکی از مثال‌ها، نسخه‌ی نمایشی برنامه‌نویس معمولی است که الگوریتم مجموعه مندلبرو را ترسیم می‌کند. در یک نگاه، کد بسیار شبیه پایتون است. حتی کلمات کلیدی جدید مخصوص Mojo به خوبی با نحو موجود پایتون ادغام می‌شوند، بنابراین می‌توانید کد را پایین بیاورید و یک ایده کلی از آنچه اتفاق می‌افتد به دست آورید.

این نسخه نمایشی همچنین نحوه استفاده از ماژول های موجود پایتون را به عنوان بخشی از گردش کار Mojo نشان می دهد. ریاضی واقعی در Mojo پردازش می‌شود، سپس در یک آرایه به سبک numpy رندر می‌شود و برای رندر به matplotlib، یک کتابخانه C ارسال می‌شود. به عبارت دیگر، در حالی که این نسخه نمایشی از کتابخانه‌های پایتون قدیمی استفاده می‌کند، همه چیزهایی که به عملکرد حساس هستند در Mojo یا C هستند، بنابراین قطعات پایتون یک گلوگاه مهم نیستند – که کم و بیش مانند زمانی است که پایتون به خوبی استفاده می‌شود.

زمین بازی مدولار برای موجو

زمین بازی Mojo در حال اجرا، اجرای نمایشی طرح مندلبرو. کد مورد استفاده برای تولید این نسخه نمایشی ترکیبی از کد بومی Mojo و کتابخانه‌های Python است که از طریق رابط Mojo به زمان اجرا پایتون فراخوانی شده است.

نمایش‌های نوت‌بوک همچنین مثال‌هایی از این که چگونه کد Mojo را می‌توان از طریق موازی‌سازی، بردارسازی، و “کاشی‌کاری” (افزایش محل حافظه پنهان برای عملیات) شتاب داد، ارائه می‌دهد. یکی از نسخه‌های نمایشی، یک نسخه نمایشی ضرب ماتریس ۱۲۸×۱۲۸، افزایش سرعت ادعایی ۱۷ برابری را در پایتون (با استفاده از زمان اجرا پایتون در زمین بازی Mojo) با اجرای آن‌طور که هست بدون هیچ تغییر خاصی انجام داد. موجو با افزودن حاشیه نویسی نوع، سرعت ۱۸۶۶ برابر، با افزودن عملیات بردار شده، ۸۵۰۰ برابر و با افزودن موازی سازی، سرعت ۱۵۰۰۰ برابر را اضافه کرد.

نوک کوه یخ علم داده

دوباره، بهترین راه برای تأیید این ادعاها این است که Mojo به صورت محلی در دسترس باشد، اما ارزش آن را دارد که هم زمان اجرای Python و هم کامپایلر Mojo را در یک کد در کنار هم آزمایش کنید تا ببینید چه اتفاقی می‌افتد.

آیا موجو می تواند جایگزین پایتون شود؟

اولین برنامه های عمومی برای Mojo موردی برای آن به عنوان زبانی برای علم داده و یادگیری ماشین ایجاد کرد. این دو موضوع بخش بزرگی از کاربرد مدرن پایتون را تشکیل می‌دهند – نه به این دلیل که پایتون سریع است، بلکه به این دلیل که یک رابط برنامه‌نویسی مناسب برای چیزهای سریعی که استفاده از آن‌ها به سختی است، فراهم می‌کند.

مجوو واضح است که قصد دارد نسخه‌ای سریع و پیش‌فرض از آن مورد استفاده را ارائه دهد، که در آن لازم نیست برای سریع کردن کارها به کتابخانه‌های خارجی دسترسی داشته باشید. چیزی که موجو، حداقل نه در این اوایل، به دنبال آن نیست، مجموعه گسترده‌تر موارد استفاده پایتون است: پایان‌های وب، اتوماسیون فرآیند و غیره. ممکن است بعداً، زمانی که Mojo کامل‌تر شود و مجموعه بهتری از کتابخانه‌های شخص ثالث داشته باشد، اما واضح است که این اولین کار نیست.

حتی اگر موجو به‌طور پیش‌فرض سریع‌تر باشد، جایگزین کردن حضور پایتون در یادگیری ماشین و علم داده دشوار خواهد بود. جامعه کاربران پایتون، فرهنگ موجود نرم افزار و راحتی، همه آن را به یکی از پایه های اصلی این زمینه ها تبدیل کرده است. موجو باید برای جایگزینی پایتون برای آن کار، کاری بیش از سریع بودن انجام دهد. با این حال، جالب است که ببینیم Mojo چگونه در مسیرهای سازگار با پایتون و موارد استفاده با سرعت بالا به توسعه خود ادامه می‌دهد.