لحظه ها

مطالب جورواجور


هایلو (Hylo): زبان سیستم‌های ایمن که نه راست است، نه C++، نه هیچ چیز دیگری

در دنیای زبان‌های برنامه‌نویسی سیستم‌ها، همه به دنبال یافتن جام مقدس هستند: امنیت حافظه بدون فدا کردن سرعت و بدون پیچیدگی دیوانه‌وار. ++C به شما سرعت می‌دهد اما با تفنگی که روی شقیقه‌تان گذاشته شده. راست امنیت را با انضباطی آهنین تحمیل می‌کند، اما سیستم مالکیت (Ownership) آن چنان سختگیر است که هفته‌ها و ماه‌ها طول می‌کشد تا مغزتان با آن سازگار شود.

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

این زبان هایلو (Hylo) است. نامی جدید برای زبانی که قبلاً Val نام داشت و در سال ۲۰۲۳ نسخه ۰.۱ آن به صورت متن‌باز منتشر شد. در این مقاله، این رویکرد انقلابی را می‌شکافیم.


بخش اول: مشکل دوبخشی مدیریت حافظه


بخش اول: مشکل دقیقاً چیست؟ (بدهی فنی در مقیاس سیاره‌ای)

++C زبانی است که در طول بیش از ۴۰ سال تکامل یافته. این تکامل، لایه‌های بی‌پایانی از پیچیدگی، قوانین استثنا، و رفتارهای تعریف‌نشده (Undefined Behavior) را روی هم انباشته است. کمیته استاندارد ++C تلاش می‌کند زبان را مدرن کند، اما مجبور است همواره با حجم عظیم کدهای قدیمی سازگار باقی بماند. این یعنی بهبودهای بنیادین تقریباً غیرممکن است.

از سوی دیگر، زبان‌های مدرنی مثل Rust، Swift و Go ظهور کرده‌اند که بسیار ایمن‌تر و خوشایندتر هستند. اما یک مشکل بزرگ دارند: شما نمی‌توانید به راحتی از یک کدبیس عظیم ++C به آن‌ها مهاجرت کنید. مهاجرت نیازمند بازنویسی کامل و یا نوشتن واسط‌های پرزحمت و شکننده از طریق C است.

کربن برای حل این مشکل متولد شد. فلسفه آن ساده است: جانشینی برای ++C که با همان سرعت، اما با امنیت و سادگی مدرن، و مهم‌تر از همه، با قابلیت هم‌کنش‌پذیری (Interop) دوطرفه و کامل با ++C در همان فرآیند ساخت. شما می‌توانید یک فایل کربن را در کنار فایل‌های ++C خود قرار دهید و بدون هیچ واسطه‌ای، از کدهای یکدیگر استفاده کنید.


بخش دوم: اصول طراحی کربن – چرا متفاوت است؟

راست (Rust): زبانی که شیوه فکر کردن به حافظه را برای همیشه تغییر داد

