جديد الاصدار 0.5 من لغة الأسس

يشرح في المقال الاضافات الجديدة في الاصدار الجديد من لغة الأسس 0.5

xlmnxpمنذ 4 سنوات

السلام عليكم ورحمة الله وبركاته

أتم فريق العمل إطلاق الإصدار 0.5.0 من لغة الأسس. هذا الإصدار يشمل بعض التعديلات والإضافات المهمة منها:

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

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

لتنزيل الاصدار الجديد: https://alusus.org/download

 

شرح التعديلات والإضافات المهمة بشكل اكثر تفصيلًا

  • تمكين تنفيذ الشفرة المصدرية في المجال الرئيسي، أي خارج الدالات والوحدات.

لم يكن ممكنا في الإصدارات السابقة من الأسس تنفيذ اي امر الا عن طريق الكلمة المفتاحية run او نفذ والتي كانت تسبب الكثير من المشاكل حيث لا يمكن كتابة اي امر تنفيذي في الجذر

المثال التالي كان لا يمكن القيام به في اصدار اقدم من 0.5:
مثال 1

import "Srl/Console.alusus";

use Srl;
Console.print("Hello");

وكان يجب كتابة المثال بالطريقة التالية لينفذ:
مثال 2

import "Srl/Console.alusus";

def ExampleModule : module{
    use Srl;

    def start: function() {
        Console.print("Hello");
    };
};

run ExampleModule.start;

في الاصدار 0.5 اصبح بالامكان كتابتها بطريقة اخرى بالاضافة للطريقة الموجودة في مثال1 هي:
مثال 3

import "Srl/Console.alusus";

module ExampleModule {
    use Srl;

    func start() {
        Console.print("Hello");
    };
};

ExampleModule.start();
  • إضافة مدير للحزم لتمكين المستخدم من تنصيب الاعتماديات مباشرة من GitHub. مدير الحزم ما زال نسخة تجريبية وينقصه بعض المزايا المهمة التي ستأتي في إصدارات لاحقة.

في الاصدار 0.5 قمنا بإضافة مدير الحزم Apm ( بالعربي محا ) لسطر الاوامر والتنفيذ من داخل الأسس يقوم بتثبيت الحزم من GitHub الى مسار ~/.apm مع امكانية تثبيتها في مسار المشروع محليًا.

بعض اوامر Apm

$ apm
Use 'apm help' for help.

$ apm help
 Commands:- 
   apm help                                             list of commands
   apm install <author>/<package>@<release>             install package in `/home/xlmnxp/.apm`
   apm local install <author>/<package>@<release>       install package in `/home/xlmnxp/.apm`

او محا

$ محا 
استخدم 'محا مساعدة' للمساعدة.

$ محا مساعدة
 الاوامر:- 
   محا مساعدة                                           قائمة الاوامر
   استخدم: محا تثبيت <المالك>/<الوحدة>@<الاصدار>        تثبيت الوحدة في `/home/xlmnxp/.apm`
   استخدم: محا محلي تثبيت <المالك>/<الوحدة>@<الاصدار>   تثبيت الوحدة في `/home/xlmnxp/.apm`

من اهم مميزاته الان هي امكانية تثبيت الحزمة عند الاستدعاء مباشرة.
مثال4 ( تثبيت اخر اصدار من مكتبة AGtk ان لم تكن مثبيته مع استدعائها ):

import "Apm.alusus";
Apm.importFile("Alusus/AGtk");

او مثال5 ( تثبيت اصدار معين من مكتبة AGtk ان لم تكن مثبيته مع استدعائها ):

import "Apm.alusus";
Apm.importFile("Alusus/[email protected]");
  • تمكين صيغة أقصر لتعريف الدالات والوحدات والماكروهات والأصناف. يمكنك الآن تعريف الدالات باستخدام الأمر دالة لوحده دون الحاجة لكتابة عرف . والأمر نفسه ينطبق على الوحدات والماكروهات وأصناف المستخدم.

