راكو (لغة برمجة)
راكو هي إحدى لغات البرمجة التابعة لعائلة بيرل . [ 6 ] كانت تُعرف سابقًا باسم بيرل 6 ، وأُعيد تسميتها في أكتوبر 2019. [ 7 ] [ 8 ] تُدمج راكو عناصر من العديد من اللغات الحديثة والتاريخية. لم يكن التوافق مع بيرل هدفًا أساسيًا، على الرغم من أن وضع التوافق مُدرج ضمن مواصفاتها. بدأت عملية تصميم راكو في عام 2000.
تاريخ
في بيرل 6، قررنا أنه من الأفضل إصلاح اللغة بدلاً من إصلاح المستخدم.
— لاري وول [ 9 ]
أُعلن عن عملية تصميم راكو لأول مرة في 19 يوليو 2000، في اليوم الرابع من مؤتمر بيرل في ذلك العام ، [ 10 ] من قِبل لاري وول في محاضرته "حالة البصل 2000 " . [ 11 ] في ذلك الوقت، كانت الأهداف الرئيسية هي إزالة "العيوب التاريخية" من اللغة؛ "يجب أن تبقى الأمور السهلة سهلة، والأمور الصعبة أسهل، والأمور المستحيلة أصعب"؛ وتنظيف شامل للتصميم الداخلي وواجهات برمجة التطبيقات (APIs). بدأت العملية بسلسلة من طلبات التعليقات (RFCs). كانت هذه العملية مفتوحة لجميع المساهمين، ولم تترك أي جانب من جوانب اللغة مغلقًا أمام التغيير. [ 12 ]
بعد اكتمال عملية طلب التعليقات (RFC)، قام وول بمراجعة وتصنيف كل طلب من الطلبات الـ 361 الواردة. ثم شرع في كتابة عدة "ملخصات" (Apocalypses)، مستخدمًا المعنى الأصلي للمصطلح ، وهو "الكشف". [ 13 ] وبينما كان الهدف الأصلي هو كتابة ملخص واحد لكل فصل من فصول كتاب برمجة بيرل ، أصبح من الواضح أنه مع كتابة كل ملخص، يتم إبطال الملخصات السابقة بالتغييرات اللاحقة. لهذا السبب، تم نشر مجموعة من الملخصات الموجزة (Synopses)، يربط كل منها محتويات الملخص، مع تضمين أي تغييرات لاحقة في التحديثات. اليوم، تتم إدارة مواصفات راكو من خلال مجموعة اختبارات "روست" (roast)، [ 14 ] بينما يتم الاحتفاظ بالملخصات الموجزة كمرجع تاريخي. [ 15 ]
توجد أيضًا سلسلة من الشروحات التي كتبها داميان كونواي، تشرح محتوى كل سفر من أسفار نهاية العالم من منظور الاستخدام العملي. يتضمن كل شرح أمثلة برمجية مصحوبة بمناقشة لاستخدام هذه الأمثلة وآثارها. [ 16 ]
تُستخدم ثلاث طرق رئيسية للتواصل في تطوير راكو اليوم. الأولى هي قناة راكو للدردشة عبر الإنترنت (IRC) على منصة ليبرا تشات . والثانية هي مجموعة من القوائم البريدية . [ 17 ] والثالثة هي مستودع شفرة المصدر Git المُستضاف على منصة GitHub . [ 18 ]
الأهداف الأولية والآثار المترتبة
كان الهدف الرئيسي الذي اقترحه وال في خطابه الافتتاحي هو إزالة العيوب التاريخية. وشملت هذه العيوب الالتباس المحيط باستخدام الرموز للحاويات، والغموض بين selectالدوال، والتأثير النحوي لمقابض الملفات المجردة . وكانت هناك العديد من المشاكل الأخرى التي ناقشها مبرمجو بيرل لسنوات، وقد تناولها وال بشكل صريح في خطابه.
كان من تبعات هذه الأهداف أن لغة بيرل 6 لن تتمتع بالتوافق مع الإصدارات السابقة من قاعدة بيانات بيرل الحالية. هذا يعني أن بعض الأكواد التي فسرها مُصرّف بيرل 5 بشكل صحيح لن يقبلها مُصرّف بيرل 6. ولأن التوافق مع الإصدارات السابقة هدف شائع عند تطوير البرمجيات، كان لا بد من توضيح التغييرات الجذرية في بيرل 6 بشكل صريح. وقد أصبح الفارق بين بيرل 5 وبيرل 6 كبيرًا لدرجة أنه في النهاية أُعيد تسمية بيرل 6 إلى راكو.
جالب الحظ

تميمة لغة البرمجة هي "كاميليا، حشرة راكو". [ 1 ] اسمها إشارة إلى تميمة الجمل المرتبطة بلغة بيرل ، وشكلها، على غرار تقاليد مجتمع بيرل المحبة للتورية، هو تورية على عبارة " خطأ برمجي ". تشبه التصاميم الحلزونية المدمجة في أجنحتها الشبيهة بالفراشة الأحرف "P6"، وهو اللقب المفضل لبيرل 6، وموضع عينيها غير المتمركز هو تورية مقصودة على كلمة "أحواجب". [ 19 ]
كان أحد الأهداف الكامنة وراء التصميم النابض بالحياة والملون للشعار هو الحد من كراهية النساء في المجتمع، وأن يكون فرصة لأولئك الذين "يميلون إلى الذكورة" لإظهار جانبهم الحساس. [ 20 ]
التطبيقات
اعتبارًا من عام 2017، تطبيق راكودو فقط هو الذي يخضع للتطوير النشط. لن يتم اعتماد أي تطبيق على أنه تطبيق راكو الرسمي؛ بل "راكو هو أي شيء يجتاز مجموعة الاختبارات الرسمية". [ 21 ]
يستهدف Rakudo Perl 6 [ 22 ] [ 23 ] عددًا من الآلات الافتراضية، مثل MoarVM ، وآلة جافا الافتراضية ، وجافا سكريبت . MoarVM هي آلة افتراضية مصممة خصيصًا لـ Rakudo [ 24 ] ومجموعة أدوات NQP Compiler Toolchain. [ 25 ] توجد طبقة وسيطة بين Raku والآلات الافتراضية تُسمى Not Quite Perl 6 (NQP)، تُنفذ قواعد Raku لتحليل Raku، بالإضافة إلى شجرة بناء جملة مجردة وتوليد كود خاص بالواجهة الخلفية . كُتبت أجزاء كبيرة من Rakudo بلغة Raku، أو بمجموعتها الفرعية NQP. لا يُعد Rakudo تطبيقًا ذاتي الاستضافة بالكامل ، ولا توجد خطط محددة في الوقت الحالي لجعل Rakudo مُترجمًا تمهيديًا .
التطبيقات التاريخية
كان برنامج Pugs تطبيقًا أوليًا للغة Perl 6 مكتوبًا بلغة Haskell ، بقيادة أودري تانغ . وكان يُعدّ في السابق التطبيق الأكثر تطورًا للغة Perl 6. وبحلول منتصف عام 2007، أصبح البرنامج شبه متوقف عن العمل، مع تحديثات تقتصر على مواكبة أحدث إصدار من مُصرّف Glasgow Haskell (GHC). ومنذ نوفمبر 2014، توقف دعم Pugs نهائيًا. [ 26 ]
في عام ٢٠٠٧، كُتبت v6-MiniPerl6 ("mp6") وإعادة تنفيذها، v6-KindaPerl6 ("kp6")، كوسيلة لتهيئة معيار Perl-6.0.0 STD باستخدام Perl 5. يُعدّ STD قواعد نحوية كاملة لـ Perl 6 ومكتوبًا بلغة Perl 6. نظريًا، أي برنامج قادر على تحليل STD وإنشاء كود قابل للتنفيذ يُعتبر نظام تهيئة مناسبًا لـ Perl 6. يتم حاليًا تجميع kp6 بواسطة mp6 ويمكنه العمل مع العديد من الواجهات الخلفية. [ ٢٧ ] [ ٢٨ ] لا يُعدّ كل من mp6 وkp6 تطبيقين كاملين لـ Perl 6، وإنما صُمّما فقط لتوفير الحد الأدنى من الميزات المطلوبة لتهيئة مُجمِّع Perl 6 كامل.
كان Yapsi عبارة عن مترجم ووقت تشغيل مكتوب بلغة Perl 6. ونتيجة لذلك، كان يتطلب وجود مترجم Perl 6 موجود، مثل أحد إصدارات Rakudo Star، لتشغيله. [ 29 ]
نيتشا، وهو جهد رئيسي آخر لتنفيذ لغة بيرل 6، ركز على تحسين البحث في التنفيذ الفعال. وهو يستهدف البنية التحتية للغة المشتركة . [ 30 ]
نظام الوحدات
تطلب مواصفات راكو تحديد الوحدات النمطية بالاسم والإصدار والصلاحية. [ 31 ] من الممكن تحميل إصدار محدد فقط من الوحدة النمطية، أو حتى وحدتين نمطيتين تحملان الاسم نفسه ولكنهما تختلفان في الإصدار أو الصلاحية. ولتسهيل الأمر، يتم توفير اختصار للاسم.
لا يدعم نظام توزيع وحدات بيرل (CPAN ) وحدات راكو حتى الآن. وبدلاً من ذلك، يتم استخدام نظام وحدات تجريبي. [ 32 ]
تغييرات كبيرة عن لغة بيرل
يختلف بيرل وراكو اختلافًا جوهريًا، مع أن الهدف العام كان الحفاظ على جوهر بيرل في راكو، بحيث يكون راكو بوضوح "لغة برمجة بيرل". تهدف معظم التغييرات إلى توحيد اللغة، لتسهيل فهمها على المبرمجين المبتدئين والخبراء على حد سواء، ولجعل "الأمور السهلة أسهل والأمور الصعبة أكثر إمكانية".
المواصفات
يتمثل أحد الفروقات غير التقنية الرئيسية بين بيرل وراكو في أن راكو بدأت كمواصفة رسمية. [ 33 ] وهذا يعني إمكانية إعادة تنفيذ راكو عند الحاجة، كما يعني أيضًا أن المبرمجين ليسوا مضطرين لقراءة شفرة المصدر للحصول على المرجع النهائي لأي ميزة. في المقابل، في بيرل، لا تُعتبر الوثائق الرسمية مرجعًا نهائيًا، بل تصف سلوك مُفسِّر بيرل الفعلي بشكل غير رسمي. وأي اختلافات بين الوثائق والتنفيذ قد تؤدي إلى تعديل أحدهما ليعكس الآخر، وهي ديناميكية تُحفز التطوير والتحسين المستمر لإصدارات بيرل.
نظام الكتابة
في راكو، تم تعزيز نظام الأنواع الديناميكي في بيرل بإضافة أنواع ثابتة . [ 34 ] على سبيل المثال:
my Int $i = 0 ; my Rat $r = 3.142 ; my Str $s = "Hello, world" ; ومع ذلك، يظل التحديد الثابت للأنواع اختياريًا ، لذا يمكن للمبرمجين القيام بمعظم الأشياء دون أي تحديد صريح للأنواع على الإطلاق:
my $i = "25" + 10 ; $i is 35يقدم راكو نظام كتابة تدريجي ، حيث يمكن للمبرمج اختيار استخدام الكتابة الثابتة، أو استخدام الكتابة الديناميكية، أو مزج الاثنين.
قوائم معلمات الروتينات الفرعية الرسمية
تُعرّف لغة بيرل الدوال الفرعية دون قوائم معاملات رسمية على الإطلاق (مع إمكانية إجراء عدّ المعاملات البسيط وبعض عمليات التحقق من الأنواع باستخدام "النماذج الأولية" في بيرل). تُحوّل وسائط الدالة الفرعية المُمرّرة إلى عناصر المصفوفة @_. إذا تم تعديل عناصر المصفوفة @_، تنعكس التغييرات في البيانات الأصلية.
يُدخل راكو المعاملات الرسمية الحقيقية إلى اللغة. [ 35 ] في راكو، يبدو تعريف الروتين الفرعي كما يلي:
sub do_something ( Str $thing , Int $other ) { ... } كما هو الحال في لغة بيرل، تُعدّ المعاملات الرسمية (أي المتغيرات في قائمة المعاملات) أسماءً بديلة للمعاملات الفعلية (القيم المُمرّرة)، ولكن افتراضيًا، تكون هذه الأسماء البديلة ثابتة ولا يمكن تعديلها. يمكن تعريفها صراحةً كأسماء بديلة للقراءة والكتابة للقيمة الأصلية، أو كنسخ باستخدام is rwالتوجيهات is copyالمناسبة، إذا احتاج المبرمج إلى تعديلها محليًا.
أوضاع تمرير المعلمات
يوفر Raku ثلاثة أوضاع أساسية لتمرير المعلمات: المعلمات الموضعية، والمعلمات المسماة ، ومعلمات slurpy.
المعاملات الموضعية هي قائمة المعاملات المرتبة الشائعة في معظم لغات البرمجة. يمكن أيضًا تمرير جميع المعاملات باستخدام أسمائها دون ترتيب. أما المعاملات المسماة فقط (المشار إليها بـ :قبل اسم المعامل) فلا يمكن تمريرها إلا بتحديد اسمها، أي أنها لا تستقبل وسيطًا موضعيًا. المعاملات المتغيرة (المشار إليها بـ *قبل اسم المعامل) هي أداة Raku لإنشاء الدوال المتغيرة الوسائط . يستقبل جدول التجزئة المتغيرة المعاملات المتبقية التي تم تمريرها بالاسم، بينما يستقبل مصفوفة المتغيرة المعاملات المتبقية التي تم تمريرها بالموقع.
فيما يلي مثال على استخدام جميع أوضاع تمرير المعلمات الثلاثة:
sub somefunction ( $a , $b , : $c , : $d , * @e ) { ... } دالة ما ( 1 ، 2 ، : د ( 3 )، 4 ، 5 ، 6 )؛ # $a=1، $b=2، $d=3، @e=(4،5،6)تُعدّ المعاملات الموضعية، مثل تلك المستخدمة أعلاه، مطلوبة دائمًا ما لم يتبعها فاصلة ?للإشارة إلى أنها اختيارية. أما المعاملات المسماة فهي اختيارية افتراضيًا، ولكن يمكن تمييزها على أنها مطلوبة بإضافة فاصلة !بعد اسم المتغير. معاملات Slurpy اختيارية دائمًا .
الكتل والإغلاقات
يمكن أيضًا تمرير المعاملات إلى كتل برمجية عشوائية، والتي تعمل كدوال مغلقة . هكذا تُسمى، على سبيل المثال، مُكرِّرات forالحلقات while. في المثال التالي، يتم اجتياز قائمة، 3 عناصر في كل مرة، وتمريرها إلى كتلة الحلقة كمتغيرات $a, $b, $c. [ 36 ]
for @list -> $a , $b , $c { ... } يُشار إلى هذا عمومًا باسم "الدالة الفرعية المدببة" أو "الكتلة المدببة"، ويتصرف السهم تمامًا مثل الكلمة subالمفتاحية، حيث يُدخل إغلاقًا مجهولًا (أو روتينًا فرعيًا مجهولًا في مصطلحات بيرل). [ 35 ]
ثبات الرمز
في لغة بيرل، تتغير الرموز - وهي علامات الترقيم التي تسبق اسم المتغير - تبعًا لكيفية استخدام المتغير:
# كود بيرل my @ array = ('a', 'b', 'c'); my $element = $ array[1]; # $element يساوي 'b', my @extract = @ array[1, 2]; # @extract equals ('b', 'c') my $element = @ array[1]; # 'b' يأتي مع تحذير (خيار 5.10)
في راكو، تكون الرموز ثابتة، مما يعني أنها لا تتغير بناءً على ما إذا كانت المصفوفة أو عنصر المصفوفة هو المطلوب: [ 34 ]
رمز راكو my @ array = 'a', 'b', 'c'; my $element = @ array[1]; # $element يساوي 'b' my @extract = @ array[1, 2]; # @extract equals ('b', 'c') my @extract = @ array[1]; # @extract equals ('b')
إن التباين في لغة بيرل مستوحى من توافق الأرقام في اللغة الإنجليزية والعديد من اللغات الطبيعية الأخرى:
" هذه التفاحة.". $a صحيح " هذه التفاحات." # @a صحيح " هذه التفاحة الثالثة." $a[3] صحيح " هذه التفاحة الثالثة." # @a[3] خطأ
إلا أن هذا التخطيط المفاهيمي ينهار عند استخدام المراجع ، إذ قد تشير إلى هياكل بيانات حتى وإن كانت قيمًا مفردة. لذا، قد يتطلب التعامل مع هياكل البيانات المتداخلة استخدام صيغة المفرد والجمع في مصطلح واحد.
# كود بيرل: استرجاع قائمة من ورقة التجزئة التي تحتوي على تجزئات تحتوي على مصفوفات my @trans_verbs = @ { $dictionary { 'verb' }{ 'transitive' } };لا يوجد ما يُماثل هذا التعقيد في الاستخدام الشائع للغة الطبيعية أو في لغات البرمجة الأخرى، وهو يُسبب عبئًا ذهنيًا كبيرًا عند كتابة التعليمات البرمجية لمعالجة هياكل البيانات المعقدة. هذه هي نفس التعليمات البرمجية في راكو:
# كود Raku: استرجاع قائمة من ورقة التجزئة التي تحتوي على تجزئات تحتوي على مصفوفات my @trans_verbs = %dictionary<verb><transitive><> ; البرمجة الكائنية التوجه
يدعم بيرل البرمجة كائنية التوجه عبر آلية تُعرف باسم " التخصيص ". يمكن تخصيص أي مرجع ليصبح كائنًا من فئة معينة. يمكن استدعاء توابع على الكائن المُخصَّص باستخدام "صيغة السهم"، مما يدفع بيرل إلى تحديد أو "إرسال" روتين فرعي مناسب بالاسم، واستدعائه مع المتغير المُخصَّص كوسيطه الأول.
على الرغم من قوتها الهائلة، إلا أنها تجعل أبسط حالات البرمجة الكائنية، وهي كائن شبيه بالبنية مع بعض التعليمات البرمجية المرتبطة به، معقدةً بلا داعٍ. إضافةً إلى ذلك، ولأن لغة بيرل لا تستطيع وضع أي افتراضات حول نموذج الكائن المستخدم، فلا يمكن تحسين استدعاء الدوال بشكل جيد.
انطلاقًا من مبدأ "تسهيل الأمور السهلة وجعل الأمور الصعبة ممكنة"، يحتفظ راكو بنموذج البركة ويُقدّم نموذجًا أكثر قوة للكائنات للحالات الشائعة. [ 37 ] على سبيل المثال، يمكن تعريف فئة لتغليف نقطة ديكارتية واستخدامها على النحو التالي:
class Point is rw { has $.x ; has $.y ; دالة المسافة ( النقطة $p ) { الجذر التربيعي لـ (( $!x - $p . x ) ** 2 + ( $!y - $p . y ) ** 2 ) } طريقة المسافة إلى المركز { self.distance : Point.new ( x = > 0 , y = > 0 ) } } my $point = Point.new ( x => 1.2 , y => -3.7 ); say "موقع النقطة: (" , $point.x , ' , ' , $ point.y , ' )' ; # الناتج: موقع النقطة: (1.2، -3.7 )# تغيير قيمتي x و y (لاحظ استخدام الدالتين "x" و " y" كقيم قابلة للتعديل): $point.x = 3 ; $ point.y = 4 ; say " موقع النقطة: (" , $point.x , ' , ' , $point.y , ' ) ' ; # الناتج: موقع النقطة: (3، 4)my $other-point = Point.new ( x => -5 , y => 10 ) ; $ point.distance ( $other-point ); #= > 10 $point.distance - to-center ; # => 5تحل النقطة محل السهم في إشارة إلى العديد من اللغات الأخرى (مثل C++ و Java و Python وما إلى ذلك) التي تجمعت حول النقطة كصيغة لاستدعاء الأساليب.
في مصطلحات راكو، $.xيُطلق على هذا "خاصية". تُسمى هذه الخصائص في بعض اللغات " حقولًا " أو "أعضاء" . تُسمى الطريقة المستخدمة للوصول إلى الخاصية "دالة وصول". دالة الوصول التلقائي هي دالة تُنشأ تلقائيًا وتُسمى باسم الخاصية، كما xهو الحال في المثال أعلاه. تُعيد دوال الوصول هذه قيمة الخاصية. عند تعريف فئة أو خاصية فردية باستخدام المُعدِّل is rw(اختصارًا لـ "قراءة/كتابة")، يمكن تمرير قيمة جديدة إلى دوال الوصول التلقائي لتعيين الخاصية، أو يمكن تعيينها مباشرةً كقيمة قابلة للتعديل (كما في المثال). يمكن استبدال دوال الوصول التلقائي بطرق مُعرَّفة من قِبل المستخدم، إذا رغب المبرمج في واجهة أكثر ثراءً للخاصية. لا يمكن الوصول إلى الخصائص مباشرةً إلا من داخل تعريف الفئة عبر $!الصيغة بغض النظر عن كيفية تعريف الخصائص. يجب أن يمر أي وصول آخر عبر دوال الوصول.
لقد ألهم نظام كائنات Raku إطار عمل Moose الذي يقدم العديد من ميزات البرمجة الكائنية في Raku إلى لغة Perl.
الوراثة والأدوار والفئات
الوراثة هي تقنية تسمح لكائن أو نوع بإعادة استخدام التعليمات البرمجية أو التعريفات من كائنات أو أنواع موجودة. على سبيل المثال، قد يرغب المبرمج في إنشاء نوع قياسي مع إضافة سمة إضافية. في لغات أخرى، مثل جافا، تُتاح الوراثة من خلال السماح للفئات بأن تكون فئات فرعية من فئات موجودة.
يوفر راكو إمكانية التوريث من خلال الفئات، والتي تشبه الفئات في اللغات الأخرى، والأدوار.
تؤدي الأدوار في راكو وظيفة الواجهات في جافا ، والمزيجات في روبي، والسمات [ 38 ] في PHP وفي لغة Squeak المتوافقة مع Smalltalk . وهي تشبه إلى حد كبير الفئات، لكنها توفر آلية تركيب أكثر أمانًا. [ 39 ] تُستخدم هذه الأدوار لإجراء التركيب عند استخدامها مع الفئات بدلاً من إضافتها إلى سلسلة الوراثة الخاصة بها . تُعرّف الأدوار أنواعًا اسمية؛ فهي توفر أسماءً دلالية لمجموعات السلوك والحالة. الفرق الأساسي بين الدور والفئة هو أن الفئات قابلة للإنشاء، بينما الأدوار غير قابلة للإنشاء. [ 40 ]
على الرغم من أن الأدوار تختلف عن الفئات، فإنه من الممكن كتابة كود Raku يقوم بإنشاء دور مباشرةً أو يستخدم دورًا ككائن نوع، حيث يقوم Raku تلقائيًا بإنشاء فئة بنفس اسم الدور، مما يتيح استخدام الدور بشفافية كما لو كان فئة. [ 41 ]
باختصار، الدور عبارة عن مجموعة من الأساليب والخصائص (التي قد تكون مجردة) التي يمكن إضافتها إلى فئة دون استخدام الوراثة. بل يمكن إضافة الدور إلى كائن فردي؛ في هذه الحالة، سيقوم راكو بإنشاء فئة فرعية مجهولة، وإضافة الدور إليها، وتغيير فئة الكائن إلى الفئة الفرعية المجهولة.
على سبيل المثال، يُصنف الكلب ضمن الثدييات لأنه يرث بعض الخصائص منها، كالغدد الثديية والعمود الفقري (الذي ينحدر من الفقاريات ) . من جهة أخرى، قد يمتلك الكلب أنماط سلوكية مختلفة، وهذه الأنماط قد تتغير بمرور الوقت. فمثلاً، قد يكون الكلب أليفاً ، أو ضالاً (إذ يكتسب الحيوان الأليف المهجور سلوكيات للبقاء على قيد الحياة لا ترتبط عادةً بالحيوانات الأليفة)، أو كلباً مرشداً للمكفوفين (كلاب الإرشاد مُدربة، لذا فهي لا تبدأ حياتها ككلاب إرشاد). مع ذلك، تُعد هذه أنماطاً سلوكية إضافية يمكن إضافتها إلى الكلب. كما يُمكن وصف هذه الأنماط السلوكية بطريقة تُتيح تطبيقها على حيوانات أخرى، فمثلاً، يُمكن أن تكون القطة أليفةً أو ضالةً. لذا، يختلف الكلب عن القطة، مع بقائهما ضمن فئة الثدييات العامة. إذن، الثدييات فئة، والكلب والقط فئتان ترثان من الثدييات. لكن السلوكيات المرتبطة بالحيوان الأليف، والحيوان الضال، والدليل هي أدوار يمكن إضافتها إلى الفئات، أو كائنات يتم إنشاؤها من الفئات.
الصنف الثدييات هو فقاري { ... } فئة الكلب هي من الثدييات { ... } دور الحيوان الأليف { ... } دور الضال { ... } دليل الأدوار { ... } تُضاف الأدوار إلى فئة أو كائن باستخدام doesالكلمة المفتاحية `role`. ولإظهار الوراثة من فئة، تُستخدم كلمة مفتاحية مختلفة `role` is. تعكس الكلمات المفتاحية المعاني المختلفة للميزتين: فتركيب الأدوار يُعطي الفئة سلوك الدور، لكنه لا يُشير إلى أنه مطابق تمامًا للدور .
class GuideDog is Dog does Guide { ... } # الفئة الفرعية تُكوّن الدورmy $dog = new Dog ; $dog does Guide ; # كل كائن يُكوّن دورهعلى الرغم من أن الأدوار تختلف عن الأصناف، إلا أن كليهما يُعتبران نوعين، لذا يمكن أن يظهر الدور في تعريف متغير حيث يُوضع الصنف عادةً. على سبيل المثال، قد يتضمن دور "كفيف" لشخص ما سمة من نوع "دليل"؛ ويمكن أن تحتوي هذه السمة على "كلب دليل"، أو " حصان دليل" ، أو "إنسان دليل"، أو حتى "آلة دليل".
class Human { has Dog $dog ; # يمكن أن يحتوي على أي نوع من الكلاب، سواء كان يقوم بدور ... # المرشد أم لا } دور أعمى { يحتوي على دليل $guide ; # يمكن أن يحتوي على أي كائن يقوم بدور الدليل، ... # سواء كان كلبًا أو شيئًا آخر } التعبيرات النمطية
لطالما كان دعم لغة بيرل للتعبيرات النمطية ومعالجة السلاسل النصية من أبرز سماتها. [ 42 ] ونظرًا لأن بنيات مطابقة الأنماط في بيرل قد تجاوزت قدرات التعبيرات النمطية لبعض الوقت، [ 43 ] فإن وثائق راكو تشير إليها حصريًا باسم regex ، مما يُبعد المصطلح عن تعريفه الرسمي.
توفر Raku مجموعةً شاملةً من ميزات Perl فيما يتعلق بالتعبيرات النمطية، حيث تدمجها في إطار عمل أوسع يُسمى " القواعد "، والتي توفر إمكانيات تحليل السياق (مثل المسندات النحوية لقواعد التعبيرات و ANTLR )، بالإضافة إلى كونها بمثابة إغلاق فيما يتعلق بنطاقها المعجمي . [ 44 ] تُعرَّف القواعد باستخدام الكلمة المفتاحية التي يُشابه استخدامها تعريف الروتينات الفرعية. كما يُمكن تعريف القواعد المجهولة باستخدام الكلمة المفتاحية (أو )، أو يُمكن استخدامها مباشرةً كما كانت تُستخدم التعبيرات النمطية في Perl عبر عاملي المطابقة () أو الاستبدال ().ruleregexrxms
في كتاب "نهاية العالم 5" ، عدد لاري وول 20 مشكلة في "ثقافة التعبيرات النمطية الحالية". من بين هذه المشاكل أن تعبيرات بيرل النمطية "مختصرة جدًا ولطيفة"، و"تعتمد بشكل مفرط على عدد قليل جدًا من الأحرف الخاصة"، و"دعمها ضعيف لعمليات الالتقاط المسماة"، و"دعمها ضعيف للقواعد النحوية"، و"ضعف تكاملها مع اللغة الحقيقية". [ 45 ]
التبسيط النحوي
تم تغيير بعض بنيات لغة بيرل في راكو، لتحسينها وفقًا لمؤشرات نحوية مختلفة في الحالات الأكثر شيوعًا. على سبيل المثال، أصبحت الأقواس ( الأقواس الدائرية ) المطلوبة في بنيات التحكم في التدفق في بيرل اختيارية الآن: [ 36 ]
إذا كانت القيمة صحيحة () { لكل مصفوفة @array { ... } } كذلك، ,أصبح عامل الفاصلة الآن مُنشئًا للقوائم، لذا لم تعد هناك حاجة إلى وضع أقواس حول القوائم. الكود
@array = 1 , 2 , 3 , 4 ; الآن يقوم بإنشاء @arrayمصفوفة تحتوي بالضبط على العناصر '1' و '2' و '3' و '4'.
المقارنات المتسلسلة
يسمح نظام راكو بإجراء مقارنات متسلسلة. أي أنه يُسمح بتسلسل من المقارنات مثل ما يلي:
إذا كانت درجة الحرارة تتراوح بين 20 و 25 ، فسيتم عرض رسالة "درجة حرارة الغرفة تتراوح بين 20 و 25!". } يتم التعامل مع هذا كما لو أن كل مقارنة من اليسار إلى اليمين قد تم إجراؤها على حدة، ويتم دمج النتيجة منطقياً من خلال andالعملية.
التقييم الكسول
يستخدم Raku طريقة التقييم الكسول للقوائم والتي كانت سمة لبعض لغات البرمجة الوظيفية مثل Haskell : [ 46 ]
@integers = 0 .. Inf ; # أعداد صحيحة من 0 إلى ما لا نهايةلن يتسبب الكود أعلاه في حدوث عطل عند محاولة تعيين قائمة ذات حجم لانهائي للمصفوفة @integers، ولن يتوقف إلى أجل غير مسمى عند محاولة توسيع القائمة إذا تم البحث في عدد محدود من الخانات.
هذا يبسط العديد من المهام الشائعة في Raku بما في ذلك عمليات الإدخال/الإخراج ، وتحويلات القوائم، وتمرير المعلمات.
يجتمع
يرتبط بالتقييم الكسول إنشاء قوائم كسولة باستخدام gatherو take، وتتصرف إلى حد ما مثل المولدات في لغات مثل Icon أو Python .
my $squares = lazy gather for 0 .. Inf { take $_ * $_ ; }; $squaresستكون قائمة لا نهائية من الأعداد المربعة، لكن التقييم الكسول gatherيضمن أن يتم حساب العناصر فقط عند الوصول إليها.
التقاطعات
يقدم راكو مفهوم الوصلات : وهي قيم مركبة من قيم أخرى. [ 46 ] في أبسط صورها، تُنشأ الوصلات من خلال دمج مجموعة من القيم باستخدام عوامل الربط :
# مثال لـ | ( أي ) ... } # مثال لربط "الكل": my $password = 'secret!123' ; if $password ~~ /<:alpha>/ & / <:digit> / & / <:punct> / { say "كلمة مرورك آمنة بشكل معقول" ; } |يشير إلى قيمة تساوي إما وسيطه الأيسر أو الأيمن. &يشير إلى قيمة تساوي كلا وسيطيه الأيسر والأيمن. يمكن استخدام هذه القيم في أي كود يستخدم قيمة عادية. العمليات التي تُجرى على نقطة التقاء تؤثر على جميع عناصرها بالتساوي، وتتحد وفقًا لمعامل الربط. لذا، فإن ستنتج . في المقارنات، تُرجع نقاط التقاء نتيجة واحدة صحيحة أو خاطئة للمقارنة. تُرجع نقاط التقاء " " القيمة " صحيحة إذا كانت المقارنة صحيحة لأي عنصر من عناصر نقطة التقاء. تُرجع نقاط التقاء " " القيمة " صحيحة إذا كانت المقارنة صحيحة لجميع عناصر نقطة التقاء.("apple"|"banana") ~ "s""apples"|"bananas"anyall
يمكن أيضًا استخدام نقاط الالتقاء لإثراء نظام الأنواع بشكل أكبر من خلال إدخال نمط من البرمجة العامة يقتصر على نقاط الالتقاء للأنواع:
مجموعة فرعية من اللون لأي مكان RGB_Color | CMYK_Color ؛ دالة get_tint ( اللون $color ، رقم $opacity ) { ... } وحدات الماكرو
في لغات البرمجة منخفضة المستوى، أصبح مفهوم وحدات الماكرو مرادفًا للاستبدال النصي لشفرة المصدر نظرًا للاستخدام الواسع النطاق لمعالج C المسبق . مع ذلك، سبقت لغات البرمجة عالية المستوى، مثل لغة ليسب، لغة سي في استخدامها لوحدات ماكرو أكثر قوة. [ 47 ] هذا المفهوم الشبيه بمفهوم ليسب هو ما ستستفيد منه راكو. [ 35 ] تكمن قوة هذا النوع من وحدات الماكرو في أنه يعمل على البرنامج كبنية بيانات عالية المستوى ، وليس كنص بسيط، ويتمتع بكافة إمكانيات لغة البرمجة.
سيبدو تعريف ماكرو راكو كتعريف روتين فرعي أو تعريف دالة، ويمكنه العمل على سلاسل نصية غير مُحللة، أو شجرة بناء جملة مجردة تمثل كودًا مُحللًا مسبقًا، أو مزيجًا من الاثنين. سيبدو تعريف الماكرو كالتالي: [ 48 ]
macro hello ( $what ) { quasi { say "Hello { {{{$what}}} }" }; } في هذا المثال تحديدًا، لا يتجاوز تعقيد الماكرو استبدالًا نصيًا بسيطًا على غرار لغة C، ولكن نظرًا لأن تحليل مُعامل الماكرو يتم قبل تنفيذه على الكود المُستدعي، ستكون رسائل التشخيص أكثر إفادة. مع ذلك، ولأن جسم الماكرو يُنفذ أثناء الترجمة في كل مرة يُستخدم فيها، يُمكن تطبيق العديد من تقنيات التحسين . بل يُمكن حتى حذف العمليات الحسابية المعقدة من البرامج الناتجة عن طريق تنفيذها أثناء الترجمة.
المعرفات
في لغة بيرل، يمكن استخدام الأحرف والأرقام والشرطات السفلية ASCII في أسماء المعرّفات، وهي متوفرة أيضًا في لغات أخرى. أما في لغة راكو، فيمكن استخدام معظم أحرف يونيكود. بالإضافة إلى ذلك، يمكن استخدام الواصلات وعلامات الترقيم (مع بعض القيود، مثل عدم اتباعها برقم). يؤدي استخدام الواصلات بدلًا من الشرطات السفلية لفصل الكلمات في الاسم إلى نمط تسمية يُسمى " نمط الكباب ".
أمثلة
مرحبا بالعالم
برنامج "مرحباً بالعالم" هو برنامج شائع يُستخدم لتقديم لغة برمجة. في لغة راكو، يكون برنامج "مرحباً بالعالم" كالتالي:
قل "مرحباً بالعالم" ؛ — على الرغم من وجود أكثر من طريقة للقيام بذلك .
مضروب
دالة المضروب في لغة راكو، معرفة بعدة طرق مختلفة:
# استخدام الاستدعاء الذاتي (مع بنية `if\else`) sub fact ( UInt $n --> UInt ) { if $n == 0 { 1 } else { $n * fact ( $n-1 ) } } # استخدام الاستدعاء الذاتي (مع `if` كمعدِّل للعبارة) sub fact ( UInt $n --> UInt ) { return 1 if $n == 0 ; return $n * fact ( $n-1 ); } # استخدام الاستدعاء الذاتي (مع بنية `when`) sub fact ( UInt $n --> UInt ) { when $n == 0 { 1 } default { $n * fact ( $n-1 ) } } # باستخدام عامل الشرط الثلاثي sub fact ( UInt $n --> UInt ) { $n == 0 ?? 1 !! $n * fact ( $n-1 ) } # استخدام الإرسال المتعدد multi fact ( 0 ) { 1 } multi fact ( UInt $n --> UInt ) { $n * fact ( $n - 1 ) } # باستخدام عامل الاختزال الفرعي ( UInt $ n --> UInt ) { [*] 1 .. $n } # إنشاء عامل مضروب واستخدام عامل الاختزال الفرعي اللاحق : <!>( UInt $n --> UInt ) { [*] 1 .. $n } # استخدام مُعرِّف `state` لإنشاء مضروب مُخزَّن مؤقتًا sub fact ( UInt $n --> UInt ) { state %known = 0 => 1 ; return %known { $n } if %known { $n }: exists ; %known { $n } = $n * fact ( $n-1 ); return %known { $n }; } فرز سريع
خوارزمية الفرز السريع هي خوارزمية فرز معروفة. يمكن كتابة تطبيق عملي لها باستخدام نموذج البرمجة الوظيفية بشكل موجز بلغة راكو:
# فرز القوائم الفارغة إلى قائمة فارغة متعددة باستخدام خوارزمية الفرز السريع ([]) { () } # وإلا، استخرج العنصر الأول كعنصر محوري... multi quicksort ([ $pivot , * @rest ]) { # التقسيم. my @before = @rest . grep (* < $pivot ); my @after = @rest . grep (* >= $pivot ); # فرز الأقسام. flat ( quicksort ( @before ), $pivot , quicksort ( @after )) } - ↑ ما لم يكن التنفيذ يقوم بعملية معقدة وغامضة في الخلفية، فإن أقصى عمق ممكن للتكرار هو طول القائمة، مما يجعل هذا التنفيذ غير مناسب للبيانات الضخمة. يمكن الحد من عمق التكرار
log2(list_length)من خلال التكرار في القسم الأكبر من القائمةbefore،afterوالتكرار فقط في القسم الأصغر.
برج هانوي
تُستخدم لعبة برج هانوي غالبًا لتقديم البرمجة التكرارية في علوم الحاسوب. يستخدم هذا التطبيق آلية الإرسال المتعدد والقيود البارامترية في راكو.
multi sub hanoi ( 0 , $, $, $) { } # لا يوجد قرص، لذا لا تفعل أي شيء multi sub hanoi ( $n , $a = 'A' , $b = 'B' , $c = 'C' ) { # ابدأ بـ $n قرصًا وثلاثة أوتاد A وB وC hanoi $n - 1 , $a , $c , $b ; # أولًا، انقل أعلى $n - 1 قرصًا من A إلى B say "انقل القرص $n من الوتد $a إلى الوتد $c" ; # ثم انقل القرص الأخير من A إلى C hanoi $n - 1 , $b , $a , $c ; # أخيرًا، انقل $n - 1 قرصًا من B إلى C } الكتب
شهد تاريخ لغة راكو موجتين من تأليف الكتب. أعقبت الموجة الأولى الإعلان الأولي عن بيرل 6 في عام 2000. وتعكس تلك الكتب حالة تصميم اللغة في ذلك الوقت، وتحتوي في معظمها على مواد قديمة. أما الموجة الثانية، التي أعقبت الإعلان عن الإصدار 1.0 في عام 2015، فتتضمن العديد من الكتب التي نُشرت بالفعل، وبعض الكتب الأخرى التي لا تزال قيد التأليف.
الكتب المنشورة قبل إصدار بيرل 6 الإصدار 1.0 (المعروف باسم الإصدار 6.c)
- راندال، أليسون؛ سوغالسكي، دان؛ توتش، ليوبولد (2003). أساسيات بيرل 6 ( الطبعة الأولى). دار نشر أورايلي ميديا. رقم ISBN 978-0-596-00499-6.
- راندال، أليسون؛ سوغالسكي، دان؛ توتش، ليوبولد (2004). أساسيات بيرل 6 وباروت (الطبعة الثانية ). دار نشر أورايلي ميديا. رقم ISBN 978-0-596-00737-9.
- والترز، سكوت (15 ديسمبر 2004). بيرل 6 الآن: الأفكار الأساسية مع أمثلة من بيرل 5. صوت الخبير في المصادر المفتوحة. ISBN 978-1-59059-395-0.
كما تم نشر كتاب مخصص لواحدة من أوائل الآلات الافتراضية لـ Perl 6، وهي Parrot، في عام 2009.
الكتب المنشورة بعد إصدار بيرل 6 الإصدار 1.0 (المعروف باسم الإصدار 6.c)
- شيتوف، أندرو (2017). بيرل 6 في لمحة . أمازون ديجيتال سيرفيسز ذ.م.م. - كي دي بي. رقم ISBN 978-90-821568-3-6.
- روزنفيلد، لوران؛ داوني، ألين ب. (2017). فكر في بيرل 6. دار نشر أورايلي ميديا. رقم ISBN 978-1-4919-8055-2.
- ميريلو، جيه جيه (9 يوليو 2017). تعلم البرمجة باستخدام بيرل 6: الخطوات الأولى: الدخول إلى عالم البرمجة دون مغادرة سطر الأوامر . تعلم البرمجة باستخدام بيرل. ISBN 978-1-5217-9578-1.
- لينز ، موريتز (27 يوليو 2017). بيرل 6 أساسيات . Apress. رقم ISBN 978-1-4842-2898-2.
- شيتوف، أندرو (7 سبتمبر 2017). الغوص العميق في بيرل 6. دار نشر باكت المحدودة. رقم ISBN 978-1-78728-204-9.
- شيتوف، أندرو (2017). استخدام بيرل 6. ISBN 978-90-821568-1-2.
- سزابو، غابور (3 ديسمبر 2017). تطوير تطبيقات الويب باستخدام لغة بيرل 6. المؤلف.
- لينز، موريتز (4 ديسمبر 2017). التحليل باستخدام بيرل 6: التعابير النمطية والقواعد النحوية: رحلة متكررة في التحليل . دار نشر أبريس. رقم ISBN 978-1-4842-3228-6.
- فوي، برايان د. (2018). تعلم بيرل 6. دار نشر أورايلي ميديا. رقم ISBN 978-1-4919-7768-2.
الكتب المنشورة تحت اسم راكو الجديد
- شيتوف، أندرو (13 أكتوبر 2019). استخدام راكو: 100 تحدٍ برمجي تم حلها بلغة برمجة راكو ( الطبعة الثانية). سوزي ك. إدواردز. ISBN 978-90-821568-8-1.
- شيتوف، أندرو (18 أكتوبر 2019). عبارات راكو المختصرة: الاستفادة القصوى من بنية راكو التعبيرية في مهامك اليومية . أمازون ديجيتال سيرفيسز ذ.م.م. - كي دي بي. رقم ISBN 978-90-821568-9-8.
- لينز، موريتز (6 سبتمبر 2020). أساسيات راكو: مدخل تمهيدي مع أمثلة ومشاريع ودراسات حالة . دار نشر أبريس. doi : 10.1007/978-1-4842-6109-5 . ISBN 978-1-4842-6108-8.
مراجع
- 1 2 جاكسون، جواب (23 يوليو 2010). "مبتكر لغة بيرل يلمح إلى قرب إصدار النسخة السادسة المنتظرة من بيرل" . خدمة أخبار IDG . تم الاطلاع عليه بتاريخ 8 فبراير 2015 .
- ↑ "إعلان: إصدار مواصفات لغة Raku Perl 6 'Diwali' 6.d" . blogs.perl.org . Zoffix Znet. 5 نوفمبر 2018. تاريخ الاطلاع: 19 أغسطس 2022 .
- ↑ "امتدادات أسماء الملفات" . وثائق راكو .
- ↑ "مسرد المصطلحات والمصطلحات التقنية" . مؤسسة بيرل، ويكي بيرل 6. مؤسسة بيرل . 28 فبراير 2011. مؤرشف من الأصل في 21 يناير 2012. تم الاطلاع عليه في 8 فبراير 2015 .
- 1 2唐鳳، المعروفة أيضًا باسم أودري تانغ (21 أبريل 2010). "كيفية تطبيق بيرل 6 في عام 2010" . مؤرشف من الأصل في 25 أبريل 2010.
- ↑ "حول بيرل" . perl.org . تم الاطلاع عليه بتاريخ 11 يونيو 2020 .
"بيرل" هي عائلة من اللغات، و"راكو" (المعروفة سابقًا باسم "بيرل 6") جزء من هذه العائلة، لكنها لغة منفصلة لها فريق تطوير خاص بها. ولا يؤثر وجودها بشكل كبير على استمرار تطوير "بيرل".
- ↑ "إعادة تسمية Perl 6 إلى Raku" . LWN.net . 15 أكتوبر 2019. تم الاطلاع عليه بتاريخ 16 أكتوبر 2019 .
- ↑ "رد TPF على تغيير اسم Raku" . 29 أكتوبر 2019.
- ↑ بيانكوزي، فيديريكو؛ واردن، شين (2009). عقول البرمجة: حوارات مع مبتكري لغات البرمجة الرئيسية . دار نشر أورايلي ميديا. رقم ISBN 978-0596515171.
- ↑ كلاين، جو (21 أغسطس 2000). "تقرير من مؤتمر بيرل" .
- ↑ وول، لاري (2000). "حالة البصل 2000" . شبكة أورايلي.
- ↑ مؤسسة بيرل (2000). "حول وثائق طلب التعليقات (RFCs) الخاصة ببيرل 6" . مؤرشف من الأصل في 26 يوليو 2021. تم الاطلاع عليه في 16 مايو 2020 .
- ↑ وول، لاري (2 أبريل 2001). "نهاية العالم 1: القبيح، والسيئ، والجيد" .
- ↑ "مجموعة اختبارات راكو" . جيت هاب . 2019.
- ↑ وول، لاري ؛ مصممو بيرل 6 (2015). "وثائق تصميم بيرل 6" .
{{cite web}}: صيانة CS1: الأسماء الرقمية: قائمة المؤلفين ( رابط ) - ↑ مؤسسة بيرل (2001). "تفسيرات" . مؤرشف من الأصل في 26 يوليو 2021. تم الاطلاع عليه في 16 مايو 2020 .
- ↑ لغة برمجة راكو (2022). "مجتمع راكو" . مؤرشف من الأصل في 12 أغسطس 2020. تم الاطلاع عليه في 16 مايو 2020 .
- ↑ "راكو" . جيت هاب . تم الاطلاع عليه بتاريخ 19 أغسطس 2022 .
- ↑ "لاري وول في سجل دردشة IRC" . 15 يناير 2016. تم الاطلاع عليه بتاريخ 10 نوفمبر 2017 .
- ↑ "رسالة بريد إلكتروني مؤرشفة بعنوان "اعتبارات الشعار" من لاري وول" . جيت هاب . 24 مارس 2009. تم الاطلاع عليها في 10 نوفمبر 2017 .
- ↑ وول، لاري (10 أغسطس 2004). "ملخص 1: نظرة عامة" .
- ↑ "rakudo/rakudo - GitHub" . Github.com . تم الاطلاع عليه بتاريخ 21 سبتمبر 2013 .
- ↑ ميشو، باتريك (16 يناير 2008). "المترجم المعروف سابقًا باسم 'perl6'"تمت أرشفة هذا النص من المصدر الأصلي في 18 فبراير 2012.
- ↑ وورثينجتون، جوناثان (31 مايو 2013). "MoarVM: آلة افتراضية لـ NQP و Rakudo" . 6guts . تم الاطلاع عليه بتاريخ 24 يوليو 2013 .
- ↑ "NQP - Not Quite Perl على GitHub" . GitHub . 29 مايو 2022. تم الاطلاع عليه بتاريخ 29 مايو 2022 .
- ↑ "مقارنة ميزات مترجمات بيرل 6" . مؤرشف من الأصل في 7 فبراير 2019.
- ↑ وول، لاري ؛ وآخرون (2007). "Perl 6 STD" . GitHub .
- ↑ "أسئلة وأجوبة حول mp6/kp6" . فريق تطوير بيرل 6. 2006. مؤرشف من الأصل في 28 سبتمبر 2007. تم الاطلاع عليه في 2 أبريل 2007 .
- ↑ "Yapsi README" . GitHub . 2011.
- ↑ أورير، ستيفان (29 نوفمبر 2011). "Niecza README.pod" . جيت هاب . تم الاطلاع عليه في 12 يناير 2012 .
- ↑ وول، لاري (2004). "الملخص 11: الوحدات" .
- ↑ "دليل وحدات بيرل 6" . Modules.raku.org . تم الاطلاع عليه بتاريخ 17 مايو 2020 .
- ↑ وول، لاري (10 أغسطس 2004). "ملخص 1: نظرة عامة" .
- 1 2 وول، لاري (20 مايو 2009). "ملخص 2: أجزاء وقطع" .
- 1 2 3 وول، لاري (21 مارس 2003). "ملخص 6: البرامج الفرعية" .
- 1 2 وول، لاري (20 مايو 2009). "ملخص 4: الكتل والعبارات" .
- ↑ وول، لاري (18 أغسطس 2006). "ملخص 12: الأشياء" .
- ↑ مجموعة تأليف البرمجيات (2003). "السمات" . مؤرشف من الأصل في 11 أغسطس 2006. تم الاطلاع عليه في 22 سبتمبر 2006 .
- ↑ وورثينجتون، جوناثان (2009). "اليوم 18: الأدوار" .
- ↑ كروماتيك (2009). "لماذا أدوار بيرل" .
- ↑ "التوجه الكائني" . docs.raku.org . تم الاطلاع عليه بتاريخ 24 أكتوبر 2019 .
- ↑ بارلانتي، نيك (2000). "أساسيات بيرل: معالجة السلاسل النصية باستخدام التعبيرات النمطية" .
- ↑ كريستيانسن، توم (1996). "وصف التعبيرات النمطية في بيرل 5" . مؤرشف من الأصل في 31 مارس 2010. تم الاسترجاع في 25 مارس 2010.
تعبيرات بيرل النمطية "ليست" - أي أنها ليست "منتظمة" لأنها تدعم أيضًا المراجع الخلفية لكل من sed و grep، مما يجعل اللغة لم تعد منتظمة تمامًا
. - ↑ وول، لاري (20 مايو 2009). "ملخص 5: التعبيرات النمطية والقواعد" .
- ↑ وول، لاري (4 يونيو 2002). "نهاية العالم 5: مطابقة الأنماط" . مؤرشف من الأصل في 22 أغسطس 2021. تم الاسترجاع في 16 مايو 2020 .
- 1 2 وول، لاري (13 سبتمبر 2004). "ملخص 9: هياكل البيانات" . Raku.org .
- ↑ لامكينز، ديفيد ب. (8 ديسمبر 2004). لغة ليسب الناجحة: كيفية فهم واستخدام لغة ليسب الشائعة . bookfix.com. مؤرشف من الأصل في 12 سبتمبر 2006. تم الاطلاع عليه في 13 سبتمبر 2006 .
- ↑ "Raku/old-design-docs" . 10 سبتمبر 2024 – عبر GitHub.
روابط خارجية
- لغات البرمجة
- راكو (لغة برمجة)
- لغات البرمجة متعددة الأنماط
- برامج متعددة المنصات
- مترجمات مجانية ومفتوحة المصدر
- لغات البرمجة عالية المستوى
- لغات البرمجة النصية
- لغات البرمجة التي تم إنشاؤها في عام 2015
- برنامج مجاني مكتوب بلغة C
- لغات برمجة ذات بنية قابلة للتوسيع
