من هنوز امیدوار هستم که دنیای زبانهای برنامهنویسی دچار تحول شود. من از نوشتن با زبانهای سی یا جاوا خسته شدهام، من زبانهای بهتری میخواهم.
من به طور خاص به چیزی که «برنامهنویسی با بهرهوری بالا» نامیدهام علاقهمندم. من میخواهم زبانی را انتخاب کنم که بیشترین استفاده را از سختافزار کنم. برنامهنویسی در پایتون یا جاوا اسکریپت جالب است اما بعضی وقتها پیش میآید که برای نوشتن یک برنامه باید از سختافزار خالص استفاده کنید.
اجازه دهید بعضی از ویژگی های پسندیده برای برنامه نویسی با بازدهی بالا را ذکر کنم که زبانهای برنامهنویسی جاری در آنها عملکرد خوبی داشتهاند:
۱- سیستمعاملها به وسیله سی و سی پلاس پلاس ساخته شدهاند. علاوه بر این خیلی از کتابخانههای مهم برای زبان سی اینترفیس دارند، این بدان معنا است که توانایی فراخواندن توابع زبان سی با کمترین سربار در بعضی موارد مهم است. هر چند که زبان گو به شما اجازه میدهد که توابع زبان سی را فراخوانی کنید ولی این کار سربار زیادی را به عملکرد تحمیل میکند. همهی زبانهای دیگر میتوانند توابع زبان سی را با کمترین سربار فراخوانی کنند.
۲- اگر چه این قابل بحث است اما من فکر میکنم زبانی که مدیریت حافظه دستی دارد احتمالا در کارایی بهتر عمل میکند. در سیستمهای مدرن، مدیریت حافظه نیز اغلب یک سربار مهم است. زبانهای سی و سی پلاس پلاس مدیریت حافظه دستی دارند. سوئیفت سیستم شمارشگر ارجاع دارد که حالتی از مدیریت مدرن حافظه است، اما با این مزیت که کاملا جبری است یعنی وقتی که داده از محدودهاش خارج میشود حافظه بازپس گرفته میشود. اگر چه شمارش ارجاع هم سربار دارد، مخصوصا در زمینه مولتیتردینگ. زبان گو زبالهروب نسلی (generational garbage collection) دارد همانند جاوا و سیشارپ. این بدان معنا است که این زبالهروب هر از گاهی برنامه را برای بازپسگیری حافظه متوقف میکند، هر چند که این زبالهروب طوری بهینه شده است که توقفها کوتاه باشد. این بهینهسازی کار پسندیدهای است زیرا توقف برنامه مطلوب نیست. من نمیدانم کدام روش را ترجیح میدهم؟ روش سوئیفت یا روش گو.
۳- پردازنده کامپیوترهای ما تعداد زیادی هسته دارد. برنامهنویسی پارالل مهم است. ما ترجبح میدهیم که زبان برنامهنویسی ما برنامهنویسی چند هستهای را به خوبی پشیبانی کند. من فکر میکنم که زبان گو در این زمینه به صورت واضح دست بالا را دارد. اگر چه هر آنچه که میشود با گو در مورد چند هستهای انجام داد را می شود با زبان سی نیز انجام داد ولی این کار به راحتی زبان گو نیست. تا جایی که من میدانم زبان سوئیفت یک روش استاندارد در مورد استفاده از چند هسته دارد که «توزیعکننده مرکزی بزرگ» نامیده میشود. این زبان همچنین Operation/OperationQueue را برای سطوح بالاتر مولتی-تردینگ دارد. این ممکن است خوب باشد اما نمیتواند با قابلیتهای موجود در دیگر زبانهای لیست رقابت کند.
۴- برای کارایی بالا، یک زبان برنامه نویسی خوب باید یک ویژگی به نام «قابلیت تشخیص آسان کارایی» را داشته باشد. این بدان معنی است وقتی شما به یک قطعه کد نگاه میکنید باید بتوانید پیشبینی کنید که این قطعه کد با چه سرعتی اجرا میشود. اگر بخواهم صادق باشم باید بگویم که این کار در طول زمان بسیار سختتر شده است و ما مجبور شدهایم که بیشتر و بیشتر به بنچمارکها تکیه کنیم. اگر چه برای زبانهای سادهتر مثل سی و گو بیشبینی کارایی کدها را راحتتر کردهاند. در واقع هر چه زبان گستردهتر میشود کامپایل کدهای آن در سرتان سخت تر میشود.
۵- پردازندههای ما دستورالعملهای جالب جدیدی دارند مثل دستورالعملهای SIMD. این دستورالعملها باید به آسانی از طریق زبانهای برنامهنویسی در دسترس باشند. هیچ زبان برنامهنویسی برای برنامه نوشتن با چیزی مثل SIMD آسان نیست اما زبانهای سی و سی پلاس پلاس به طور واضحی بر دیگران برتری دارند. در زبان گو شما میتوانید توابع را با زبان اسمبلی بنویسید و سپس این توابع را در گو فراخوانی کنید اما این کار سربار زیادی را بر کارایی تحمیل میکند. سوئیفت به صورت آشکاری در این زمینه بهتر است، برای این زبان یک پکیچ بنام simd وجود دارد ولی این پکیج فقط در سیستم عامل مک کار میکند.
۶- دهها سال گذشته است و هنوز یک روش فراگیر برای مدیریت وابستگیها در زبان سی وجود ندارد. همچنین هیچ روش استاندردی برای ساخت (build) برنامهها وجود ندارد. البته IDE شما اضافه کردن وابستگی ها و ساخت برنامه را تسهیل میکند اما داشتن چیزی که در زبان برنامهنویسی به صورت توکار وجود داشته باشد کار را بسیار راحتتر میکند. در زبانهای گو و سوئیفت یک روش چند-پلتفرم استاندارد برای اضافه کردن وابستگیها، ساخت برنامه و تست برنامه وجود دارد.
در جدول زیر تحلیل خودم را خلاصه کردهام:
اگر من به منظور برنامهنویسی با کارایی بالا استخدام شوم، هر کدام از زبانهای بالا به من «تحمیل» شود من خوشحال خواهم بود. همهی آنها گزینههای خوبی هستند. همهی آنها با سرعت زیادی در حال بهتر شدن هستند، به عنوان مثال من فکر میکنم زبان گو از زمانی که من آن را آموختهام به میزان خیره کنندهای پیشرفت کرده است.
منبع: lemire.me
این مطلب همچنین در این لینک در وبسایت شخصی من انتشار یافته است.