مرجع
آخر الزيارات

جيه (لغة برمجة)

1٬763 كلمة•0 مشاهدة•🗒️ منذ 16 يوماً
باختصار: لغة البرمجة جيه J، التي طورها كينيث إي إيفرسون وروجر هوي في التسعينات هي تركيبة من اللغات إيه بي إل(التي طورها إيفرسون كذلك) و FP و FL Function- level اللذان صممهما جون باكوس. تجد هنا «الصندوقية boxed»، «(quicksort y sel e=.y(~?#y» و«if. 1>: #y do. y» ضمن 18 قسماً.
المحتويات
  1. الصندوقية boxed
  2. (quicksort y sel e=.y(~?#y
  3. if. 1>: #y do. y
  4. v
  5. assert. T
  6. أنواع وهياكل البيانات
  7. 59.2
  8. 2.5
  9. +----+
  10. 42 28 10 40 12
  11. هياكل التحكم
  12. التوثيق
  13. 'Hello, world!'
  14. exit
  15. أمثلة
  16. elseif. T2 do. B2
  17. case. T2 do. B2
  18. 17.2 22 21.2 26.4
جيه (لغة برمجة)

قبل الخوض في التفاصيل، لغة البرمجة جيه J، التي طورها كينيث إي إيفرسون وروجر هوي في التسعينات هي تركيبة من اللغات إيه بي إل(التي طورها إيفرسون كذلك) و FP و FL Function- level اللذان صممهما جون باكوس. وتعرض الأقسام التالية جوانب أخرى من الموضوع.

من جانب آخر، ومثل اللغات FP/FL، فإن جيه تدعم البرمجة على المستوى الوظائفي Function- level (الذي تعرف كذلك بالبرمجة الوظائفية عالية النظام) وذلك عبر سمات البرمجة الضمنية بها (لاحظ أن البرمجة على المستوى الوظائفي ليست مثل البرمجة الوظائفية),

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

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

في هذا الإطار، ولغة جيه ليست لغة برمجة فون نيومان von Neumann، ومع ذلك فمن الممكن استخدام أسلوب برمجة فون نيومان.

كذلك، وعلى عكس أغلب اللغات التي تدعم البرمجة ذات التوجه الموضوعي، فإن موضوع مساحة الاسم namespace التسلسلية المرنة للغة جيه (حيث يتواجد كل اسم في منطقة معينة) يمكن استخدامها بصورة فعال لتكون إطارا لكل من البرمجة ذات التوجه الموضوعي المبنية على النموذج الأصلي والأخرى المبنية على الطبقات.

إضافةً إلى ذلك، منذ مارس 2011، أصبحت لغة جيه برنامج مفتوح المصدر وحر تحت ترخيص GPLv3. يمكن للمرء كذلك أن يشتري مصدرا منها للاستخدام التجاري بموجب رخصة يتم التفاوض عليها.

الصندوقية boxed

وعلى صعيد آخر، تدعم لغة جيه كذلك النوع الحرفي (الرمزي الحرفي). تدرج الحروف بين علامات اقتباس 'a' أو "b". كما يتم دعم قائمة من الأحرف كذلك باستخدام تقليد وضع تلك الأحرف الرمزية المتعددة بين علامات اقتباس مثل 'abcdefg'عادة ما يكون عرض الأحرف الرمزية الفردية 8 بايت (ascii)، ولكن جيه كذلك تدعم أحرف مكتوبة أخرى وهي (Unicode). العمليات الرقمية والبوليانية غير مدعومة بالأحرف، ولكن العمليات ذات التوجه التجميعي (مثل rotate) فهي مدعومة.

وفي هذا السياق، يمكن تحويل قوائم البايتات لأرقام صحيحة باستخدام العلامة.verb#. يمكن تحويل الأرقام الصحيحة إلى قوائم من البايتات باستخدام العلامة #:verb. (وعند التحليل تكون كل من J,. و: كيانات تكون كلمات. لا يمكن اعتبارها مطلقا كرموز في حد ذاتها إلا إذا سبقتها مسافة.)

علاوةً على ذلك، الأنماط الرقمية الأخرى تتضمن الأعداد الصحيحة (3، 42)، النقاط العائمة (3.14، 8.8e22)، التركيبات (oj1, 2.5j3e88)، الأرقام الصحيحة الدقيقة المتوسعة (12345678901234567890x)، الكسر المنطقي (الدقة المتوسعة) (1r2, 3r4). وفيما يتعلق بالبايتات، يمكن أن يتم تشكيل تلك في قوائم أو مصفوفات ذات أبعاد اعتباطية. وفيما يتعلق بالبايتات، تتم العمليات على كافة الأرقام الموجودة بالمصفوفة.

من بين هذه الثلاثة تتميز الرقيمة بكثرة تنوعها.

  • 1 0 0 1 0 0 1 0 +. 0 1 0 1 1 0 1 0 ملاحظة: أو
  • 1 1 0 1 1 0 1 0
  • 3 – . 1 0 1 1 0 0 1 1 1 1 1 ملاحظة: دوّر
  • 1 0 0 1 1 1 1 1 1 0 1

كذلك، وفي النهاية، هناك نوع البيانات الصندوقية. عادة يتم وضع البيانات في صندوق باستخدام عملية> (بدون أي برهان أو معطى على اليسار- وإذا ما كان هناك أحد المعطيات على اليسار فسوف تكون تلك عملية «أقل من»). وهذا هو نظير عملية & بلغة السي (بدون أي معطيات يسارية). ومع ذلك حين تكون نتيجة & السي ذات دلالات مرجعية، فإن نتيجة عملية> للجي تكون ذات دلالات قيمة. بمعنى آخر فإن> هي وظيفة وينتج عنها نتيجة. النتيجة هي أبعاد صفرية بغض النظر عن هيكل البيانات المتضمنة. من وجهة نظر مبرمج الجيه،> «تضع البيانات في صندوق» وتدع المبرمج يعمل بمصفوفة من الصناديق (ويمكن دمجها مع صناديق أخرى، أو يمكن عمل نسخ أخرى من هذا الصندوق). البيانات الموجودة بالصندوق يمكن عرضها بلغة جيه، إلى حد ما بعد النمط، يقوم بعض مترجمي لغة SQL بتزيين الجداول الناتجة عن بيانات مختارة.

من جانب آخر، وعلينا أن نعرف أن جيه كذلك تدعم مصفوفات نظامية أعلى من البايتات- ويمكن أن تتكون من مصفوفات ثنائية الأبعاد وثلاثية الأبعاد.. الخ. تلك العمليات المذكورة سابقا تؤدي عملا جيدا في هذه المصفوفات.

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

<1 0 0 1 0

+----+

وفي هذا السياق، علاوة على ذلك، فإن جيه تدعم كل العمليات المزدوجة المعتادة في هذه القوائم، مثل and, or, exclusive or, rotate, shift, not....الخ، مثلًا.

(quicksort y sel e=.y(~?#y

  • quicksort=: (($:@(<#[)، (=#[)، $:@(>#[)) ({~ ?@#)) ^: (1<#)
  • التعبير التالي يبين pi مع أرقام n ويعرض إمكانات الدقة المتوسعة لجيه:
  • n=: 50 ملاحظة: n هي عدد الأرقام المطلوب
  • <.@o. 10x^n ملاحظة: دقة إضافية بمقدار 10 للقوة النونية
  • 314159265358979323846264338327950288419716939937510

)

إضافةً إلى ذلك، وفيما يلي مثالا على الكويكسورت quicksort يظهر البرمجة الضمنية tacit programming. تتضمن البرمجة الضمنية تركيبة من بعض الوظائف معا ولا تشير بشكل صريح إلى أي من لمتغيرات. دعم لغة الجيه لforks و hooks يشير إلى القواعد بشأن كيف أن المناقشات التي تطبق على هذه الوظيفة ستطبق على وظائف محتواها.

end.

if. 1>: #y do. y

else.

v

46 55 79 52 54 39 60 57 60 94 46 78 13 18 51 92 78 60 90 62

avg v

assert. T

  • break.
  • continue.
  • for. T do. B end.
  • for_xyz. T do. B end.
  • goto_name.
  • label_name.
  • if. T do. B end.
  • if. T do. B else. B1 end.
  • if. T do. B
  • elseif. T1 do. B1

أنواع وهياكل البيانات

  • تدعم لغة الجيه ثلاث أنواع بسيطة:
  • الرقمية numeric.
  • الأحرف Literal (character)

59.2

  • 4 avg\ v ملاحظة: تحريك المتوسط على فترات بطول 4
  • 58 60 56 51.25 52.5 54 67.75 64.25 69.5 57.75 38.75 40 43.5 59.75 70.25 80 72.5
  • m=: ?. 4 5 $ 50 ملاحظة: مصفوفة عشوائية
  • m
  • 46 5 29 2 4
  • 39 10 7 10 44
  • 46 28 13 18 1

2.5

  • (V0 V1 V2 هنا تشير إلى الأفعال و Ny تشير إلى الأسماء)
  • بعض الأمثلة على استخدام avg :
  • v=: ?. 20 $ 100 ملاحظة: متجه عشوائي

وفي السياق ذاته، تشير # إلى عدد العناصر في المصفوفة. +/ تلخص عناصر المصفوفة. %تقسم المجموع على عدد العناصر. ملحوظة: avg معرفة سابقا باستخدام سلسلة من ثلاث أفعال ("+/"، "%"و "#") والتي تعرف باسم الشوكة forkز خاصة أن (V0 V1 V2) Ny هي نفسها مثل (V0 Ny) V1 (V2 Ny) والتي توضح بعض نقاط القوة لدى لغة جيه.

+----+

علاوةً على ذلك، لغة الجيه كذلك تدعم المصفوفات الرقمية المحللة حيث القيم غير الصفرية يتم تخزينها بمؤشراتها. هذه هي آلية جيدة حيث تكون قيم قليلة نسبيا غير صفرية.

وعلى صعيد آخر، نوع زائف آخر – يرتبط بالاسم بدلا من القيمة وهو ملفات خرائط الذاكرة.

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

وعلى صعيد آخر، مصفوفات جيه ذات أنماط متجانسة، مثلًا القائمة 123 هي قائمة من الأعداد الصحيحة بالرغم من أن العدد 1 هو بايت. لأغلب الأجزاء، هذه المشاكل في أنواع الأنماط شفافة بالنسبة للمبرمج. فقط بعض العمليات المتخصصة الخاصة تكشف عن اختلافات في النوع. مثلًا، القائمة 1.0 0.0 1.0 0.0 يتم التعامل معها بنفس الطريقة، بواسطة أغلب العمليات، مثل القائمة 1 0 1 0.

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

42 28 10 40 12

ومن ناحية أخرى، avg"1 m ملاحظة: تطبيق الدالة avg على كل مصفوفة فرعية برتبة 1 (كل صف) في m

هياكل التحكم

ومن ناحية أخرى، توفر لغة الجيه هياكل تحكم (مفصلة فيما يلي) شبيهة باللغات الإجرائية الأخرى. هذه الضوابط التحكمية هي:

التوثيق

ومن جهة أخرى، توثيق لغة الجيه، على عكس أغلب لغات البرمجة الأخرى، يتم تنظيمها في هيئة قاموس، حيث يتم تحديد الكلمات في لغة الجيه بأسماء وأفعال وظروف وروابط، وما إلى ذلك. يتم الإشارة إلى أجزاء لكلام باستخدام علامة. ولنلاحظ أن الأفعال لها صيغتين: monads أحادية الخلية (تعطى البراهين ناحية اليمين فقط) و dyads ثنائية (تكون البراهين على اليمين واليسار). مثلًا / في "-1" رمز الواصلة monad، وفي "2-3" الواصلة dyad. تعريف الأحادية غالبا ما يكون مستقلا عن تعريف المزدوجة، بغض النظر عما إذا كان الفعل أولي أو مشتق.

'Hello, world!'

ومن ناحية أخرى، تطبيق هذا البرنامج يعكس الاستخدام التقليدي لجيه- يتم إدخال البرامج إلى جلسة ترجمة للجيه، ثم تعرض نتائج ظاهرة. من الممكن أن يتم تدبر أمر تنفيذ مخطوطات الجيه على أن تكون برامج مستقلة بذاتها. ولكن آليات ربط المخطوط بالمترجم تعتمد على النظام. هذا هو الشكل الذي تبدو عليه مع نظام تشغيل يونيكس UNIX:

#!/bin/jc

echo 'Hello, world!'

exit

من جانب آخر، على مر التاريخ كانت لغة إيه بي إل تستعمل الرمز / للإشارة إلى مطوية ما، لذلك فإن +/1 2 3 كانت تكافئ 1+2+3. في نفس الوقت، كان يتم تمثيل الأقسام برموز التقسيم الرياضية (الأوبيلوس obelus، ÷) والذي كانت تنفذ بالضرب على علامة الناقص والنقطتان معا (في كلا النهايتين الورقيتين EBCDIC و ASCII). نظرا لأن ASCII بوجه عام لا تدعم الضربات المزدوجة بطريقة تعتمد على الأداة، ولا تتضمن رمز تقسيم في حد ذاته، ولغة جيه تستعين بعلامة % لتشير على هذا التقسيم، كصورة تقريبية مرئية أو تذكرة. (وهذا يفسر شيئا من الصفات الخاصة بالذاكرة لرموز جيه، وشيئا من المآزق التي تظهر بواسطة استخدام ASCII).

  • وفيما يلي نوضح برنامجا لحساب متوسط قائمة من الأرقام:
  • avg=: +/ % #
  • avg 1 2 3 4

أمثلة

كذلك، تتيح جيه أسلوبا خالي من النقاط وذو تركيب وظيفي، وم ثم يمكن أن تكون برامجها موجزة للغاية ومحمولة على تشويش للشفرة.

برنامج مرحبا بالعالم hello world program في جي0 هو

elseif. T2 do. B2

  • end.
  • return.
  • select. T
  • case. T0 do. B0
  • fcase. T1 do. B1

case. T2 do. B2

  • end.
  • throw.
  • try. B catch. B1 catchd. B2 catcht. B3 end.
  • while. T do. B end.
  • whilst. T do. B end.
  • انظر كذلك
  • - an APL dialect
  • - another APL-influenced language
  • مراجع

17.2 22 21.2 26.4

وفي السياق ذاته، المرتبة rank: هي مفهوم حتمي في لغة الجيه. دلالته في لغة الجيه شبيهة بالاختيار "select" في لغة SQL و"while" في لغة السي.

  • فيما يلي تطبيق لquicksort، من قاموس لغة جيه:
  • sel=: adverb def 'u # ['
  • quicksort=: verb define

ما رأيك في هذه المقالة؟

📝 هل في هذه المقالة خطأ؟

إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.