لغة البرمجة Tcl

لغة Tcl ( تُنطق اختصارًا / ˈtɪk ( ə ) l / ، مثل كلمة tickle ، أو اختصارًا / ˌtiːˌsiːˈɛl / ، مثل TCL ؛ [ 8 ] أصلها Tool Command Language ) هي لغة برمجة ديناميكية عالية المستوى ، متعددة الأغراض ، ومفسرة . صُممت بهدف أن تكون بسيطة للغاية لكنها قوية. [ 9 ] تُحوّل Tcl كل شيء إلى شكل أمر ، حتى بنيات البرمجة مثل تعيين المتغيرات وتعريف الإجراءات. [ 10 ] تدعم Tcl أنماط برمجة متعددة ، بما في ذلك البرمجة الكائنية ، والبرمجة الإجرائية ، والبرمجة الوظيفية ، والبرمجة الإجرائية .

يُستخدم Tcl بشكل شائع في تطبيقات C [ 11 ] لإنشاء النماذج الأولية السريعة ، والتطبيقات النصية، وواجهات المستخدم الرسومية، والاختبار. [ 12 ] تتوفر مترجمات Tcl للعديد من أنظمة التشغيل ، مما يسمح بتشغيل كود Tcl على مجموعة واسعة من الأنظمة. ولأن Tcl لغة مضغوطة للغاية، تُستخدم على منصات الأنظمة المدمجة ، سواءً بصيغتها الكاملة أو في العديد من الإصدارات الأخرى ذات الحجم الصغير. [ 13 ]

يُشار إلى الجمع الشائع بين لغة Tcl وامتداد Tk باسم Tcl/Tk (يُنطق "تيكل تيك" أو "تيكل تي كي")، وهو يُمكّن من بناء واجهة مستخدم رسومية (GUI) بشكل أصلي في لغة Tcl. يتم تضمين Tcl/Tk في تثبيت بايثون القياسي في شكل Tkinter .

تاريخ

ابتكر جون أوسترهوت لغة البرمجة Tcl في ربيع عام 1988 أثناء عمله في جامعة كاليفورنيا، بيركلي . [ 14 ] [ 15 ] ووفقًا للمؤلف، فقد نشأت في الأصل "بدافع الإحباط" [ 11 ] ، حيث كان المبرمجون يبتكرون لغاتهم الخاصة لتطوير برامج أتمتة تصميم الإلكترونيات (EDA)، وتحديدًا أداة تصميم الدوائر المتكاملة واسعة النطاق (VLSI ) ماجيك ، التي كانت محور اهتمام جون المهني آنذاك. [ 16 ] لاحقًا، حظيت Tcl بالقبول بشكل مستقل. وحصل أوسترهوت على جائزة ACM لأنظمة البرمجيات عام 1997 عن Tcl/Tk. [ 17 ]

يأتي الاسم في الأصل من "لغة أوامر الأدوات"، ولكن يُكتب عادةً Tcl بدلاً من TCL . [ 18 ]

تاريخحدث
يناير  1990أعلنت شركة Tcl عن إصدارها خارج بيركلي ( مؤتمر USENIX الشتوي ).
يونيو  1990من المتوقع الإعلان عن ذلك (مؤتمر USENIX الصيفي).
يناير  1991الإعلان الأول عن Tk (مؤتمر USENIX الشتوي).
يونيو  1993المؤتمر الأول لـ Tcl/Tk (بيركلي). تم الإعلان هناك عن مدير هندسة [table] (سلف [grid] )، و [incr Tcl] ، وTclDP، وGroupkit.
أغسطس  1997قدمت Tcl 8.0 مترجمًا للرمز البايتي ومساحات الأسماء. [ 19 ]
أبريل  1999يقدم Tcl 8.1 دعمًا كاملاً لـ Unicode [ 20 ] وتعبيرات نمطية متقدمة . [ 21 ]
أغسطس  1999يقدم Tcl 8.2 بنية امتداد Tcl (TEA) [ 22 ]
أغسطس  2000تم تشكيل فريق Tcl الأساسي، مما أدى إلى تحويل Tcl إلى نموذج تطوير أكثر توجهاً نحو المجتمع. [ 1 ]
سبتمبر  2002المؤتمر التاسع لـ Tcl/Tk (فانكوفر). الإعلان عن نظام تغليف starkit. إصدار Tcl 8.4.0. [ 23 ]
ديسمبر  2007أضافت لغة Tcl 8.5 أنواع بيانات جديدة، ومستودع امتدادات جديد، وأعداد كبيرة ، [ 24 ] وتعبيرات لامدا . [ 25 ] [ 26 ]
ديسمبر  2012أضافت لغة Tcl 8.6 نظام الكائنات الديناميكي المدمج، TclOO، والتقييم بدون استخدام المكدس. [ 27 ]
سبتمبر  2024أضافت Tcl 9.0 إمكانيات 64 بت، ودعم نطاق نقاط ترميز Unicode الكامل، وتستخدم epoll و kqueue [ 28 ]

