تم تحويل نسخة المشروع 1.0.1 إلى النسخه unversioned update 1 و ذلك لعدة أسباب سيتم ذكرهم بعد قليل، فى الوقت الحالي يتم العمل على الإصدار الأول و الذى يحتوى على نفس الـ interface القديمه مع بعض التعديلات البسيطه فيها، ايضا تم تغيير قلب المكتبه و تم إعادة بناءها جذريا.
يمكنك متابعة المشروع على هذا الرابط و يمكنك ان تجد المشروع داخل قائمة مكتبات Arbitrary-precision arithmetic بموقع Wikipedia.
التقييم و إبداء الرأى فى المشروع مرحب به و يمكنك ذلك من خلال هذه الصفحه، و قريبا سيتم رفع الموقع الرئيسي للمكتبه على نفس الموقع و الذى سيحتوى على كافة التفاصيل التى تحتاجها للتعامل مع الكود و تطويره او تعديله إن احتجت لذلك.
الإصدار الذى جارى العمل عليه سيقدم نفس ما كانت النسخه القديمه تقدمه و بشكل افضل و هي النقاط التاليه:
المكتبه عبارة عن مجموعه من template classes تستخدم للتعامل مع انواع رقميه، تحتوى المكتبه على العديد من المزايا هي:
- سهوله فى التعامل.
- تمثيل الأرقام بإشاره و بدون إشاره.
- دعم لـ Little Endian و Big Endian.
- تم تضمين جميع المعاملات (الحسابيه، المنطقيه، معاملات البت).
- التحويل من و إلى النصوص.
- دعم IOstream.
- دعم IO manipulators و هم (dec, hex, oct, showbase, showpos, uppercase, setw, setfill, left, right).
- دعم numeric_limits.
- سهوله فى تصمين انواع جديده بدون الحاجه لكتابة سطر كود إضافي.
- تحويل تلقائى بين اى نوع بإشاره إلى أى نوع اخر بإشاره، مثلا تحويل int128 إلى int1024 و هكذا.
- تحويل تلقائى بين اى نوع بدون إشاره إلى أى نوع اخر بدون إشاره، مثلا تحويل uint128 إلى uint1024 و هكذا.
- تحويل تلقائى بين نوع بإشاره و اخر بدون اشاره بشرط ان يكون الجزء الموجب لهما له نفس النوع، مثلا يمكن تحويل النوع int256 إلى uint128 و ذلك لأن الجزء الموجب بكلاهما هو uint128.
- تحويل تلقائي لمحتويات النوعين int_t و uint_t للأنواع الأساسيه باللغه صحيحه و عشريه.
- المكتبه تأتي بشكل افتراضي بالانواع التاليه:
int128 - uint128 - int256 - uint256 - int512 - uint512 - int1024 - uint1024 - int2048 - uint2048 - int4096 - uint4096 - int8192 - uint8192
من الهام جدا قرائة محتويات الملفات TODO, README, VERSION حيث يحتووا على معلومات هامه تخص عملية البرمجه و الإصدار، ستجد الملفات داخل المجلد الرئيسي للمشروع.
الإختلافات بين النسخه القديمه و التى جارى العمل عليها:
1-
* فى النسخه القديمه تم تضمين الأنواع بشكل تراكمي بمعنى النوع int256 يعتمد على النوع uint128 و بالتالي عند بناء الفئه int2048 سيتم تضمين جميع اكواد العمليات التى يتم احتياجها لكل الأنواع وصولا للنوع uint128، هذا الإسلوب يتيح كتابة كود اقل و لكن الأداء يكون سئ جدا.
* فى النسخه الحديث جميع الأنواع تعتمد على الانواع الإفتراضيه باللغه التى تحددها انت، أيضا الأنواع الجديده لا تعتمد على بعضها و بهذا تضمن عملية بناء اسرع لبرامجك بالإضافة لكود اقل.
2-
* فى النسخه القديمه تم إستخدام algorithms مع العمليات الأساسيه، هذه الـ algorithms تقل كفائتها كلما زاد حجم النوع المستخدم.
* فى النسخه الجديده تم إستخدام algorithms تتناسب مع النوع نفسه مما يضمن سرعة و كفاءه عاليه فى الأداء.
3-
* النسخه القديمه تستخدم نفس الكود لكل من big-endian و little-endian مع التلاعب بترتيب الـ low و الـ high components.
* النسخه الجديده يوجد بها كود خاص بالـ big-endian و اخر خاص بالـ little-endian و اخر مشترك بينهم و ذلك لضمان استخدام افضل الـ algorithms التى تستخدم لكلا الـ platforms.
4-
* فى النسخه القديمه التحويل للنصوص يستخدم مصفوفه بحجم اكبر نوع مستخدم و ذلك لضمان استهلاك اقل للذاكره و بالتالي فى المشارع التى تحتوى على اكثر من thread عند التحويل للنصوص ستصبح فى مشكله كبيره.
* فى النسخه الجديده تم تلاشئ هذا العيب حيث تم وضع option ملف الـ config ألخاص بالمكتبه ليحدد طبيعة المشروع الذى ستستخدم المكتبه به لذا فى حال مشروع يستخدم مسار واحد فقط (هذا هو الوضع الإفتراضي) سيتم إستخدام نفس الإسلوب القديم و مع المشاريع التى تحتوى على اكثر من مسار يتم حجز المساحه من الـ stack عند الحاجه.
5-
* فى النسخه القديمه توجد بعض الحالات التى يتم الحاجه فيها لحساب قيم تعتبر ثابته لكل نوع و هذه الحلات يتم التحقق منها وقت التشغيل و هذا الأكواد المعقده سيجعل التفيذ ابطء بكل تأكيد.
* فى النسخه الجديده تم إستخدام الـ templates يشكل كبير جدا و ذلك مع ضمان انه فى وقت التشغيل جميع الأكواد التى ستحتاج لثابت سيكون موجود، هذا الإسلوب يحعل الكود مقروء و ايضا يعطئ افضل اداء وقت التشغيل.
6- مع النسخه الجديده سيتم وضع test-unit لكل عمليه حتى يتسنى إختبارها بشكل جيد، ايضا سيتم وضع الـ documentation الخاص بالمكتبه مع الإصدار، أيضا سيتم اختبار المكتبه على اكثر من نظام تشغيل لضمان مع اكثر من مترجم.
هذا كان ملحض لبعض الإختلافات بين النسخه القديمه و الحديثه و السبب فى تحويل النسخه القديمه لـ Unversioned هو لعدم جعل احد إصدارات المكتبه الرسميه بهذا السوء حيث ان هذه النسخه لا تصلح إلا للدراسه فقط.
و الله ولي التوفيق