كان قبل الاصدار 0.5 يتم تعريف الـدالة والـوحدة ( الـحزمة سابقًا ) و الـماكروة والـصنف بطريقة تعريف متغيير عادي مع اختلاف نوع المتغير واختلافات بسيطة في نحو التعريف.

مثال لطريقة تعريف دالة ووحدة في اصدار قبل 0.5
مثال 6

import "Srl/Console.alusus";

def ExampleModule: module {
    use Srl;

    def start: function() {
        Console.print("Hello");
    };
};

run ExampleModule.start;

مثال لتعريفها بالطريقة الجديدة
مثال 7

import "Srl/Console.alusus";

module ExampleModule {
    use Srl;

    func start() {
        Console.print("Hello");
    };
};

ExampleModule.start();

مع العلم ان الآن مع الاصدار 0.5 بامكانك الاختيار بين كلمتان مفتاحيتان للداله هما:-

  • func
  • function

وايضًا الاصدار 0.5 مازال يبقي على دعم طريقة التعريف القديمة

  • إضافات متعددة على مكتبة التنفيذ المعيارية مثل التعامل مع التعبيرات النمطية والقراءة من الشبكة.

قمنا في الاصدار 0.5 بإضافة مكتبة جديدة للتعامل مع الشبكات تستخدم curl تحمل الاسم Net تابعة لمكتبات Srl
مثال 8 ( مثال لجلب ملف وقراءته ثم طباعة محتواه في الطرفية )

import "Srl/Net.alusus";
import "Srl/Console.alusus";

module Main {
  function start {
    def data: ptr;
    def size: Int;
    if Srl.Net.get("https://alusus.org/Downloads/test.txt", data~ptr, size~ptr) {
      Srl.Console.print("%s\n", data);
      Srl.Memory.free(data);
    } else {
      Srl.Console.print("Error!\n");
    };
  };
};

Main.start();

المثال السابق بالعربية
مثال 9

اشمل "مـتم/شـبكة.أسس"؛
اشمل "مـتم/طـرفية.أسس"؛
اشمل "مـتم/ذاكـرة.أسس"؛

وحدة رئـيسي {
  دالة ابدأ {
    عرف بيانات: مؤشر؛
    عرف حجم: صـحيح؛
    عرف الرابط: "https://alusus.org/Downloads/test.txt"؛
    إذا مـتم.شـبكة.هات(الرابط، بيانات~مؤشر، حجم~مؤشر) {
      مـتم.طـرفية.اطبع("%s\ج"، بيانات)؛
      مـتم.ذاكـرة.حرر(بيانات)؛
    } وإلا {
      مـتم.طـرفية.اطبع("فشل\ج")؛
    }؛
  }؛
}؛

رئـيسي.ابدأ()؛

بالإضافة لذلك قمنا بإضافة دالة بسيطة للتعامل مع التعبيرات النمطية ( regex )
مثال 10

import "Srl/Console.alusus";
import "Srl/String.alusus";

Srl.Console.print("regex number from string (\"phone: 050000000\") with pattern (\"([0-9]+)\"): %s\n",
                    Srl.String.regex("([0-9]+)", // pattern
                                    "phone: 050000000", // string
                                    1   // flags
                                    )~cnt.matches(1)~ptr // get first result
                );

المثال السابق بالعربية
مثال 11

اشمل "مـتم/طـرفية.أسس"؛
اشمل "مـتم/مـحارف.أسس"؛

مـتم.طـرفية.اطبع("نمط النص (\"هاتف: 050000000\") بالنمط (\"([0-9]+)\"): %s\ج"،
		مـتم.مـحارف.انمط("([0-9]+)"، // النمط
					"هاتف: 050000000"، // النص
					1 // الاعلام
					)~محتوى.متطابقات(1)~مؤشر // جلب اول نتيجة
			)؛
2
إعجاب
1512
مشاهدات
2
مشاركة
2
متابع

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !