الأحد، 10 أغسطس 2014

مرحباً Swift، ما الذي أخَّرك حتي الآن ؟!

 
في مؤتمر WWDC 2014 الصاخب الذي عقدته Apple في الأيام الماضية كان هناك العديد من المفاجآت، منهن أن نظام mac os x صار قريب الشكل من نظام iOS (و هو الأمر الذي لا أخفي كرهي الشديد له، و ربما أخصص مقالاً قادماً لانتقاد هذا الأمر و أوضح فيه مدي استيائي منه). و لكن كان هناك الكثير من الأمور التي أسعدتني، و علي رأسها كان خبر إطلاق Apple للغة برمجة جديدة تسمي swift ستعمل كبديل للغة Objective-C علي المدي البعيد. و في هذا المقال أنوي أن أكتب بعض الفقرات التي أوضح فيها وجهة نظري لتلك اللغة الجديدة.

لكن يجب أن أنبه في البداية إلي أن الملاحظات التي سأضعها هنا عن swift أتت نتيجة لاطلاع مبدئي علي قواعد اللغة، و علي ما كتبه كتاب تقنيون مشهورون، لذلك ففي الإمكان اعتبار آرائي هنا انطباعاً مبدئياً و ليس حكماً نهائياً إلي حد ما؛ فعلي الرغم من أن لغة swift تعجبني من الناحية التصميمية إلي حد كبير، و أنني قرأتُ الكثير عنها بما يجعلني أفهم إلي حد كبير المبادئ التصميمية التي كانت وراء تصميمها بذلك الشكل، إلا أنه لا يمكن إعطاء حكم نهائي علي لغة برمجة تعلق عليها شركة مثل Apple آمالها في الفترة القادمة إلا باطلاع مكثف للغاية، و ربما لو استطعتُ تجربة اللغة بشكل أو بآخر فسيكون هذا ممتازاً.


شعار لغة Swift
الغريب أنني كنتُ قبل المؤتمر بأيام قليلة أتساءل في تعجب عن السبب الذي جعل Apple تعتمد علي Objective-C طيلة هذه السنوات؛ فعلي الأقل من وجهة نظري فإن Objective-C تُعتبر لغة شديدة التعقيد و لا تتماشي مع متطلبات العصر الحديث. و قد بدأت حكاية Apple مع Objective-C منذ فترة طويلة للغاية، ففي البداية كانت هناك شركة اسمها stepstone هي التي ابتكرت اللغة في بدايات ثمانينيات القرن الماضي، و قد رخَّصت شركة NeXT الاستغلال التجاري لهذه اللغة من Stepstone و اعتمدت عليها لبناء تطبيقاتها لنظام التشغيل الخاص بها، ثم فيما بعد استحوذت Apple علي NeXT و اعتمدت علي نظام تشغيلها لبناء الأجيال الجديدة من نظام mac os x، و كذلك استغلت لغة الـObjective-C لتصير لغة التطوير الرسمية لنظامها، و فيما بعد صارت هي اللغة الرسمية للتطوير لنظام iOS.
 
حتي الآن كانت الأمور تسير علي ما يرام؛ فاللغة قوية و تتماشي مع عصرها جيداً، و التكامل بينها و بين نظام mac os x يجعل الصعوبات التي يواجهها مستخدموها من الأمور التي يمكن التغاضي عنها و لو بكثير من الجهد. كما أن بيئة التطوير المتكاملة Xcode جعلت الأمور أقل صعوبة مما لو كان يجب استخدام Objective-C بدون كل ذلك القدر من التسهيلات و المساعدات. لكن الأمور اختلفت بعد ظهور لغات تجعل العملية البرمجية أسهل بكثير من حيث طبيعة اللغة نفسها، و كذلك بعد أن ظهرت أنواع جديدة من التطبيقات التي تحتاج إلي قدر أكبر من المرونة في اللغة؛ حتي لا تتعقد الأكواد و تستهلك الوقت و الجهد في إتمام الأمور التي يمكن عملها بشكل أسرع و أخف بلغات تتماشي مع ذلك النوع الجديد من الاحتياجات (فكر في تطبيقات الهواتف الذكية التي تحتاج للكثير من المميزات لكي تجذب المستخدمين، و تحتاج لجهد في تصميم واجهاتها لتكون قادرة علي التعامل مع شاشات مختلفة من حيث الحجم و الدقة و تظهر عليهن بشكل جميل، و تحتاج كذلك إلي أن تتواجد في السوق بأقصي سرعة ممكنة قبل أن يتمكن المنافسون من غزوه قبلهم).
 
و لذلك فإن Apple تحتاج بشدة إلي لغة تتوافق مع المطالب الجديدة في عالم البرمجة، بل في الواقع فإنها كانت تحتاج إلي تلك اللغة منذ فترة طويلة للغاية (منذ ظهور الـjava علي الأقل). لذلك فأظن أن مشكلة swift أنها أتت متأخرة إلي هذه الدرجة؛ فـmicrosoft علي سبيل المثال أحست بأنها تحتاج لتكرار تجربة الـjava و نجاحها المدوي بين مبرمجيها، و لذلك أطلقت #C كـjava محلية الصنع، ثم بعد ذلك طورتها رويداً رويداً و أضافت لها قواعد حديثة حتي أصبحت مختلفة إلي حد كبير للغاية عما كانت عليه في البداية. و لو أننا عقدنا مقارنة بين #C و Objective-C لخسرت الأخيرة بلا جدال؛ لأن الأولي تجعل العملية البرمجية أسهل مما هي عليه في حالة الثانية، كما أنها ليست كالأخيرة ناتجة عن تهجين غريب الشكل بين لغتين من عائلتين مختلفتين.
 
