مقدمه
سلام. خوش آمدید. امیدوارم حالتان خوب باشد. امیدوارم در Jurasic July از کاوش و بازی با بعضی زبانهای قدیمی و تأثیرگذار لذت برده باشید. حالا به ماه هشتم سال ۲۰۲۳ میرسیم و هفتمین ماه موضوعیمان: Appy August.
منظورمان از اپلیکیشنها چیست؟
خب، میتواند معناهای مختلفی داشته باشد:
- برنامههای وب، همان نان و آبِ بخش بزرگی از کارهای امروز ما
- اپلیکیشنهای بومی، مانند آنهایی که روی گوشی یا تبلت شما اجرا میشوند
- اپلیکیشنهای دسکتاپ که مستقیماً روی سیستمعامل Windows، Mac یا Linux شما اجرا میشوند
- اپلیکیشنهای ویژهی یک حوزهی خاص
- اپلیکیشنهای تجاری
- و دیگر موارد!
پس زبانها کداماند؟
به سراغ ۱۴ زبان میرویم: ABAP، CoffeeScript، Dart، Delphi، Elm، Java، JavaScript، Kotlin، Objective-C، PHP، PureScript، ReasonML، Swift و TypeScript.
نشانها
نشان را با کامل کردن ۵ تمرین در یکی از این زبانها در این ماه به دست آورید. و برای نشان یکساله، باید اینها را کامل کنید:
- آناگرام: با یک واژه و فهرستی از آناگرامهای ممکن، آناگرامهای آن را پیدا کنید
- شماره تلفن: یک شماره تلفن را تمیز کنید
- مثلث: یک مثلث را دستهبندی کنید
- رونویسی RNA: یک توالی DNA را به مکمل RNA آن تبدیل کنید
- امتیاز Scrabble: با یک واژه، امتیاز Scrabble آن را تعیین کنید
مرور کلی
ABAP
- توسط SAP SE در دههی ۱۹۸۰ توسعه یافت و هدف طراحیاش وقتی روشن میشود که ببینیم این سرواژه در ابتدا مخفف چه بود: Allgemeiner Berichts-Aufbereitungs-Prozessor که در آلمانی یعنی «پردازندهی آمادهسازی گزارش عمومی». بعدها ABAP کاربرد عمومیتری پیدا کرد و سرواژه به Advanced Business Application Programming بهروزرسانی شد تا این تغییر را نشان دهد
- زبانی با نوعدهی قوی و ایستا
- چندالگویی: از برنامهنویسی دستوری و شیءگرا پشتیبانی میکند
- به بایتکد کامپایل میشود. جالب اینکه کد منبع داخل پایگاه داده ذخیره میشود
- همهی کد در بافت یک سیستم SAP اجرا میشود که از یک پایگاه دادهی رابطهای و یک یا چند سرور برنامه تشکیل شده است
- فناوری انحصاری و متنبسته. هرچند یکی از نگهدارندگان ما یک بازپیادهسازی متنباز فوقالعاده ساخته است
- در اپلیکیشنها برای کاربردهای تجاری به کار میرود، مثل مالی، مدیریت مواد، حسابداری و مدیریت. مشتریانی در سراسر جهان دارد، با اسمهای بزرگی مثل Apple، Amazon و Walmart
چرا عالی است
- پیوسته در حال تحول است و بهطور منظم ویژگیهای تازه به آن اضافه میشود
- قابلاعتماد: کارکردی پایدار با دههها تجربه در پشت آن
- کتابخانهی استاندارد بزرگ
ویژگیهای برجسته
- یکپارچگی بیدردسر با سیستم و پایگاه دادهی SAP و همچنین با بسیاری از سیستمهای دیگر
- دیکشنری ABAP همهی فرادادههای مربوط به دادههای سیستم SAP را در خود دارد، از جمله جدولها، نماها و ساختارها. انواع موجود در این دیکشنری را میتوان برای نوعدهی ایستا به متغیرها به کار برد، حتی وقتی نوع یک جدول باشد
- ABAP Workbench بخشی از سیستم ABAP است و مجموعهای از ابزارها برای ویرایش برنامهها را در خود دارد. از جمله طراحی صفحهها
CoffeeScript
- اولین کامیتهای زبان در سال ۲۰۰۹ توسط Jeremy Ashkenas ثبت شد؛ پیام اولین کامیت «اولین کامیت زبان ناشناخته» بود
- با نوعدهی پویا و چندالگویی (شیءگرا، دستوری، تابعی، نمونهگرا)
- به JavaScript کامپایل میشود (که به آن «ترنسپایل» میگویند). قانون طلایی CoffeeScript این است: «این فقط JavaScript است.» یکی از نخستین زبانهای موفق در ترنسپایل به JS
- محبوب شد چون CoffeeScript بعضی از مشکلاتی را نداشت که آن زمان برنامهنویسان JS با آن دستوپنجه نرم میکردند (مثل رفتار متفاوت اتصال
thisیا پشتیبانی نشدن از کلاسها). از نسخهی ۳٫۱ در Ruby on Rails گنجانده شد - در سال ۲۰۱۷ نسخهی ۲٫۰ زبان منتشر شد که هدفش همراستا کردن آن با آخرین استاندارد JavaScript بود. زبان تقریباً سالی یک بار بهروزرسانی میشود
- کامپایلر زبان در ابتدا با Ruby نوشته شده بود، اما در سال ۲۰۱۰ با یک کامپایلر خودمیزبان نوشتهشده به CoffeeScript جایگزین شد (این کامپایلر به NodeJS وابسته نیست و میتواند مستقیماً در مرورگر اجرا شود)
- CoffeeScript تأثیرگذار بود، چون JavaScript را به پذیرش بعضی ویژگیها ترغیب کرد (نحوهی نگارش پیکان لامبدا، کلاسها)
- پیشتر Dropbox و Rails از آن استفاده میکردند
چرا عالی است
- نحوهی نگارش پاک و موجز، با الهام از Python، Ruby و Haskell. کمپرحرفتر از JavaScript، با حذف بسیاری از پرانتزها و آکولادها، تا حدی به لطف استفاده از تورفتگی معنادار (فاصلههای خالی مهماند)
- معناشناسی سادهشده؛ مثلاً دیگر ابهامی دربارهی
let،varوconstوجود ندارد، چون اینها اصلاً نیستند و==به===(برابری سختگیرانه) ترنسپایل میشود و اتصالهای تابع جلوی اشتباههای رایجthisرا میگیرند - بر پایهی عبارت است، یعنی میتوانید نتیجهی یک عبارت
ifرا به یک متغیر نسبت دهید - شکر نحوی فراوان؛ مثلاً به جای
thisاز@استفاده کنید، به جایtrueمیتوانیدyes/onبنویسید،//برای تقسیم صحیح، و خیلی بیشتر
ویژگیهای برجسته
- به JavaScript پاک و خوانا برای انسان کامپایل میشود، با تناظر یکبهیک میان کد منبع و کد تولیدشده.
- تعامل عالی با JavaScript: میتوانید کد نوشتهشده به JS را بهسادگی از CoffeeScript استفاده کنید (و برعکس). از هر کتابخانهی JS که نوشته شده استفاده کنید
- ویژگیهایی را اضافه میکند که در JavaScript وجود ندارند یا نداشتند: درک فهرست، درج رشته، عملگر وجودی (
?)، مقایسههای زنجیرهای - زبانی کوچک؛ کامپایلرش حدود ۵۰۰ کیلوبایت است (۱۰۰ کیلوبایت فشرده)
Dart
- طراحی توسط Lars Bak و Kasper Lund در Google
- نخستین انتشار در سال ۲۰۱۱
- هدفش ساختن زبانی سریع و پربازده بود که بهطور ویژه برای ساخت رابطهای کاربری مناسب باشد
- با نوعدهی ایستا
- چندالگویی: عمدتاً شیءگرا، اما تابعی و دستوری هم هست
- میتواند تفسیر شود و بهصورت بههنگام کامپایل شود
- بیشتر برای ساخت اپلیکیشن به کار میرود، اما میتوان از آن برای ساخت backend هم استفاده کرد
چرا عالی است
- یادگیریاش آسان است، چون نحوهی نگارشش آشناست
- سیستم نوع مدرن: استنتاج نوع، تطبیق الگو،
async/await - مستندات عالی
- ایمنی به لطف سیستم دقیق و بیعیب: دیگر خبری از استثناهای اشارهگر null نیست
- ابزارهای خوب و پشتیبانی در محیطهای توسعهی گوناگون. بهینهشده برای حلقهی بازخورد کوتاه، مثلاً با بارگذاری داغ سریع
- اکوسیستمی رو به رشد با کتابخانههای فراوان
ویژگیهای برجسته
- میتواند به JS و کد بومی کامپایل شود و همچنین به Swift و Kotlin؛ عالی برای اپلیکیشنهای موبایل.
- کتابخانهی Flutter را میتوان برای ساخت سریع اپلیکیشنهای موبایل، وب، دسکتاپ یا نهفته به کار برد. یک بار بنویسید، روی پلتفرمهای مختلف اجرا کنید
- پشتیبانی عالی از همروندی، با
async/await، ایزولهها (سازههای سبک برای اجرای همروند)، futureها و بیشتر
Delphi
- Delphi توسط Borland توسعه یافت و در سال ۱۹۹۵ منتشر شد.
- زبانی از خانوادهی Object Pascal است و Anders Hejlsberg آن را توسعه داد؛ یکی از معماران اصلی C#.
- با نوعدهی قوی و ایستا
- به کد بومی کامپایل میشود
- چندالگویی: بیشتر شیءگرا، اما دستوری، اعلانی و رویدادمحور هم هست
- در اپلیکیشنهای تجاری، رابطهای گرافیکی و مدرسهها (برای آموزش برنامهنویسی) به کار میرود
چرا عالی است
- یادگیریاش آسان است. Object Pascal سادگی و شفافیت Pascal را با ویژگیهای برنامهنویسی شیءگرا ترکیب میکند و همین نوشتن و نگهداری کد را آسانتر میکند
- محیط توسعهی یکپارچه (IDE): محیط توسعهی Delphi محیطی کاربرپسند و پر از امکانات ارائه میدهد که فرایند توسعه را روان میکند. این محیط پیمایش کد، ابزارهای debug، تکمیل خودکار کد و دیگر امکانات بهرهوری را فراهم میکند که توسعه را کارآمدتر میسازد.
- پایداری: از اوایل دههی ۱۹۹۰ وجود دارد و تاریخچهای از ابزار و زبان توسعهی قابلاعتماد و پایدار دارد، از جمله سازگاری قوی با نسخههای قبلی. کدی که با نسخههای قدیمیتر Delphi نوشته شده، هنوز با کمترین تغییر در نسخههای جدید کامپایل و اجرا میشود.
- پشتیبانی چندسکویی: Delphi توانمندیهایش را فراتر از Windows گسترش داده و از توسعهی چندسکویی پشتیبانی میکند، به این ترتیب توسعهدهندگان میتوانند برای چند سیستمعامل مثل macOS، iOS، Android و بیشتر هدفگذاری کنند. این کار ساخت اپلیکیشن برای مخاطبان بیشتر و افزایش دامنهی دسترسی پروژهها را ممکن میکند.
- جامعه و پشتیبانی قوی: Delphi جامعهای فعال و پرشور از توسعهدهندگان دارد که کتابخانه، ابزار و منابع به اکوسیستم آن اضافه میکنند.
ویژگیهای برجسته
- فایلهای اجرایی پرسرعت: اپلیکیشنهای Delphi به سرعت و کارایی مشهورند. کامپایلر Delphi فایلهای اجرایی بومی بهشدت بهینهشده تولید میکند که برای بعضی انواع اپلیکیشن حیاتی است، مثل آنهایی که پردازش بیدرنگ یا محاسبات سنگین لازم دارند.
- محیط توسعهی سریع اپلیکیشن (RAD): ابزارهای طراحی دیداری با کشیدن و رها کردن به توسعهدهندگان امکان میدهند با کمترین تلاش رابط کاربری بسازند و آن را به منطق برنامه وصل کنند، که فرایند توسعه را سریعتر میکند.
- معماری مؤلفهمحور: بر معماری مؤلفهمحور تکیه دارد، جایی که مؤلفههای قابل استفادهی مجدد ساخته میشوند تا با آنها اپلیکیشن بسازند. این کار استفادهی مجدد از کد را آسانتر و زمان توسعه را کوتاهتر میکند.
- مدیریت رویداد: Delphi از یک مدل رویداد داخلی استفاده میکند و به توسعهدهندگان اجازه میدهد بهسادگی به کارهای کاربر و رویدادهای دیگر پاسخ دهند. مدیریت رویداد فرایند گرفتن ورودی کاربر یا رویدادهای سیستم و پاسخ مناسب را ساده میکند.
- اتصال به پایگاه داده: Delphi مؤلفههای دسترسی بومی به پایگاه داده را فراهم میکند که یکپارچگی بیدردسر با سیستمهای مختلف پایگاه داده را ممکن میکند. این پشتیبانی داخلی توسعهی اپلیکیشنهای مبتنی بر پایگاه داده را سادهتر میکند.
Elm
- این زبان را Evan Czaplicki برای پایاننامهی کارشناسیاش ساخت و در سال ۲۰۱۲ منتشر شد
- در ابتدا به سراغ برنامهنویسی واکنشی تابعی (FRP) برای رابطهای گرافیکی رفت (FRP با سیگنالها)، اما در سال ۲۰۱۷ FRP کنار گذاشته شد و جای آن را TEA (معماری Elm) گرفت
- زبانی تابعی با نوعدهی ایستا و قوی
- نحوهی نگارش با الهام از Haskell
- زبان متنباز، اما خیلی نظرمحور و سختگیر، و سبک توسعهاش این است که Evan پیش از عمومی کردن کارها دورههای طولانی کار عمیق را میگذراند. پس ممکن است PRها مدت زیادی ادغام نشوند و پروژه راکد به نظر برسد، اما این فقط سبک کاری Evan است.
- در وبسایتها به کار میرود، مثلاً NoRedInk، Vendr، Rakuten و Brilliant
چرا عالی است
- زبانی بسیار کوچک است، یکی از آسانترینها برای یادگیری از خانوادهی ML در زبانهای تابعی با نوعدهی ایستا. همین تقریباً آن را برای آموزش برنامهنویسی تابعی عالی میکند.
- پیامهای خطای کامپایلر از بهترین و راهنماترینهایی است که پیدا میکنید.
- زبانی پایدار: آخرین انتشارش به سال ۲۰۱۹ برمیگردد
- بستههای اکوسیستم کم اما باکیفیتاند.
- اکوسیستم قدرتمند بررسی ایستای کد با elm-review (که تحلیلگر مسیر Elm در Exercism را نیرو میدهد).
ویژگیهای برجسته
- معماری Elm (TEA) زیربنای همهی اپلیکیشنهای Elm است، پس بررسی اپلیکیشنهای Elm ناشناس بسیار آسان میشود.
- بدون استثنای زمان اجرا! بهجز یکی دو مورد.
- هنگام بهروزرسانی وابستگیها هیچ چیز نمیشکند، چون نسخهگذاری معنایی را کامپایلر تحمیل میکند.
- وقتی کامپایل میشود، کار میکند (بهجز خطاهای منطقی). و وقتی به آن عادت کنید، برگشتن به زبانهای دیگر خیلی سخت میشود.
- «elm-ui» ساختهی Matthew Griffith همان «وقتی کامپایل میشود، کار میکند» را برای ظاهر و چیدمان ممکن میکند و به CSS نیازی ندارید.
- اپلیکیشنهای وب تمامپشته: Lamdera یک پروژهی جداشده است که با Elm اپلیکیشنهای وب تمامپشته میسازد، بدون هیچ چسبی بین frontend و backend.
Java
- توسط James Gosling در Sun Microsystems توسعه یافت و در سال ۱۹۹۵ منتشر شد.
- پنج هدف اولیه:
- ساده، شیءگرا و آشنا.
- مقاوم و ایمن.
- بیطرف نسبت به معماری و قابل حمل.
- کارایی بالا.
- تفسیرشده، رشتهای و پویا.
- با نوعدهی قوی و ایستا
- به بایتکد کامپایل میشود (روی کامپایل به کد بومی کار میشود)
- چندالگویی: دستوری، شیءگرا و تابعی
- زبان و ماشین مجازی مشخصات رسمی دارند و در نتیجه پیادهسازیهای متعددی هم دارند (مثلاً OpenJDK JVM و Hotspot VM شرکت Oracle)
- در حجم عظیمی از نرمافزارها به کار میرود، از وبسایتها تا سیستمهای نهفته و از اپلیکیشنها تا پایگاههای داده
چرا عالی است
- تقریباً همهجا اجرا میشود (همانطور که بهروزرسان Java با کمال میل یادآوری میکند ؛))
- همهکاره: تقریباً برای هر بار کاری میتوان از آن استفاده کرد، از جمله اپلیکیشنها، وبسایتها و سیستمهای نهفته
- قابلیت همکاری با دیگر زبانهای JVM، مثل Kotlin، Groovy، Scala و Clojure
- ابزارهای عالی، هم برای محیطهای توسعه و هم ابزارهای دیگر مثل سیستمهای ساخت
ویژگیهای برجسته
- JVM ماشین مجازی بالغ، پایدار و بسیار کارآمدی است که پیوسته بهتر میشود
- اکوسیستم عظیم، با شمار بسیار زیادی کتابخانهی در دسترس. این کتابخانهها هم مثل خود Java بالغ، پایدار و کاملاند
- در حال تحول: زبان و زمان اجرا هنوز در حال تحولاند؛ زبان مرتب بهروزرسانی میشود تا مدرنتر شود و به گلایههای مردم پاسخ دهد (مثل کم کردن کدهای تکراری و پرحرفی). در مورد زمان اجرا هم مرتب پروژههای تازه راه میافتند تا آن را بیشتر تکامل دهند (مثلاً پروژهی Loom برای سازههای سبک همروندی و کامپایل بومی از طریق GraalVM)
JavaScript
- Brendan Eich در سال ۱۹۹۵ توسط Netscape استخدام شد تا زبانی برای پویا کردن صفحههای وب فراهم کند. نمونهی اولیهاش به شکلی مشهور در ۱۰ روز ساخته شد
- در سال ۱۹۹۷ بهعنوان ECMAScript استاندارد شد
- با نوعدهی پویا و ضعیف
- پیشتر فقط تفسیر میشد، اما امروز اغلب بهصورت بههنگام کامپایل میشود
- چندالگویی: نمونهگرا (که نسبتاً کمیاب است)، اما شیءگرا، دستوری و تابعی هم هست
- نقش بسیار بزرگی در موفقیت امروزی وب داشت. مثلاً AJAX در افزودن تعامل خیلی کمک کرد. استاندارد عملی توسعهی وب است، چون تنها زبان برنامهنویسیای است که پشتیبانیاش در مرورگر تعبیه شده
- احتمالاً پرکاربردترین زبان امروز
- برای backend، frontend، اسکریپتها و ابزارهای خط فرمان به کار میرود
چرا عالی است
- همهکاره: برای بارهای کاری زیادی میتوان از آن استفاده کرد: backend، frontend، اسکریپتها و ابزارهای خط فرمان. بسیاری از ابزارهایی که در وب به کار میروند با JavaScript نوشته شدهاند (و روی nodejs اجرا میشوند)
- زمانهای اجرا (مثل V8) بهشدت بهینه شدهاند و میتوانند بسیار کارآمد باشند، هرچند زبان بهشکل شدیدی پویاست
- زبانی نسبتاً کوچک که یادگیریاش را نسبتاً آسان میکند. امکان اجرای آن در مرورگر آن را بهویژه عالی میکند، چون حین یادگیری بازخورد دیداری میگیرید
- مشخصات آن مرتب بهروزرسانی میشود و ویژگیهای تازهای اضافه میکند، مثل
async/awaitو درج رشته. همچنین نوآوری زیادی در ابزارها هست و ابزارهای تازهای مثل deno، esbuild و bun.js ساخته شدهاند تا کار با کدهای JavaScript را راحتتر کنند - پشتیبانی از JSON درجهیک است؛ همین که JSON مخفف JavaScript Object Notation است گواهش است
- طوری طراحی شده که برای کد رویدادمحور و غیرمسدودکننده مناسب باشد
ویژگیهای برجسته
- اکوسیستم عظیم. شمار بسیار زیادی کتابخانه در دسترس است (۲٫۱ میلیون بسته در سپتامبر ۲۰۲۲)، و علاوه بر آن زبانهای دیگری هم هستند که JavaScript را هدف میگیرند
- روی بیشتر پلتفرمها و سختافزارها اجرا میشود، از Windows تا Apple، از رزبریپایها تا گوشیها، از سرورهای وب تا پلتفرمهای بدون سرور. مرورگرهای وب پشتیبانی بومی در خود دارند، پس نیازی به نصب زمان اجرا نیست.
- ایدهآل برای توسعهی وب، با frameworkهای فراوان برای انتخاب (React، Vue، Angular) و ابزارهای بسیاری برای ساخت اپلیکیشنهای وب (مثلاً eslint، parcel)
- میتوان از آن بهشکل همسان استفاده کرد، یعنی همان زبان (و همان کد) را میتوان هم برای backend و هم برای frontend به کار برد. این کار نگهداری را آسانتر میکند و استفادهی مجدد از کد میان frontend و backend را ممکن میسازد
- محبوبیت عظیم یعنی: منابع فراوان برای یادگیری (ویدیو، وبلاگ، دوره) و جامعهای گسترده برای تعامل
Kotlin
- توسط JetBrains در سال ۲۰۱۰ توسعه یافت؛ شرکتی که به خاطر محیطهای توسعهاش مشهور است (مثل IntelliJ، CLion، GoLand و Rider)
- بیشتر محصولات JetBrains با Java نوشته شده بودند، اما آنها زبانی برای JVM میخواستند که کدهای تکراری را کم کند، توسعه را سریعتر کند و از بعضی ویژگیهایی پشتیبانی کند که نداشتند. Scala این ویژگیها را داشت، اما کامپایلش بیش از حد کند بود. پس پروژهی Kotlin آغاز شد.
- با نوعدهی قوی و ایستا
- چندالگویی: دستوری، شیءگرا، تابعی و اعلانی
- بهطور پیشفرض به بایتکد JVM کامپایل میشود، اما میتواند به JS و کد بومی هم کامپایل شود (که برای پلتفرمهایی مفید است که ماشین مجازی روی آنها ممکن یا مطلوب نیست، مثل دستگاههای iOS)
- در سال ۲۰۱۹، Google آن را زبان ترجیحی برای نوشتن اپلیکیشنهای Android اعلام کرد
- برای ساخت وبسایتها، اپلیکیشنها (بیشتر Android) و حتی تمام یک محیط توسعه (همان محیطهای توسعهی قبلی) به کار میرود
چرا عالی است
- همهکاره: تقریباً برای هر بار کاری میتوان از آن استفاده کرد، از جمله اپلیکیشنها و وبسایتها. Google در سال ۲۰۱۹ Kotlin را زبان ترجیحی توسعهی اپلیکیشنهای Android دانست
- چون روی JVM اجرا میشود، همهی مزایای آن را دارد: ماشین مجازی بالغ و بسیار کارآمد و شمار عظیمی کتابخانهی در دسترس
- بسیاری از مشکلاتی را که ممکن است مردم با Java داشته باشند کاهش میدهد، مثل استثناهای بررسیشده، ایمنی در برابر null و پرحرفی
- زبانی مدرن: استنتاج نوع پیشرفته، مبتنی بر عبارت، تغییرناپذیری، تطبیق الگو، کوروتینها، کانالها
- ابزارهای عالی (وقتی خودِ محیط توسعه با همین زبان نوشته شده باشد، انتظارش هم میرود :)
ویژگیهای برجسته
- پربازده: Kotlin بهترین بخشهای زبانهای دیگر را برمیدارد و آنها را در یک زبان یکدست و پربازده قالب میزند و در بعضی موارد حتی از اصل آن بهتر میکند (مثلاً با متدهای الحاقی محلی)
- کوروتینها: در حالی که در بسیاری زبانها
async/awaitدر خود زبان تعبیه شده است، در Kotlin این کار بهصورت یک کتابخانه پیادهسازی شده که از قابلیت کوروتین زبان استفاده میکند. کوروتینها راهی برای کار با توابع معلق هستند که انتزاعی ایمنتر و کمتر خطاپذیر برای عملیات ناهمگام نسبت به futureها و promiseها فراهم میکنند. - همروندی عالی:
async/await، کانالها و تغییرناپذیری همه به داشتن همروندی عالی کمک میکنند - Compose multiplatform امکان ساخت رابطهای کاربری مشترک از همان کد را با نحوهی نگارش اعلانی فراهم میکند
Objective-C
- در ابتدا توسط Brad Cox و Tom Love در اوایل دههی ۱۹۸۰ توسعه یافت و NeXT آن را برای سیستمعامل NeXTSTEP خود برگزید. چون macOS شرکت Apple تبار مستقیمش به NeXTSTEP میرسد، به زبان برگزیدهی نرمافزارهای Apple تبدیل شد
- طوری طراحی شد که ایدههای شیءگرای Smalltalk را با C ترکیب کند و ارسال پیام را بهعنوان سازهی اصلی شیءگرایی به کار گیرد
- ابرمجموعهی C است، پس هر کد C، کد Objective-C معتبری هم هست و هر دو را میتوان در یک کد ترکیب کرد
- نوعدهی ایستا و پویا
- کامپایلشده
- زبان استاندارد نوشتن اپلیکیشنهای macOS و iOS تا آمدن Swift در سال ۲۰۱۴
- برای اپلیکیشنهای macOS و iOS به کار میرود
چرا عالی است
- ترکیب C با ویژگیهای شیءگرا میتواند واقعاً قدرتمند باشد
- زمان اجرای سبک که آن را کممصرف میکند
- نحوهی نگارش سبک برای کلاسها
- پیمایش سریع، حلقههای
forرا آسانتر از C میکند - سازگاری قوی با نسخههای قبلی
ویژگیهای برجسته
- از شمارش خودکار مراجع (ARC) پشتیبانی میکند که وقتی دیگر به یک شیء ارجاعی نباشد، حافظهاش را خودکار آزاد میکند و مدیریت حافظه را آسانتر میسازد
- زمان اجرای پویا امکان جابهجایی متد (تغییر پویای رفتار یک انتخابگر (شبیه وصلهزنی میمونی))، بازتاب و ارسال مجدد پیام را میدهد (عالی برای الگوی ناظر یا پروکسی)
- پروتکلها و واسطها ویژگیهای واسط را به C میآورند و واسطهای دستهای حتی امکان گسترش انواع موجود را میدهند
PHP
- در سال ۱۹۹۳ توسط Rasmus Lerdorf طراحی و پیادهسازی شد و نخستین بار در سال ۱۹۹۵ منتشر شد
- اسمش یک سرواژهی بازگشتی است: PHP: Hypertext Preprocessor
- با نوعدهی پویا و ضعیف، با امکان افزودن تدریجی اعلانهای نوع قوی در زمان اجرا
- چندالگویی: دستوری، تابعی، شیءگرا، رویهای و بازتابی
- تفسیرشده یا کامپایلشدهی بههنگام
- نخستین پلتفرم رندر سمت سرور
- برای وبسایتها (Facebook، Wikipedia و بسیاری دیگر) و همچنین بسیاری از سیستمهای مدیریت محتوا (Wordpress، JOOMLA) به کار میرود.
چرا عالی است
- همهجا حاضر است؛ PHP روی ۷۷٫۴٪ از همهی وبسایتها به کار میرود^1، مستقل از پلتفرم خاصی
- نحوهی نگارش ساده و شبیه زبانهای جاافتادهی دیگر مثل Java، JavaScript و C، که یادگیری را آسان میکند
- همهکاره. برای کارهای بسیاری به کار میآید، از ساختن اسکریپتهای کوچک وب تا ساختن اپلیکیشنهای بزرگ سمت سرور که سازمانهای بزرگ اجرا میکنند.
- بسیار جاافتاده با پذیرش گسترده. منابع یادگیری، frameworkها و کتابخانههای فراوانی وجود دارد.
- پشتیبانی قوی از پایگاه داده
- هنوز فعالانه توسعه مییابد و ویژگیهای مدرن منتشر میکند
- چندسکویی. روی همه چیز اجرا میشود: Window، Mac، Linux، Unix
- متنباز و رایگان
ویژگیهای برجسته
- اجرا و استقرارش ساده است. بدون زنجیرهی ساخت. بدون کامپایلر.
- سیستم نوع تدریجی. هرجا لازم دارید نوع اضافه کنید و از نوعدهی پویا برای ساده کردن بخشهایی از توسعه استفاده کنید.
- نمونهسازی سریع. یک صفحهی وب بسازید تا ایدهتان را امتحان کنید و آن را روی دستگاه خودتان اجرا کنید.
PureScript
- طراحی توسط Phil Freeman و نخستین نسخهاش در سال ۲۰۱۳ منتشر شد
- او کار روی PureScript را آغاز کرد چون از تلاشهای دیگر برای ترنسپایل Haskell به JavaScript راضی نبود
- با نوعدهی قوی و ایستا
- به JS کامپایل میشود
- زبانی تماماً تابعی
- نحوهی نگارش و ویژگیها با الهام از Haskell
- برای ساخت اپلیکیشنهای وب به کار میرود، اما میتوان با آن اپلیکیشنهای سمت سرور یا اپلیکیشنهای دسکتاپ را هم از طریق Electron ساخت
چرا عالی است
- بسیاری از چیزهایی را دارد که Haskell را عالی میکند:
- سیستم نوع قوی و قدرتمند: انواع دادهی جبری، کلاسهای نوع، انواع مرتبهبالاتر
- بیانگر: تطبیق الگو، استنتاج نوع
- ایمنی: بدون null، انواع تغییرناپذیر
- تماماً تابعی: عوارض جانبی در سیستم نوع کدگذاری میشوند
- رمزگشایی و رمزگذاری آسان و ایمن از نظر نوع برای JSON به انواع
- به JavaScript خوانا برای انسان کامپایل میشود
- ابزارهای خوب
ویژگیهای برجسته
- هستهی تابعیاش برای اپلیکیشنهای وب ایمن از نظر نوع و بدون خطاهای زمان اجرا عالی است
- تعامل عالی با JS
- به JS کارآمد کامپایل میشود
ReasonML
- توسط Jordan Walke در Facebook ساخته شد و نخستین نسخهاش در سال ۲۰۱۶ منتشر شد
- بر پایهی OCaml، اما با حذف ویژگیهای عجیب و غریبش و طراحی برای تعامل با JS
- زبانی تابعی با نوعدهی ایستا
- کامپایلشده
- برای ساخت وبسایتها به کار میرود (مثلاً در Facebook)
چرا عالی است
- همهی خوبیهای OCaml، اما در محیط وب:
- سیستم نوع قدرتمند: همهی مقدارها با انواع سادهتر (مثل رکوردها، گونهها و گزینهها) نوعدهی میشوند و این انواع ساده بر انواع پیچیده ترجیح دارند. دیگر خبری از خطاهای
undefinedنیست که قابلیت اطمینان را بهتر میکند - بیانگر: تطبیق الگو، استنتاج نوع، ساختارشکنی
- ایمنی: بدون null، تغییرناپذیری بهطور پیشفرض
- سیستم نوع قدرتمند: همهی مقدارها با انواع سادهتر (مثل رکوردها، گونهها و گزینهها) نوعدهی میشوند و این انواع ساده بر انواع پیچیده ترجیح دارند. دیگر خبری از خطاهای
- به JavaScript خوانا برای انسان کامپایل میشود
- میتوان آن را به OCaml کامپایل کرد (و برعکس)، یعنی میتواند از تمام اکوسیستم OCaml استفاده کند (مثلاً برای کامپایل به یک فایل اجرایی بومی)
ویژگیهای برجسته
- زمان کامپایل ReasonML بسیار سریع است، یعنی چرخههای تکرار سریع.
- تعامل عالی با JS، هم برای استفاده از JS در کد ReasonML و هم برای صادر کردن ReasonML به JS. حتی میتواند انواع TS تولید کند. با C هم تعامل دارد. حتی از نحوهی نگارشی شبیه JSX پشتیبانی میکند
Swift
- توسعهی Swift را Chris Lattner در سال ۲۰۱۰ آغاز کرد و در رویداد WWDC در سال ۲۰۱۴ در سراسر جهان معرفی شد.
- هدفش جایگزینی Objective-C، زبان برنامهنویسی قدیمی Apple که از اوایل دههی ۱۹۸۰ تغییر مهمی نگرفته بود، با زبانی نو و مدرن بود. طوری طراحی شد که با بخشهای زیادی از Objective-C تعامل داشته باشد.
- با نوعدهی قوی و ایستا
- کامپایلشده، با استفاده از LLVM برای کامپایل به کد ماشین (مثل Rust)
- چندالگویی: تابعی، شیءگرا، دستوری و اعلانی
- در ابتدا نرمافزاری انحصاری بود، اما در سال ۲۰۱۵ متنباز شد
- بیشتر برای اپلیکیشنهای موبایل و دسکتاپ به کار میرود، اما در backend و سناریوهای بدون سرور هم استفاده میشود
چرا عالی است
- زبانی مدرن: استنتاج نوع، تطبیق الگو، انواع دادهی جبری، رشتههای یونیکد
- پربازده: Swift بهترین بخشهای زبانهای دیگر (مثل Rust، Python، C# و Ruby) را برمیدارد و آنها را در یک زبان یکدست و پربازده قالب میزند
- ایمن: اشارهگرها در معرض دید نیستند، نوع اختیاری که جلوی استثناهای اشارهگر null را میگیرد، مدیریت صریح خطا و مدیریت خودکار حافظه از طریق ARC (شمارش خودکار مراجع)
- مرتب بهروزرسانی میشود. در سالهای اول، Apple از اعمال تغییرهای ناسازگار در چیزهایی که کارآمد نبودند نمیترسید. این کار جلو انباشته شدن «بار اضافه» را میگیرد. معمولاً ابزاری هم برای کمک به مهاجرت کد در دسترس قرار میگیرد. از Swift ۵ به بعد، واسط دودویی برنامه (ABI) پایدار است
- برخلاف Objective-C، Swift روی همهی پلتفرمهای اصلی اجرا میشود: macOS، Windows و Linux
ویژگیهای برجسته
- سریع. به کد ماشین کارآمد کامپایل میشود و همین آن را سریع میکند
- تعامل بیدردسر با Objective-C و همچنین تعامل خوب با C و C++
- جامعهی بزرگ، با منابع فراوان و عالی در دسترس
TypeScript
- در Microsoft و در واکنش به نارضایتی از توسعهی اپلیکیشنهای بزرگ با JS ساخته شد. یکی از طراحانش Anders Hejlsberg بود؛ معمار اصلی C# و سازندهی Delphi و Turbo Pascal
- نخستین نسخهاش در سال ۲۰۱۲ منتشر شد
- چندالگویی: تابعی، نمونهگرا، دستوری، شیءگرا و جنریک
- از نوعدهی تدریجی و نوعدهی اردکی استفاده میکند
- کامپایلشده (به JS)
- برای وبسایتها، هم frontend و هم backend، اسکریپتها و ابزارهای خط فرمان به کار میرود
چرا عالی است
- سیستم نوع قدرتمند و انعطافپذیر: انواع اجتماع، انواع مقدار ثابت و تاپلها. عملاً هر الگویی که در کد JS به کار میرود را میتوان در TS بهشکلی ایمن از نظر نوع توصیف کرد. سیستم نوع آنقدر قدرتمند است که حتی تورینگکامل است
- چون ابرمجموعهی JS است، میتوان آن را تدریجی وارد یک کد JS کرد
- بهترینهای هر دو دنیا را ترکیب میکند: نوعدهی پویا و ایستا
- محبوبیتش بهسرعت رشد میکند و بسیاری از ابزارها یا نوعهای TypeScript ارائه میدهند یا خودشان به TypeScript تبدیل شدهاند. منابع بسیاری هم در دسترس است
- زبان مرتب بهروزرسانی میشود و ویژگیهای آیندهی ECMAScript را زودتر از دیگران میپذیرد
ویژگیهای برجسته
- امنیت و درستی بیشتر: نوعدهی ایستا میتواند بسیاری از دستههای خطا را که معمولاً با JS مرتکب میشوید حذف کند
- تعامل بیدردسر با JS. میتوان تعریفهای نوع سفارشی اضافه کرد تا با کد JS بهشکلی ایمن از نظر نوع کار کنید. تعریفهای نوع سفارشی برای شمار زیادی در دسترس است
- ابزارها و پشتیبانی عالی از محیط توسعه. اعلانهای نوع، تکمیل کد و حتی بازآرایی ایمن و در مقیاس بزرگ در بسیاری از محیطهای توسعه در دسترس است
- همهی مزایای اجرا در اکوسیستم JS را به دست میآورید: شمار عظیم بستهها، ابزارهای فراوان، جامعهی بزرگ و غیره.
کدام را امتحان کنیم؟
- اگر میخواهید اپلیکیشنهای بومی بسازید، Dart، Delphi، Java، Kotlin و Swift گزینههای عالیاند. با این حال، هر یک از زبانهای دیگری که به JS کامپایل میشوند هم میتوانند برای ساخت اپلیکیشنهای بومی به کار روند. گفتنی است زبان رسمی ساخت اپلیکیشنهای iOS/macOS، Swift است و برای اپلیکیشنهای Android، Kotlin
- اگر میخواهید اپلیکیشن وب بسازید، CoffeeScript، Dart، Elm، Java، JavaScript، Kotlin، PHP، PureScript، ReasonML و TypeScript عالیاند
- اگر به برنامهنویسی تابعی علاقه دارید، Elm، PureScript و ReasonML انتخابهای طبیعیاند و CoffeeScript، Dart، Java، JavaScript، Kotlin، Swift و TypeScript هم از برنامهنویسی تابعی پشتیبانی میکنند
- برای برنامهنویسی شیءگرا، ABAP، Dart، Delphi، Java، Kotlin، Objective-C، PHP و Swift گزینههای منطقیاند و CoffeeScript، JavaScript و TypeScript هم از این الگو پشتیبانی میکنند
- اگر به نوشتن اپلیکیشنهای تجاری علاقه دارید، ABAP و Delphi برای این کار عالیاند
1 اوت 2023
·
برایتان مفید بود؟
منتشرشده توسط
Erik Schierboom