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

شکل ۱. زبان برنامه‌نویسی موجو
شکل ۱. زبان برنامه‌نویسی موجو
منتشر شده در infoworld به تاریخ ۷ ژوئن ۲۰۲۳
لینک منبع: A first look at the Mojo language

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

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

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

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

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

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

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

قواعد ساختاری زبان موجو در مقابل پایتون

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

نامزدهای بهترین مکان برای کار در فناوری اطلاعات در سال ۲۰۲۴ باز هستند

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

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

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

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

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

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

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

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

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

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

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

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

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

این متن با استفاده از ربات ‌ترجمه مقالات برنامه‌نویسی ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.
مقالات لینک‌شده در این متن می‌توانند به صورت رایگان با استفاده از مقاله‌خوان ترجمیار به فارسی مطالعه شوند.