و لو قارنا بين #C و swift لوجدنا أن الأولى تربح علي الأقل من ناحية كمية الدعم المقدم لها من الشركة الراعية لها، و كذلك من بقية المجتمع البرمجي؛ فعلي الأقل انظروا إلي شركة xamarin التي تتيح لك بمشاريع مثل mono أن تعمل تطبيقاتك المكتوبة بـ#C علي أنظمة تشغيل متعددة بقليل جداً من التغييرات. بينما swift لا تزال وافداً جديداً علي عالم البرمجة، و تحتاج إلي سنوات بدورها لكي تلقي مثل ذلك الدعم و الترحيب. و قد استغلت شركة xamarin هذه النقطة في الدعاية لنفسها كما هو موجود علي الصفحة الرئيسة للشركة.
 
 
عموماً يمكنني حصر مجموعة من مميزات swift من وجهة نظري في التالي (صححوا لي معلوماتي إن كان أحدها غير صحيح):
  • لا تحتوي لا علي حساب المؤشرات pointers arithmetic و لا علي المؤشرات نفسها، و هي من أهم النقاط التي لا أري أن اللغات عالية المستوي عامة الأغراض يمكن أن تتغاضي عنها، حتي و إن كان ذلك علي حساب بعض القوة في التعامل مع الوظائف منخفضة المستوي low level.
  • لا تحتوي علي ملفات الترويسات header files و لا الترويسات prototypes الخاصة بالدوال functions و الأصناف classes.
  • تعتمد علي إدارة آلية للذاكرة عن طريق مُجمِّع نفايات garbage collector، و هكذا يمكن للمبرمج بها أن يهتم فقط بالأمور التي تهمه في البرنامج الذي يبنيه. و من الجدير بالذِّكر أن هذا لم يؤثر علي سرعة تنفيذ التطبيقات المكتوبة بـswift، و التي (حسبما تقول Apple) أسرع من تلك المكتوبة بالـpython و ـObjective-C (علي الأقل في بعض الأحيان).
  • قواعدها تقلل الحاجة للثرثرة و يمكنك فعل الكثير من المهام بالقليل من الأكواد.
  • بإمكان المبرمجين بها أن يكتبوا بها برمجيات تفاعلية فيما يُعرف بالـplayground مثل سطر الأوامر التفاعلي command line الذي ينفذ أمراً تلو الآخر. و كذلك فسيكون بالإمكان استخدام swift في عملية الـdebugging داخل الـXcode؛ بحيث يمكن لهم التواصل مع البرامج التي تعمل بالفعل (هذا يجعلنا نتسائل: هل من الممكن أن تصير هي -أو لغة مشتقة منها- بديلاً عصرياً للغة الـshell script في mac os x علي المدي البعيد ؟).

    
    كتابة أكواد تفاعلية باستخدام swift، و مشاهدة الكود و هو يتم تنفيذه
  • تتماشي مع بعضها البعض بنفس النموذج التصميمي، و ليست كالـObjective-C التي هي عبارة عن خلط بين لغتين مختلفتين في النمط التصميمي (C و Smalltalk).
  • تحظي بمباركة Apple التي ستدعمها بكل قوة، و ستجبر مبرمجي Objective-C علي استخدام اللغة الجديدة تدريجياً كما هي عادة Apple.
 
 
و يمكنني حصر بعض عيوب swift من وجهة نظري في النقاط التالية:
  • لا تعمل إلا علي أنظمة تشغيل Apple، و لكن يمكن التعامل مع هذا عن طريق توفير مترجمات لها تدعم بقية أنظمة التشغيل، و أظن أن مجتمع البرمجيات مفتوحة المصدر لن يدخر جهداً لفعل ذلك لو انتشرت اللغة و صار لها جمهوراً واسعاً من المستخدمين.
  • المكتبات التي ستستخدمها تم بناؤها في الأصل باستخدام Objective-C، و قد يعني هذا أن النمط التصميمي للغة الجديدة يختلف عن النمط التصميمي للواجهات، و قد يؤدي هذا إلي بعض الصعوبات.
  • حسبما أري فإنها تختلف عن Objective-C للغاية، و بالتالي قد يكون من الصعب لمن تعودوا علي Objective-C و نمطها أن يعتادوا علي اللغة الجديدة و يشعروا بنفس الألفة. و هذا ليس بالأمر الهين لأن المبرمجين المحترفين يعتادون علي اللغات التي يستخدمونها لدرجة أنهم قد يستفيدون من العيوب التي في تصميمها !، و بالتالي فعند التعامل مع لغة جديدة تختلف بشكل جذري عما اعتادوا عليه فإن الأمور تصير مربكة بالنسبة لهم، و يحتاجون إلي المزيد من الوقت لاستعادة التوازن، علي العكس من المبتدئين أو من يستخدمون لغات مشابهة للغة الجديدة؛ فسيكون بإمكانهم اعتياد اللغة الجديدة في فترة قصيرة.
    و لكن الجدير بالذِكر أن سهولة اللغة الجديدة قد تيسر هذا الأمر بشكل كبير للغاية، و
    مثال واقعي علي ذلك أن مبرمجاً مخضرماً قام ببناء لعبة تحاكي لعبة flappybird الشهيرة في غضون تسع ساعات فقط (بما فيها وقت للراحة و وضع الأطفال في السرير)، و الفترة التي قضاها ذلك المبرمج في تعلم swift لا تتعدي الأربع ساعات كما قال بنفسه !


هذه هي ملاحظاتي علي Swift حتي الآن، و ربما نتحدث عنها في الأيام القادمة إن أحسستُ بأن لدي المزيد لقوله و/أو تعديله بمشيئة الله تعالي.

تم نشر هذا المقال أول مرة علي موقع Drolint.com

ليست هناك تعليقات:

إرسال تعليق