ماجيك (لغة برمجة)
ماجيك هي لغة برمجة كائنية التوجه تدعم التوريث المتعدد وتعدد الأشكال ، وهي لغة ذات كتابة ديناميكية . صُممت ونُفذت عام ١٩٨٩ على يد آرثر تشانس من شركة سمول وورلد سيستمز المحدودة كجزء من نظام المعلومات الجغرافية (GIS) الخاص بسمول وورلد. بعد استحواذ شركة جنرال إلكتريك للطاقة على سمول وورلد عام ٢٠٠٠، أصبحت ماجيك تُقدم الآن كجزء من منصة سمول وورلد التقنية.
تم إطلاق برنامج ماجيك (السحر الملهم) لأول مرة عام 1990، وقد تم تحسينه وتحديثه على مر السنين. الإصدار الحالي منه هو 5.2.
في يوليو 2012، أعلن مطورو Magik أنهم بصدد نقل لغة Magik إلى آلة جافا الافتراضية . وقد أكدت شركة أوراكل نجاح عملية النقل في نوفمبر من العام نفسه. [ 1 ]
أوجه التشابه مع سمول توك
تتشابه لغة Magik مع لغة Smalltalk في بعض الخصائص اللغوية والبنية: إذ تُترجم لغة Magik إلى رموز بايت تُفسَّر بواسطة آلة Magik الافتراضية . وتتوفر آلة Magik الافتراضية على العديد من المنصات، بما في ذلك Microsoft Windows ، وإصدارات مختلفة من أنظمة Unix و Linux .
تعتمد Magik على سطر الأوامر، ويمكن تعديل التعليمات البرمجية أثناء التشغيل حتى أثناء تشغيل التطبيق. كما يمكن استخدام سطر الأوامر لتنفيذ تعليمات Magik البرمجية وعرض النتائج.
يتم تخزين الكود المُجمَّع في ملف واحد يُسمى ملف الصورة. يحتوي كل ملف صورة على رموز البايت المُجمَّعة وحالة الجلسة (على سبيل المثال، قيم المتغيرات) عند آخر حفظ للصورة.
خصائص اللغة
تعليقات
يستخدم Magik #الرمز المميز لتمييز أجزاء من التعليمات البرمجية كتعليقات:
هذا تعليق.
الواجبات
يستخدم Magik <<المعامل لإجراء عمليات الإسناد :
أ << 1.234 ب << ب + أ c << "foo" + "bar" # دمج السلاسل
للتوضيح، تُقرأ هذه الصيغة على النحو التالي: "أ تصبح 1.234" أو "ب تصبح ب زائد أ". هذا المصطلح يفصل بين التخصيص والمقارنة .
يدعم Magik أيضًا نسخة مضغوطة من هذا المعامل تعمل بطريقة مشابهة لتلك الموجودة في لغة C :
ب +<< أ مكافئ لـ ب << ب + أ
لطباعة متغير، يمكنك استخدام الأمر التالي
أ << "مرحباً" اكتب (أ)
الرموز
إلى جانب أنواع البيانات التقليدية مثل الأعداد الصحيحة والأعداد العشرية والسلاسل النصية، يدعم Magik أيضًا الرموز. الرموز هي نوع بيانات مميز يُستخدم بكثرة في Magik لتمييز الكائنات بشكل فريد. يتم تمثيلها بنقطتين رأسيتين متبوعتين بسلسلة من الأحرف. يمكن استخدام علامة الخط العمودي (-) قبل الرموز . على سبيل المثال:
a << :hello # كلما تمت مصادفة :hello، فإنها نفس النسخة b << :|مرحباً بالعالم|
الكتابة الديناميكية
لا تُصنَّف متغيرات Magik وفقًا لأنواع البيانات الموجودة في لغات البرمجة الأخرى مثل C#، ويمكنها الإشارة إلى كائنات مختلفة أثناء التشغيل. كل شيء في Magik هو كائن (لا يوجد فرق بين الكائنات والأنواع الأولية مثل الأعداد الصحيحة).
a << 1.2 # يتم تعيين عدد عشري للمتغير 'a' a << "1.2" # لاحقًا، يتم تعيين سلسلة نصية للمتغير 'a'
- أشياء
تُنفَّذ الكائنات في ماجيك باستخدام نماذج أولية. تتشابه النماذج الأولية مع الفئات في لغات برمجة أخرى مثل جافا ، ولكن مع وجود اختلافات جوهرية. يدعم ماجيك التوريث المتعدد، والمزيجات ( التي تُنفِّذ وظائف دون بيانات). تُنشأ نسخ جديدة من خلال استنساخ نسخة موجودة (والتي عادةً ما تكون النموذج الأولي، ولكن ليس بالضرورة).
يتم إنشاء نماذج جديدة باستخدام العبارة def_slotted_exemplar()، على سبيل المثال:
def_slotted_exemplar(:my_object, { {:slot_a, 34}, {:slot_b, "hello"} }, {:parent_object_a, :parent_object_b}) ستحدد هذه الشفرة نموذجًا جديدًا يسمى my_objectيحتوي على خانتين (أو حقلين) يسمى slot_a(مهيأ مسبقًا إلى 34) و slot_b(مهيأ مسبقًا إلى "hello") يرث من نموذجين موجودين يسمى parent_object_aو parent_object_b.
مقارنة
تُطبّق مكتبة Magik جميع عوامل المقارنة المنطقية المعتادة ( =،،،،،،، )، بالإضافة إلى بعض العوامل غير الشائعة. تُستخدم عوامل المقارنة " و" لمقارنة حالات <محددة من الكائنات، أو مراجع الكائنات بدلاً من قيمها.<=>>=~=/<>_is_isnt
على سبيل المثال:
أ << "مرحباً" b << "مرحباً" a = b # تُرجع القيمة True (_true) لأن قيمتي a و b متساويتان a _is b # تُرجع خطأ (_false) لأن a ليس نفس مثيل b أ << "مرحباً" ب << أ a = b # تُرجع القيمة True (_true) لأن قيمتي a و b متساويتان a _is b # تُرجع True (_true) لأن b تم تعيين مثيل محدد لنفس الكائن مثل a، بدلاً من قيمة a.
طُرق
يتم تعريف الطرق على نماذج باستخدام العبارات _methodو _endmethod:
_method my_object.my_method(a, b) _return a + b _endmethod
من المتعارف عليه توفير طريقتين new()(لإنشاء نسخة جديدة) و init()(لتهيئة نسخة).
٧ طريقة جديدة _method person.new(name, age) _return _clone.init(name, age) _endmethod طريقة التهيئة. _private _method person.init(name, age) استدعاء التنفيذ الرئيسي. _super.init(name, age) تهيئة الفتحات. .name << name العمر << العمر _return _self _endmethod
يُنشئ هذا الأمر _cloneنسخةً ماديةً من personالكائن. _superيسمح هذا الأمر للكائنات باستدعاء تنفيذ دالةٍ ما في الكائن الأصلي. يمكن للكائنات الإشارة إلى نفسها باستخدام هذا _selfالأمر. يتم الوصول إلى خانات الكائن وتعيينها باستخدام صيغة النقطة.
يمكن تمييز الطرق التي لا تُعد جزءًا من الواجهة العامة للكائن بأنها خاصة باستخدام العبارة _private. ولا يمكن استدعاء الطرق الخاصة إلا بواسطة _selfو _superو _clone.
يمكن تعريف الوسائط الاختيارية باستخدام _optionalالعبارة. أما الوسائط الاختيارية التي لم يتم تمريرها، فيُسندها Magik إلى كائن خاص _unset(ما يعادل قيمة فارغة). _gatherويمكن استخدام العبارة لتعريف قائمة بالوسائط الاختيارية.
_method my_object.my_method(_gather values) _endmethod
التكرار
في لغة ماجيك _while، تسمح عبارات _forو _overو _loopو و _endloopبالتكرار.
_حاجز _local s << 0 _local i << 0 بينما i <= 100 _حلقة s +<< i i +<< 1 نهاية الحلقة >> s _endblock
هنا، يتم دمج _while مع _loop و _endloop.
_method my_object.my_method(_gather values) المجموع << 0.0 _for a _over values.elements() _حلقة المجموع +<< أ نهاية الحلقة _return total _endmethod m << my_object.new() x << m.my_method(1.0, 2, 3.0, 4) # x = 10.0
هنا، values.elements() عبارة عن مُكرِّر يساعد على تكرار القيم.
في لغة ماجيك، تُسمى طرق المولد_iter بطرق التكرار. ويمكن تعريف طرق تكرار جديدة باستخدام العبارات التالية _loopbody:
_iter _method my_object.even_elements() _for a _over _self.elements() _حلقة إذا كان a زوجيًا، فهو صحيح. _ثم _loopbody(a) _endif نهاية الحلقة _endmethod
إجراءات
يدعم Magik أيضًا وظائف تُسمى الإجراءات. الإجراءات هي كائنات تُعلن باستخدام عبارات ` _procand` _endproc. تُسند الإجراءات إلى متغيرات يمكن استدعاؤها بعد ذلك.
my_procedure << _proc @my_procedure(a, b, c) _return a + b + c _endproc x << my_procedure(1, 2, 3) # x = 6
التعبير النمطي
يدعم Magik صيغة التعبير النمطي //:
إذا كان /Hello\,\s(\w)+!/.matches?("Hello, Magik!") _ثم اكتب("تم العثور على تطابق!") _endif ولالتقاط المجموعات باستخدام التعبيرات النمطية (Regex):
/sw([0-9]+)-([0-9]+).*/.replace_all("sw65456-324sss", "$1") # "65456" /sw([0-9]+)-([0-9]+).*/.replace_all("sw65456-324sss", "$2") # "324" مكتبة HTTP
يدعم Magik إجراء طلبات HTTP أو HTTPS عبر مكتبة http، انظر الأمثلة أدناه:
magikhttp << http.new() magikhttp.url("https://www.google.com").get() magikhttp.url("https://www.google.com").post({"User-agent", "Bot"}, "some data") غرائب اللغة
بما أن ماجيك طُوِّرت في الأصل في إنجلترا، فإنّ الطرق في مكتبات العالم الصغير الأساسية تُكتب باستخدام اللغة الإنجليزية البريطانية . على سبيل المثال:
استخدم "initialise" وليس "initialize".
المجموعات
كما هو الحال في لغات البرمجة الأخرى، تحتوي لغة ماجيك أيضاً على مجموعات. وتشمل هذه المجموعات ما يلي:
- متجه بسيط
- الحبل - مجموعة ديناميكية
- هاشتاج
- قائمة العقارات
- مجموعة المساواة
- أكياس
مثال "مرحباً بالعالم"
فيما يلي مثال على برنامج "Hello world" مكتوب بلغة ماجيك:
اكتب("مرحباً بالعالم!")مراجع
- ↑ جيم كونورز (5 نوفمبر 2012). "رشّ بعضًا من ماجيك على آلة جافا الافتراضية" . تم الاسترجاع في 6 نوفمبر 2012.
بفضل هذه الإمكانية الجديدة، نجحت شركة جنرال إلكتريك للطاقة في استضافة بيئة ماجيك الخاصة بها على آلة جافا الافتراضية
.
روابط خارجية
- مجموعة منتجات سمول وورلد التقنية
- MDT - بيئة تطوير متكاملة (IDE) لأدوات تطوير Magik لمطوري GE Smallworld GIS
- المصادر المفتوحة (سورس فورج)
- منشور في منتدى اللغة حول لغة ماجيك
- الورقة الفنية رقم 5 - نظرة عامة على سمول وورلد ماجيك
- GE Smallworld، إضافات Emacs لمطوري Magik، مؤرشفة بتاريخ 25 أبريل 2016 على موقع Wayback Machine
- إضافة Visual Studio Code للغة البرمجة Smallworld Magik.
- لغات البرمجة القائمة على الفئات
- لغات البرمجة ذات الكتابة الديناميكية