تُعقد مؤتمرات وورش عمل Tcl في كل من الولايات المتحدة وأوروبا . [ 29 ] تستخدم العديد من الشركات، بما في ذلك FlightAware [ 30 لغة Tcl كجزء من منتجاتها.

سمات

ملف Tcl قيد التحرير في بيئة تطوير Eclipse المتكاملة

تتضمن ميزات Tcl

  • جميع العمليات عبارة عن أوامر ، بما في ذلك هياكل اللغة. وهي مكتوبة باستخدام تدوين البادئة .
  • تقبل الأوامر عادةً عددًا متغيرًا من الوسائط (وهي متغيرة الوسائط ).
  • يمكن إعادة تعريف كل شيء وتجاوزه ديناميكيًا. في الواقع، لا توجد كلمات مفتاحية، لذا يمكن إضافة هياكل التحكم أو تغييرها، على الرغم من أن هذا غير مستحسن.
  • يمكن التعامل مع جميع أنواع البيانات كسلاسل نصية ، بما في ذلك شفرة المصدر . داخليًا، تحتوي المتغيرات على أنواع مثل عدد صحيح وعدد عشري، ولكن التحويل يتم تلقائيًا بالكامل.
  • لا يتم تعريف المتغيرات، بل يتم إسناد قيم لها. استخدام متغير غير مُعرَّف يؤدي إلى حدوث خطأ.
  • نظام كائنات ديناميكي بالكامل وقائم على الفئات ، TclOO، يتضمن ميزات متقدمة مثل الفئات الوصفية والمرشحات والمزيجات . [ 31 ]
  • واجهة تعتمد على الأحداث للمآخذ والملفات . كما يمكن استخدام الأحداث الزمنية والأحداث التي يحددها المستخدم.
  • يتم تقييد رؤية المتغيرات إلى النطاق المعجمي (الثابت) بشكل افتراضي، ولكن uplevelالسماح upvarللإجراءات بالتفاعل مع نطاقات الدوال المحيطة.
  • جميع الأوامر التي تحددها لغة Tcl نفسها تُصدر رسائل خطأ عند استخدامها بشكل غير صحيح.
  • إمكانية التوسع ، عبر لغات البرمجة C و C++ و Java و Python و Tcl.
  • لغة مُفسَّرة باستخدام رمز البايت
  • دعم كامل لليونيكود (3.1 في البداية، ويتم تحديثه بانتظام)، تم إصداره لأول مرة عام 1999.
  • التعبيرات النمطية [ 21 ]
  • متعدد المنصات : واجهة برمجة تطبيقات ويندوز ؛ يونكس ، لينكس ، ماكنتوش ، إلخ.
  • تكامل وثيق ومتعدد المنصات مع واجهة عرض النوافذ ( GUI ) Tk .
  • توجد آليات توزيع متعددة:
    • نسخة التطوير الكاملة (لنظام التشغيل Windows، على سبيل المثال ActiveState Tcl ، انظر)
    • Tclkits (ملف تنفيذي واحد يحتوي على وقت تشغيل برمجي كامل، بحجم 4 ميجابايت فقط)، Starkits (آلية تغليف لتسليم تطبيق بطريقة مستقلة، وخالية من التثبيت، وقابلة للنقل بدرجة عالية) و Starpacks (دمج Starkit مع Tclkit لإنتاج Starpack - ملف تنفيذي واحد خاص بالمنصة، مثالي للنشر السهل).
    • مترجم جيم ، تطبيق Tcl صغير الحجم
    • شفرة مصدرية قابلة للتوزيع مجاناً بموجب ترخيص BSD . [ 32 ]

Safe-Tcl

Safe-Tcl هي مجموعة فرعية من لغة Tcl ذات ميزات مقيدة لمنع نصوص Tcl البرمجية من إلحاق الضرر بالجهاز أو التطبيق المُضيف. [ 33 ] الوصول إلى نظام الملفات محدود، ويُمنع تنفيذ أوامر النظام العشوائية. تستخدم Safe-Tcl نموذج مُفسِّر مزدوج، حيث يقوم المُفسِّر غير الموثوق بتشغيل التعليمات البرمجية في نص برمجي غير موثوق. صُممت Safe-Tcl بواسطة ناثانيال بورنشتاين ومارشال روز لتضمين الرسائل النشطة في البريد الإلكتروني. يمكن تضمين Safe-Tcl في البريد الإلكتروني عند دعم application/safe-tcl و multipart/enabled-mail . أُدمجت وظائف Safe-Tcl لاحقًا كجزء من إصدارات Tcl/Tk القياسية. [ 34 ] [ 35 ]

بناء الجملة والدلالات الأساسية

يتم تغطية بناء الجملة ودلالات لغة Tcl بواسطة اثنتي عشرة قاعدة [ 36 ] تُعرف باسم Dodekalogue. [ 37 ]

يتكون نص Tcl البرمجي من سلسلة من استدعاءات الأوامر. استدعاء الأمر عبارة عن قائمة من الكلمات مفصولة بمسافات بيضاء وتنتهي بسطر جديد أو فاصلة منقوطة. الكلمة الأولى هي اسم الأمر، والذي قد يكون مضمنًا في اللغة، أو موجودًا في مكتبة متاحة ، أو مُعرَّفًا في النص البرمجي نفسه. أما الكلمات اللاحقة فتُستخدم كوسائط للأمر.

اسم الأمر الوسيط 1 الوسيط 2 ... الوسيط N

يستخدم المثال التالي الأمر puts (اختصارًا لـ "put string") لعرض سلسلة نصية على وحدة تحكم المضيف:

يضع "مرحباً بالعالم!"

هذا يرسل السلسلة "Hello, World!" إلى جهاز الإخراج القياسي مع إضافة حرف سطر جديد.

يمكن استبدال المتغيرات ونتائج الأوامر الأخرى في سلاسل نصية، كما هو الحال في هذا المثال الذي يستخدم أوامر set و expr لتخزين نتيجة عملية حسابية في متغير (لاحظ أن Tcl لا يستخدم =كعامل إسناد)، ثم يستخدم puts لطباعة النتيجة مع بعض النصوص التوضيحية:

# expr يُقيّم سلسلة نصية كمجموعة تعبيرات sum [ expr 1 + 2 + 3 + 4 + 5 ] puts "مجموع الأرقام من 1 إلى 5 هو $sum."

#يُقدّم هذا الحرف تعليقًا . يمكن أن تظهر التعليقات في أي مكان يتوقع فيه المفسر اسم أمر.

# باستخدام الأقواس المعقوفة، يتم استبدال المتغيرات بواسطة التعبير expr set x 1 set sum [expr { $x + 2 + 3 + 4 + 5 }]; # لا يتم استبدال $x قبل تمرير المعامل إلى expr; # يستبدل expr قيمة $x بـ 1 أثناء تقييم التعبير puts "مجموع الأعداد من 1 إلى 5 هو $sum." ; # المجموع هو 15
# بدون أقواس معقوفة، يتم استبدال المتغيرات عند موقع التعريف (نطاق معجمي) set x 2 set op * set y 3 set res [expr $x$op$y ]; # يتم استبدال $x و$op و$y، ويتم تقييم التعبير إلى 6 puts "$x $op $y is $res." ; # يتم استبدال $x و$op و$y و$res وتقييمها كسلاسل نصية

كما هو موضح في هذه الأمثلة، يوجد عنصر أساسي واحد في اللغة: الأمر. وتحدد آليات الاقتباس وقواعد الاستبدال كيفية معالجة وسائط كل أمر.

يحدث استبدال خاص قبل تحليل أي أوامر أو وسائط. إذا كان الحرف الأخير في السطر (أي قبل سطر جديد مباشرةً) هو شرطة مائلة عكسية، فسيتم استبدال هذه الشرطة المائلة العكسية مع السطر الجديد (وأي مسافات أو علامات جدولة تلي السطر الجديد مباشرةً) بمسافة واحدة. يوفر هذا آلية لاستمرار الأسطر ، حيث يمكن لف الأسطر الطويلة في شفرة المصدر إلى السطر التالي لتسهيل القراءة.

استكمالاً لمعالجة الوسائط العادية، تمتد الكلمة التي تبدأ بعلامة اقتباس مزدوجة ( ") إلى علامة الاقتباس المزدوجة التالية. وبالتالي، يمكن أن تحتوي هذه الكلمة على مسافات بيضاء وفواصل منقوطة دون أن تُفسَّر هذه الأحرف على أنها ذات معنى خاص (أي أنها تُعامل كأحرف نصية عادية). أما الكلمة التي تبدأ بقوس معقوف مفتوح ( {) فتمتد إلى قوس معقوف مغلق ( }). داخل الأقواس المعقوفة، تُمنع جميع أشكال الاستبدال باستثناء حذف السطر الجديد باستخدام الشرطة المائلة العكسية المذكور سابقًا. تُعرف الكلمات غير المحصورة بين أي من هذين التركيبين بالكلمات المجردة.

في الكلمات المجردة والكلمات الموضوعة بين علامتي اقتباس مزدوجتين، قد تحدث ثلاثة أنواع من الاستبدال:

  • يستبدل استبدال الأوامر محتويات الأقواس المربعة المتوازنة بنتيجة تقييم البرنامج النصي الموجود بداخلها. على سبيل المثال، [expr 1+2+3]يتم استبدالها بنتيجة تقييم التعبير الموجود بداخلها (في هذه الحالة 6).
  • يُستبدل اسم المتغير، الذي يبدأ بعلامة الدولار، بمحتوى (أو قيمة) المتغير. على سبيل المثال، $fooيُستبدل اسم المتغير بمحتوى المتغير المسمى "foo". يمكن وضع اسم المتغير بين قوسين معقوفين لفصله عن النص اللاحق في الحالات التي قد تكون غامضة (مثلاً، ${foo}ing).
  • يستبدل الاستبدال بالشرطة المائلة العكسية الشرطة المائلة العكسية متبوعة بحرف بحرف آخر. على سبيل المثال، \nيتم استبدالها بسطر جديد.

تتم عملية الاستبدال من اليسار إلى اليمين في مسح واحد لكل كلمة. ولن يُعاد مسح أي نص مُستبدل بحثًا عن استبدالات أخرى محتملة. ومع ذلك، يمكن أن يظهر أي عدد من الاستبدالات في كلمة واحدة.

ابتداءً من Tcl 8.5 فصاعدًا، يمكن أن تسبق أي كلمة بـ {*}، مما يؤدي إلى تقسيم الكلمة إلى كلماتها الفرعية المكونة لها لأغراض بناء استدعاء الأمر (على غرار ,@تسلسل ميزة الاقتباس شبه في Lisp ).

نتيجةً لهذه القواعد، يمكن استخدام نتيجة أي أمر كوسيط لأي أمر آخر. تجدر الإشارة إلى أنه، على عكس واجهات أوامر يونكس ، لا يقوم Tcl بإعادة تحليل أي سلسلة نصية إلا إذا طُلب منه ذلك صراحةً، مما يجعل الاستخدام التفاعلي أكثر تعقيدًا، ولكنه يجعل الاستخدام البرمجي أكثر قابلية للتنبؤ (على سبيل المثال، لا يُسبب وجود مسافات في أسماء الملفات أي صعوبات).

لا تؤدي علامة المساواة المفردة ( =) أي دور خاص في اللغة. أما علامة المساواة المزدوجة ( ==) فهي اختبار المساواة المستخدم في سياقات التعبير مثل exprالأمر وفي الوسيط الأول للأمر if. (كلا الأمرين جزء من المكتبة القياسية؛ وليس لهما مكانة خاصة فيها، ويمكن استبدالهما إذا لزم الأمر).

معظم أوامر Tcl، وخاصة في المكتبة القياسية ، هي أوامر متغيرة الوسائط ، و proc(المنشئ لإجراءات الأوامر المكتوبة) يسمح بتحديد القيم الافتراضية للوسائط غير المحددة ووسيط شامل للسماح للبرنامج بمعالجة أعداد عشوائية من الوسائط.

لغة Tcl ليست ذات كتابة ثابتة: يمكن أن يحتوي كل متغير على أعداد صحيحة، أو أعداد عشرية، أو سلاسل نصية، أو قوائم، أو أسماء أوامر، أو قواميس، أو أي قيمة أخرى؛ ويتم إعادة تفسير القيم (مع مراعاة القيود النحوية) كأنواع أخرى عند الحاجة. ومع ذلك، فإن القيم غير قابلة للتغيير ، والعمليات التي تبدو وكأنها تُغيرها تُعيد في الواقع قيمة جديدة فقط.

الأوامر الأساسية

أهم الأوامر المتعلقة بتنفيذ البرامج وعمليات البيانات هي:

  • setيكتب قيمة جديدة في متغير (ينشئ متغيرًا إذا لم يكن موجودًا). ​​إذا استُخدم مع وسيط واحد فقط، فإنه يُعيد قيمة المتغير المُعطى (يجب أن يكون موجودًا في هذه الحالة).
  • procيُعرّف أمرًا جديدًا، يؤدي تنفيذه إلى تنفيذ نص برمجي Tcl مُحدد، مكتوب كمجموعة من الأوامر. returnويمكن استخدامه لإعادة التحكم فورًا إلى المُستدعي.

أوامر التحكم في التنفيذ المعتادة هي:

  • ifينفذ هذا الأمر نص البرنامج النصي المُعطى (الوسيط الثاني) إذا تحقق الشرط (الوسيط الأول). ويمكن أن يتبعه وسائط إضافية بدءًا من elseifالشرط البديل ونص البرنامج النصي، أو elseمن الكتلة التكميلية.
  • whileيُكرر تنفيذ نص البرنامج النصي المُعطى، طالما أن الشرط (الوسيط الأول) مُتحقق.
  • foreachينفذ الجسم المحدد حيث يتم تعيين عناصر القائمة لمتغير التحكم واحداً تلو الآخر.
  • forاختصار لتهيئة متغير التحكم، والشرط (كما في while) وعبارة "التكرار التالي" الإضافية (الأمر الذي يتم تنفيذه بعد تنفيذ الجسم)
  • switchيُبسّط هذا الأسلوب تقييم التعليمات البرمجية الشرطية. فهو يقارن وسيطه بحالات متعددة وينفذ التعليمات البرمجية المرتبطة بالحالة المطابقة. كما يدعم مقارنة السلاسل النصية، والتعبيرات النمطية ، والمقارنة باستخدام نمط glob .

يمكن التحكم في أوامر التكرار المذكورة أعلاه بشكل إضافي بواسطة الأوامر التالية:

  • breakيقاطع تنفيذ الجسم ويعود من أمر التكرار
  • continueيُقاطع تنفيذ الجزء الرئيسي من البرنامج، لكن التحكم يعود إلى أمر التكرار. فـ whileتعني التكرار مرة أخرى، forو و foreachتعني بدء التكرار التالي.
  • returnيقاطع تنفيذ الجسم الحالي بغض النظر عن مدى عمقه داخل الإجراء، حتى الوصول إلى حدود الإجراء، ويعيد القيمة المعطاة إلى المستدعي.

الأوامر المتقدمة

  • exprيمرر الوسيط إلى مُفسِّر تعبيرات منفصل ويعيد القيمة المُقَيَّمة. تجدر الإشارة إلى أن نفس المُفسِّر يُستخدم أيضًا للتعبيرات الشرطية ifوأوامر التكرار.
  • listيُنشئ هذا الأمر قائمةً تتضمن جميع الوسائط، أو سلسلةً نصيةً فارغةً في حال عدم تحديد أي وسيط. lindexويمكن استخدام هذا الأمر على النتيجة لإعادة استخراج الوسائط الأصلية.
  • arrayيقوم بمعالجة متغيرات المصفوفة .
  • dictيقوم بمعالجة القواميس (منذ الإصدار 8.5)، وهي عبارة عن قوائم تحتوي على عدد زوجي من العناصر حيث يتم تفسير كل عنصرين على أنهما زوج مفتاح/قيمة.
  • regexpيطابق تعبيرًا نمطيًا مع سلسلة نصية.
  • regsubيقوم بإجراء عمليات الاستبدال بناءً على مطابقة أنماط التعبيرات النمطية.
  • uplevelهو أمر يسمح بتنفيذ نص برمجي في نطاق آخر غير النطاق الداخلي الحالي على المكدس.
  • upvarيقوم بإنشاء رابط لمتغير في إطار مكدس مختلف.
  • namespaceيتيح لك إنشاء سياقات منفصلة للأوامر والمتغيرات والوصول إليها وتدميرها.
  • applyيطبق دالة مجهولة (منذ الإصدار 8.5).
  • coroutine، yieldو yieldtoإنشاء وإنتاج القيم من الروتينات الفرعية (منذ الإصدار 8.6).
  • tryيتيح لك اكتشاف ومعالجة الأخطاء والاستثناءات (منذ الإصدار 8.6).
  • catchيتيح لك ذلك تحقيق عوائد استثنائية.
  • zlibيوفر الوصول إلى مرافق الضغط والتحقق من المجموع الاختباري لمكتبة Zlib (منذ الإصدار 8.6).

ارتقِ بمستواك

uplevelيسمح هذا بتنفيذ نص برمجي للأوامر في نطاق مختلف عن النطاق الداخلي الحالي في مكدس الاستدعاءات. ولأن نص الأوامر قد يستدعي بدوره إجراءات تستخدم الأمر المُستَخدَم في المستوى الأعلى ، فإن النتيجة النهائية هي تحويل مكدس الاستدعاءات إلى شجرة استدعاءات. [ 38 ]

تم تطبيق هذه الميزة في الأصل للسماح لإجراءات Tcl بإعادة تنفيذ الأوامر المدمجة (مثل for و if و while ) مع الاحتفاظ بالقدرة على معالجة المتغيرات المحلية . على سبيل المثال، يُعد نص Tcl البرمجي التالي إعادة تنفيذ للأمر for (مع حذف معالجة الاستثناءات ):

proc for { initCmd testExpr advanceCmd bodyScript } { uplevel 1 $initCmd set testCmd [ list expr $testExpr ] while {[uplevel 1 $testCmd ]} { uplevel 1 $bodyScript uplevel 1 $advanceCmd } }

أبفار

upvarيُتيح الأمر upvar لمتغير محلي واحد أو أكثر في الإجراء الحالي الإشارة إلى متغيرات في استدعاء إجراء مُحيط أو إلى متغيرات عامة . يُبسّط الأمر upvar تنفيذ استدعاء الإجراءات بالاسم، كما يُسهّل إنشاء هياكل تحكم جديدة كإجراءات Tcl. [ 39 ]

أمر decr يعمل مثل الأمر المدمج incrباستثناء أنه يطرح القيمة من المتغير بدلاً من إضافتها:

proc decr { varName { decrement 1 }} { upvar 1 $varName var incr var [expr { -$decrement }] }

نداء الذيل

يدعم Tcl الاستدعاء الذاتيtailcall ، وقد تم تبسيطه بواسطة الأمر. يعيد هذا الأمر استخدام إطار المكدس الحالي للاستدعاء التالي، مما يحمي من مشاكل تجاوز سعة المكدس .

هذا مثال لحساب متتالية كولاتز :

proc collatz { n } { puts $n if { $n > 1 } { if { $n % 2 == 0 } { tailcall collatz [expr { $n >> 1 }] } else { tailcall collatz [expr { $n * 3 + 1 }] } } }

لا يقتصر الأمر tailcallعلى المتصل فقط، بل يمكن استخدامه لاستدعاء وظائف أخرى أيضًا.

البرمجة الكائنية

أضافت لغة Tcl 8.6 نظامًا مدمجًا للكائنات الديناميكية، TclOO، في عام 2012. [ 31 ] ويتضمن ميزات مثل:

  • نظام كائنات قائم على الأصناف. هذا ما يتوقعه معظم المبرمجين من البرمجة الكائنية.
  • يسمح بتخصيص كل كائن على حدة وإعادة تعريف الفئات ديناميكيًا.
  • الفئات الوصفية
  • الفلاتر
  • المكونات الإضافية
  • نظام لتنفيذ الأساليب بطرق مخصصة، بحيث يمكن لمؤلفي الحزم الذين يرغبون في طرق مختلفة بشكل كبير لتنفيذ الأسلوب القيام بذلك ببساطة تامة.
oo :: class create fruit { method eat {} { puts "لذيذ!" } } oo :: class create banana { superclass fruit constructor {} { my variable peeled set peeled 0 } method peel {} { my variable peeled set peeled 1 puts "قشر الآن" } method edible ? {} { my variable peeled return $peeled } method eat {} { if { ! [ my edible ? ]} { my peel } next } } set b [ banana new ] $b eat  يطبع "قشر الآن" و "لذيذ!" fruit destroy $b eat  خطأ "أمر غير معروف"

لم تكن لغة Tcl تدعم بنية البرمجة الكائنية (OO) حتى عام 2012، [ 31 ] لذا ظهرت العديد من حزم الإضافات لتمكين البرمجة الكائنية. وهي منتشرة على نطاق واسع في شفرة المصدر الحالية للغة Tcl. ومن الإضافات الشائعة ما يلي:

لم تُضَف مكتبة TclOO لبناء نظام قويّ موجّه للكائنات فحسب، بل لتمكين حزم الإضافات من بناء تجريدات موجّهة للكائنات باستخدامها كأساس. بعد إصدار TclOO، تم تحديث مكتبة incr Tcl لاستخدام TclOO كأساس لها. [ 27 ]

تطوير تطبيقات الويب

خادم الويب Tcl هو تطبيق مكتوب بلغة Tcl خالصة لخادم بروتوكول HTTP. يعمل كبرنامج نصي فوق مترجم Tcl عادي.

أباتشي ريفيت هو نظام برمجة مفتوح المصدر لخادم أباتشي HTTP ، يُمكّن المطورين من استخدام لغة Tcl كلغة برمجة نصية لإنشاء تطبيقات ويب ديناميكية. يُشبه ريفيت لغات PHP و ASP و JSP . وقد طُوّر ريفيت بشكل أساسي من قِبل دامون كورتني، وديفيد ويلتون، وماسيمو مانغي، وهارالد أوهلمان، وكارل ليهنباور . يُمكن لريفيت استخدام أيٍّ من آلاف حزم Tcl المتاحة للعموم، والتي تُقدّم ميزات لا حصر لها، مثل التفاعل مع قواعد البيانات (Oracle، و PostgreSQL، و MySQL، و SQLite، وغيرها)، أو واجهات لتطبيقات شائعة مثل مكتبة GD للرسومات .

التفاعل مع اللغات الأخرى

تتكامل لغة Tcl بشكل أصلي مع لغة C. [ 40 ] ويعود ذلك إلى أنها كُتبت في الأصل لتكون إطار عمل يوفر واجهةً نحويةً للأوامر المكتوبة بلغة C، وتُنفَّذ جميع أوامر اللغة (بما في ذلك ما قد يُعتبر كلمات مفتاحية ، مثل ` if` أو `` while) بهذه الطريقة. تُمرَّر إلى كل دالة تنفيذ أمر مصفوفة من القيم التي تصف وسائط الأمر (المُستبدلة مسبقًا)، ولها حرية تفسير هذه القيم كما تراه مناسبًا.

غالباً ما تتضمن برامج محاكاة المنطق الرقمي واجهة برمجة نصية Tcl لمحاكاة لغات الأجهزة Verilog و VHDL و SystemVerilog .

توجد أدوات (مثل SWIG و Ffidl ) لتوليد التعليمات البرمجية اللازمة تلقائيًا لربط وظائف C العشوائية ووقت تشغيل Tcl، ويقوم Critcl بالعكس، مما يسمح بتضمين تعليمات C البرمجية العشوائية داخل نص Tcl وتجميعها في وقت التشغيل في ملف DLL .

حزم التوسعة

The Tcl language has always allowed for extension packages, which provide additional functionality, such as a GUI, terminal-based application automation, database access, and so on. Commonly used extensions include:

Tk
The most popular Tcl extension is the Tk toolkit, which provides a graphical user interface library for a variety of operating systems. Each GUI consists of one or more frames. Each frame has a layout manager.
Expect
One of the other very popular Tcl extensions is Expect extension. The early close relationship of Expect with Tcl is largely responsible for the popularity of Tcl in prolific areas of use such as in Unix testing, where Expect was (and still is today) employed very successfully to automate telnet, ssh, and serial sessions to perform many repetitive tasks (i.e., scripting of formerly interactive-only applications). Tcl was the only way to run Expect, so Tcl became very popular in these areas of industry.
Tile/Ttk
Tile/Ttk[41] is a styles and theming widget collection that can replace most of the widgets in Tk with variants that are truly platform native through calls to an operating system's API. Themes covered in this way are Windows XP, Windows Classic, Qt (that hooks into the X11KDE environment libraries) and Aqua (Mac OS X). A theme can also be constructed without these calls using widget definitions supplemented with image pixmaps. Themes created this way include Classic Tk, Step, Alt/Revitalized, Plastik and Keramik. Under Tcl 8.4, this package is known as Tile, while in Tcl 8.5 it has been folded into the core distribution of Tk (as Ttk).
Tix
Tix, the Tk Interface eXtension, is a set of user interface components that expand the capabilities of Tcl/Tk and Python applications. It is an open source software package maintained by volunteers in the Tix Project Group and released under a BSD-style license.[42]
Itcl/IncrTcl
Itcl is an object system for Tcl, and is normally named as [incr Tcl] (that being the way to increment in Tcl, similar in fashion to the name C++).
Tcllib
Tcllib is a set of scripted packages for Tcl that can be used with no compilation steps.
Tklib
Tklib is a collection of utility modules for Tk, and a companion to Tcllib.
tDOM
tDOM is a Tcl extension for parsing XML, based on the Expat parser
TclTLS
TclTLS is OpenSSL extension to Tcl.
TclUDP
يوفر ملحق TclUDP [ 43 ] مكتبة بسيطة لدعم مقابس بروتوكول بيانات المستخدم (UDP) في Tcl.
TWAPI
TWAPI (واجهة برمجة تطبيقات ويندوز Tcl) هي امتداد لـ Tcl يوفر روابط لواجهة برمجة تطبيقات ويندوز.
قواعد البيانات
تُعدّ واجهة اتصال قواعد البيانات Tcl (TDBC)، وهي جزء من Tcl 8.6، واجهة شائعة للوصول إلى قواعد البيانات في نصوص Tcl البرمجية. وهي تدعم حاليًا برامج تشغيل للوصول إلى قواعد بيانات MySQL و ODBC و PostgreSQL و SQLite . ومن المخطط إضافة المزيد في المستقبل. كما يُدعم الوصول إلى قواعد البيانات من خلال ملحقات خاصة بكل قاعدة بيانات، والتي يتوفر منها العديد. [ 44 ]

انظر أيضاً

مراجع

  1. 1 2 "تطوير Tcl/Tk الأساسي" . Tcl Developer Xchange . تم الاسترجاع في 1 نوفمبر 2016 .
  2. " [ TCLCORE ] تم إصدار Tcl 9.0.4" . 26 يونيو 2026. تم الاطلاع عليه في 27 يونيو 2026 .
  3. "شروط ترخيص Tcl/Tk" . Tcl Developer Xchange . تم الاطلاع عليه بتاريخ 2016-11-02 .
  4. "مجموعة أدوات تطوير Tcl - المُصرّف" . وثائق ActiveState . مؤرشف من الأصل بتاريخ 20-10-2016 . تم الاطلاع عليه بتاريخ 02-11-2016 .
  5. ليردورف، راسموس (26 أبريل 2007). "PHP على الهرمونات - عرض تاريخي لـ PHP قدمه راسموس ليردورف في مؤتمر MySQL في سانتا كلارا، كاليفورنيا" . شبكة المحادثات . تم الاطلاع عليه بتاريخ 11 ديسمبر 2009 . 
  6. "PowerShell وWPF: ما هذا بحق الجحيم؟" . مدونة Windows PowerShell . مايكروسوفت. مؤرشف من الأصل في 25 ديسمبر 2008. تم الاطلاع عليه في 3 أبريل 2019 .
  7. "نصوص TH1" . أحفورة.
  8. كيني، كيفن (4 يوليو 2005). "ردًا على: شهادة TCL" . مجموعة الأخبار : comp.lang.tcl . 
  9. "اللغة" . منتدى مطوري Tcl . تم الاطلاع عليه بتاريخ 2016-11-02 .
  10. أساسيات لغة Tcl ، الفصل 1 في البرمجة العملية بلغة Tcl وTk ، رقم ISBN 0-13-038560-3
  11. 1 2 من الغلاف الداخلي لكتاب Tcl ومجموعة أدوات Tk ، رقم ISBN 0-201-63337-X
  12. "استخدامات Tcl/Tk" . Tcl Developer Xchange . تم الاطلاع عليه بتاريخ 2016-11-02 .
  13. "دليل تكوين برمجة Cisco IOS باستخدام TCL" . دعم Cisco . تم ​​الاطلاع عليه بتاريخ 2016-11-02 .
  14. جون أوسترهوت. "تاريخ لغة Tcl" . صفحات شخصية . جامعة ستانفورد . تم الاطلاع عليه بتاريخ 9 أغسطس 2011 .
  15. "تاريخ لغة Tcl" . موقع Tcl Developer Xchange . تم الاطلاع عليه بتاريخ 2016-11-02 .
  16. "EDA" . wiki.tcl-lang.org . تم الاطلاع عليه بتاريخ 27-04-2022 .
  17. "جون ك. أوسترهوت - الفائز بالجائزة" . جوائز أكاديمية موسيقى الريف . تم الاطلاع عليه بتاريخ 4 نوفمبر 2016 .
  18. من ويكي Tcler's Wiki: Tcl vs. TCL
  19. "إعلان إصدار Tcl/Tk 8.0" . Tcl Developer Xchange . تم الاطلاع عليه بتاريخ 1 يوليو 2014 .
  20. "إعلان إصدار Tcl/Tk 8.1" . Tcl Developer Xchange . تم الاطلاع عليه بتاريخ 1 يوليو 2014 .
  21. 1 2 "ميزات التعبيرات النمطية الجديدة في Tcl 8.1" . Tcl Developer Xchange . تم الاطلاع عليه بتاريخ 2 نوفمبر 2016 .
  22. "إعلان إصدار Tcl/Tk 8.2" . منتدى مطوري Tcl . 18 أغسطس 1999. تاريخ الاسترجاع: 1 يوليو 2014 .
  23. "إعلان إصدار Tcl/Tk 8.4" . Tcl Developer Xchange . 2013-06-01 . تم الاطلاع عليه بتاريخ 2014-07-01 .
  24. "نصيحة رقم 237: الأعداد الصحيحة ذات الدقة العشوائية في لغة Tcl" . موقع Tcl Developer Xchange . تم الاطلاع عليه بتاريخ 1 نوفمبر 2016 .
  25. "نصيحة رقم 194: الإجراءات كقيم باستخدام دالة apply" . موقع Tcl Developer Xchange . تم الاطلاع عليه بتاريخ 1 نوفمبر 2016 .
  26. "إعلان إصدار Tcl/Tk 8.5" . منتدى مطوري Tcl . 18 سبتمبر 2013. تاريخ الاسترجاع: 1 يوليو 2014 .
  27. 1 2 "إعلان إصدار Tcl/Tk 8.6" . Tcl Developer Xchange . 2013-09-20 . تم الاطلاع عليه بتاريخ 2014-07-01 .
  28. "إعلان إصدار Tcl/Tk 9.0" . منتدى مطوري Tcl . 2024-09-26 . تاريخ الاسترجاع: 2024-09-26 .
  29. "مؤتمرات Tcl/Tk" . منتدى مطوري Tcl . تم الاطلاع عليه بتاريخ 1 نوفمبر 2016 .
  30. "FlightAware" . GitHub . تم الاسترجاع في 2024-10-02 .
  31. 1 2 3 "نصيحة رقم 257: البرمجة الكائنية في لغة Tcl" . موقع Tcl Developer Xchange . تم الاطلاع عليه بتاريخ 1 نوفمبر 2016 .
  32. "تنزيل مصادر Tcl/Tk" . Tcl Developer Xchange . تم الاطلاع عليه بتاريخ 1 نوفمبر 2016 .
  33. "Safe Tcl" . Tcl Developer Xchange . تم الاسترجاع في 1 نوفمبر 2016 .
  34. براون، لوري (18-20 سبتمبر 1996). "أمن الشفرة المتنقلة" . في: بوسوماير، تيري؛ تشاب، لوسي (محرران). وقائع المؤتمر المشترك الثاني، AUUG '96 وAsia-Pacific WWW '96 . ملبورن، أستراليا. ص 50. تاريخ الاسترجاع: 22 مارس 2011 . 
  35. ويلش، برنت ب.؛ جونز، كين؛ هوبز، جيفري (2003). البرمجة العملية بلغة Tcl وTk . المجلد 1 ( الطبعة الرابعة). برنتيس هول بي تي آر. ص 291. ISBN    0-13-038560-3.
  36. "صفحة دليل Tcl - أوامر Tcl المدمجة" . Tcl Developer Xchange . تم الاطلاع عليه بتاريخ 14-06-2014 .
  37. ^ "دوديكالوج" . ويكي تيكلير . تم الاسترجاع 2014/06/14 .(يحتوي أيضًا على نسخة مختصرة من القواعد بعنوان "الثمانية").
  38. "صفحة دليل الترقية - الأوامر المدمجة" . Tcl Developer Xchange . تم الاسترجاع في 14-06-2016 .
  39. "صفحة دليل upvar - الأوامر المدمجة" . Tcl Developer Xchange . تم الاسترجاع في 14-06-2016 .
  40. "واجهة برمجة تطبيقات Tcl C" . tcl.tk. تم الاطلاع عليه بتاريخ 2016-11-02 .
  41. "Tile: محرك تصميم مُحسّن لـ Tk" . SourceForge . تم الاطلاع عليه بتاريخ 7 أغسطس 2016 .
  42. "رخصة تيكس" . سورس فورج . تم الاطلاع عليه في 7 أغسطس 2012 .
  43. "TclUDP" . ويكي مستخدمي لغة Tcl . تم الاطلاع عليه في 7 أغسطس 2012 .
  44. "TDBC" . ويكي مستخدمي Tcl . تم الاطلاع عليه في 7 أغسطس 2012 .

للمزيد من القراءة