در دنیای برنامه‌نویسی، یک دوگانگی تاریخی وجود داشته است: یا سرعت و کنترل کامل می‌خواهید (C و ++C) و باید با خوره‌های حافظه و اشاره‌گرهای سرکش دست و پنجه نرم کنید، یا امنیت و راحتی می‌خواهید (پایتون، جاوا، #C) و باید هزینه یک گردآورنده زباله (Garbage Collector) و کاهش سرعت را بپذیرید.

برای دهه‌ها، این یک معامله دو سر بُرد به نظر می‌رسید. تا اینکه راست (Rust) از راه رسید و گفت: "چرا هر دو را نداشته باشیم؟"

راست با وعده جسورانه "سرعت C، امنیت پایتون" ، نه تنها به این وعده عمل کرد، بلکه برای هفت سال متوالی به عنوان محبوب‌ترین زبان برنامه‌نویسی در نظرسنجی Stack Overflow انتخاب شد. اما این محبوبیت تصادفی نیست. در این مقاله، راست را از فلسفه وجودی تا نصب و کدنویسی عملی می‌شکافیم.


بخش اول: چرا راست اختراع شد؟ (داستان یک آسانسور خراب)

زبان برنامه نویسی زیگ

بهرام بهرام 30 اردیبهشت · بهرام ·

زیگ (Zig)

زیگ (Zig): جراحی قلب C با چاقوی جراحی مدرن

جهان نرم‌افزار بر شانه‌های غولی به نام C ایستاده است. سیستمعامل‌ها، موتورهای بازی، مرورگرها و تقریباً هر چیزی که به سرعت و کارایی مطلق نیاز دارد، به این زبان نوشته شده است. اما C یک نقص بزرگ دارد: متولد دهه ۱۹۷۰ است. پیچیدگی‌های مدیریت حافظه دستی، سیستم ماکروی فاجعه‌بار، و فرآیند ساخت (Build) تکه‌تکه و عذاب‌آور، بخشی از دردهای روزمره برنامه‌نویسان C است.

در این میان، زبان‌هایی مثل ++C و Rust تلاش کردند این مشکلات را حل کنند، اما اولی به هیولایی از پیچیدگی تبدیل شد و دومی با سیستم مالکیت (Ownership) سختگیرانه‌اش، بسیاری را پس زد.

اینجاست که Zig (زیگ) وارد میدان می‌شود. زیگ ادعای جسورانه‌ای دارد: می‌خواهد C جدید باشد. نه با اضافه کردن لایه‌های انتزاعی پیچیده، بلکه با حفظ فلسفه سادگی و شفافیت C و مدرن‌سازی هوشمندانه آن. در این مقاله، زیگ را از صفر تا کامپایل کردن یک برنامه و ساخت یک ابزار واقعی بررسی می‌کنیم.


بخش اول: زیگ چیست و چرا باید به آن اهمیت دهیم؟

زبان برنامه نویسی bend

بهرام بهرام 30 اردیبهشت · بهرام ·


اگر برنامه‌نویس باشید، احتمالاً با این کابوس آشنا هستید: الگوریتمی در ذهن دارید که می‌دانید اگر بتواند روی ۱۰۰۰ هسته به طور همزمان اجرا شود، نتیجه را در چند ثانیه به شما می‌دهد. اما بعد، کابوس واقعی شروع می‌شود: نخ‌ها (Threads)، قفل‌ها (Mutexes)، شرایط مسابقه (Race Conditions)، بن‌بست‌ها (Deadlocks) و هزاران خط کد پیچیده CUDA یا OpenCL. ناگهان آن راه‌حل ساده، به هیولایی از پیچیدگی تبدیل می‌شود که فقط متخصصان سخت‌افزار از پس آن برمی‌آیند.

حال تصور کنید زبانی وجود داشته باشد که بتوانید الگوریتم خود را تقریباً به همان سادگی که روی کاغذ می‌نویسید، کدنویسی کنید و زبان، خودش آن را برای اجرای خودکار و بینهایت موازی روی هزاران هسته GPU کامپایل کند. این وعده انقلابی زبان برنامه‌نویسی Bend است که در سال ۲۰۲۴ به صورت متن‌باز منتشر شد و دنیای برنامه‌نویسی را شوکه کرد.

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


بخش اول: Bend چیست و چرا یک انقلاب است؟


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

چگونه یک کتابخانه ساده در پایتون بسازیم؟

مرحله ۱: ساخت یک ماژول ساده (ساده‌ترین سطح)

حتی یک فایل .py ساده می‌تواند به عنوان یک "کتابخانه" عمل کند:

# my_tools.py - کتابخانه شخصی شما

def سلام(نام):
    return f"سلام {نام} عزیز!"

def جمع(a, b):
    return a + b

def خوشامد():
    print("به کتابخانه شخصی من خوش آمدید")

# ثابت‌ها
PI = 3.14159
نویسنده = "علی رضایی"

نحوه استفاده از آن در پروژه دیگر:

# فایل main.py
import my_tools

print(my_tools.سلام("سارا"))
print(my_tools.جمع(5, 3))
print(my_tools.PI)

مرحله ۲: ساخت یک پکیج (Package) - کتابخانه واقعی

برای ساخت یک کتابخانه حرفه‌تر، باید یک پکیج ایجاد کنید:

my_library/           # پوشه اصلی کتابخانه

├── my_library/       # پوشه اصلی کدها (همنام با کتابخانه)
│   ├── __init__.py   # فایل خالی که نشان می‌دهد این یک پکیج است
│   ├── math_utils.py
│   ├── string_utils.py
│   └── file_utils.py

├── setup.py          # فایل نصب و تنظیمات
└── README.md         # توضیحات کتابخانه

محتویات فایل‌ها:

# my_library/math_utils.py
def جمع(*اعداد):
    return sum(اعداد)

def ضرب(*اعداد):
    نتیجه = 1
    for عدد in اعداد:
        نتیجه *= عدد
    return نتیجه
# my_library/string_utils.py
def معکوس(متن):
    return متن[::-1]

def تعداد_واژه‌ها(متن):
    return len(متن.split())
# my_library/__init__.py
# این فایل تعیین می‌کند وقتی کتابخانه import شود چه چیزهایی در دسترس باشد

from .math_utils import جمع, ضرب
from .string_utils import معکوس, تعداد_واژه‌ها

__version__ = "1.0.0"
__author__ = "نام شما"

مرحله ۳: فایل setup.py (برای نصب کتابخانه)

کتابخانه (library)

بهرام بهرام 30 اردیبهشت · بهرام ·


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

کتابخانه در پایتون

پایتون دارای اکوسیستم غنی از کتابخانه‌هاست که آن را به یکی از محبوب‌ترین زبان‌های برنامه‌نویسی تبدیل کرده است.

انواع کتابخانه‌ها در پایتون:

۱. کتابخانه‌های استاندارد (Built-in)

کتابخانه‌هایی که به همراه خود پایتون نصب می‌شوند:

  • math: توابع ریاضی
  • datetime: کار با تاریخ و زمان
  • json: پردازش داده‌های JSON
  • re: عبارات منظم (Regular Expressions)
  • os: تعامل با سیستم عامل
  • sys: توابع سیستمی
  • random: تولید اعداد تصادفی

۲. کتابخانه‌های شخص ثالث (Third-party)

موجو (Mojo)

بهرام بهرام 30 اردیبهشت · بهرام ·

موجو (Mojo): انقلابی در برنامه‌نویسی هوش مصنوعی یا تیری در تاریکی؟

تصور کنید در حال ساخت یک خودروی اسپرت هستید. برای طراحی بدنه، پیش‌نمونه‌سازی سریع و تنظیمات جزئی، از ابزاری بسیار منعطف و چابک مانند یک چاقوی سوئیسی استفاده می‌کنید (پایتون). اما وقتی نوبت به ساخت موتور، گیربکس و شاسی می‌رسد، ناچارید سراغ دستگاه‌های تراش CNC سنگین و پیچیده بروید (++C و CUDA). این تغییر مداوم ابزار، زمان‌بر، پرهزینه و مستعد خطاست.

حال تصور کنید دستگاهی اختراع شود که هم انعطاف چاقوی سوئیسی را داشته باشد و هم دقت و قدرت CNC را. این دقیقاً وعده بزرگ زبان برنامه‌نویسی موجو (Mojo) است.

موجو که در سال ۲۰۲۳ توسط شرکت Modular (به رهبری کریس لتنر، خالق LLVM و Swift) به جهان معرفی شد، به سرعت به یکی از داغ‌ترین موضوعات در دنیای فناوری تبدیل شد. اما آیا واقعاً این زبان می‌تواند به این وعده جسورانه عمل کند؟ بیایید عمیق‌تر بررسی کنیم.


مشکل دقیقاً چه بود؟ دوگانگی ابدی پایتون


فراتر از پایتون و راست: نگاهی به جدیدترین زبان‌های برنامه‌نویسی که آینده را می‌سازند

دنیای تکنولوژی هرگز از حرکت نمی‌ایستد. هر چند سال یک‌بار، زبان‌های برنامه‌نویسی جدیدی ظهور می‌کنند که شیوه تفکر ما درباره حل مسائل را به چالش می‌کشند. برخی از این زبان‌ها با هدف رفع نواقص غول‌های قدیمی مانند C و ++C متولد می‌شوند و برخی دیگر، با نگاهی انقلابی، مسیرهای کاملاً تازه‌ای را پیش پای توسعه‌دهندگان می‌گذارند.

در این مقاله، به جای مرور زبان‌های تثبیت‌شده، نگاهی می‌اندازیم به جدیدترین زبان‌های برنامه‌نویسی که در سال‌های ۲۰۲۲ تا ۲۰۲۴ سر و صدای زیادی به پا کرده‌اند، به بلوغ رسیده‌اند و شاید یکی از آن‌ها، ابزار اصلی شما در پروژه‌های آینده‌تان باشد.


۱. موجو (Mojo): فرزند خلف پایتون و C++

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

Mojo که در سال ۲۰۲۳ توسط شرکت Modular معرفی شد، دقیقاً برای حل همین مشکل به میدان آمده است.

  • شعار اصلی: "سادگی پایتون، قدرت C++."
  • کاربرد اصلی: برنامه‌نویسی برای هوش مصنوعی، به‌ویژه روی سخت‌افزارهای شتاب‌دهنده مانند GPUها.
  • وجه تمایز کلیدی: موجو یک ابرمجموعه (Superset) از پایتون است. این یعنی شما می‌توانید یک برنامه معتبر پایتون را در موجو اجرا کنید، اما با افزودن قابلیت‌هایی مانند نوع‌های ایستا (Static Types) و مدیریت حافظه سطح پایین، به عملکردی تا ۳۵,۰۰۰ برابر سریع‌تر از پایتون دست یابید. این یک جهش تکاملی، نه انقلابی، برای جامعه عظیم توسعه‌دهندگان پایتون است.

۲. Bend: خداحافظ برنامه‌نویسی موازی پیچیده

تا اینجا یاد گرفتیم چطور داده‌ها را ذخیره کنیم، با آن‌ها محاسبه انجام دهیم و متن‌ها را پردازش کنیم. اما یک برنامه‌نویس واقعی باید بتواند تصمیم بگیرد! اگر کاربر لاگین کرده بود، پنل کاربری را نشان بده؛ اگر سن کمتر از ۱۸ بود، دسترسی نده؛ اگر دما بالای ۳۰ بود، هشدار بده. در این پست از آموزش جاوااسکریپت با ساختارهای شرطی آشنا می‌شویم؛ ابزاری که به کد ما قدرت تصمیم‌گیری می‌دهد.