إن جوهر إطار عملنا لتطوير بلوكتشين Exonum الخاص مكتوب بلغة Rust ، حيث يركز PL هذا على سلامة العمل مع الذاكرة. ومع ذلك ، إلى جانب العديد من المزايا ، فإن Rust لديها عدد من الميزات التي تعقد "التفاعل" معها: بناء الجملة غير معتاد بالنسبة للعديد من المطورين ، وعتبة الدخول عالية جدًا.
لتبسيط العمل مع منصة Exonum وجعله في متناول الجمهور ، قررنا كتابة مكتبة ملزمة. أصبحت لغة الربط جافا.
لماذا اخترنا جافا ، نقول تحت قطة.
/ Exonumبضع كلمات حول Exonum
Exonum هو إطار عملنا مفتوح المصدر لتطوير blockchains الخاصة. إن blockchain على Exonum أسرع بكثير من blockchains العامة وقادر على معالجة ما يصل إلى 5 آلاف معاملة في الثانية. للمقارنة ، في Ethereum هذا الرقم هو
عدة عشرات ، في حين أن Bitcoin لديها
أقل .
يستخدم Exonum خوارزمية إجماع بيزنطية لحماية البيانات. لا يتطلب التعدين
ويضمن التنفيذ الصحيح للمعاملات ، حتى إذا تم اختراق ثلث عقد الشبكة.
يمكن استخدام منصة Exonum في أي مجالات: مالية ، تكنولوجية ، قانونية. على وجه الخصوص ، الإطار مناسب لإنشاء أنظمة إدارة الحقوق الرقمية (يمكن
العثور على عرض توضيحي
على الموقع الرسمي ) وتنظيم التصويت (
تجريبي ). في كلتا الحالتين ، تكون جميع العمليات التي تحدث شفافة قدر الإمكان ومحمية بآليات التشفير.
في العام الماضي ، باستخدام منصة Exonum ، تم تنفيذ State Land Cadastre في أوكرانيا. وقبل ذلك ، تم إطلاق مشروع إدارة الأراضي في جورجيا في Exonum. نحن
نتفاوض أيضًا مع العشرات من شركات Fortune 500 والاتحاد الأوروبي لتطبيق نظامنا في عملياتهم التجارية.
إن قلب Exonum مكتوب بلغة Rust. يبرر الاختيار حقيقة أن هذا PL يركز على الأمن والسرعة - فهو يعمل بشكل أسرع في بعض المهام من Java و Go و C و C ++. في الوقت نفسه ، يضمن Rust أمان الذاكرة
ويمنع السباقات عندما يحاول خيطان الوصول إلى نفس البيانات.
تم تصميم مترجم Rust
لتقليل عدد الأخطاء الناتجة عن تأثير العامل البشري. على سبيل المثال ، فإنه يلغي العديد من فئات الأخطاء على حساب مفهوم العمر والحيازة.
جميع القيم في Rust لها "مجال ملكية". عندما يتجاوز اسم هذا النطاق ، يتم تحرير المورد المرتبط. في ما يلي مثال لرمز تم
توفيره في وثائق Rust الرسمية:
fn use_vec() { let vec = make_vec();
إذا قمت "بإطعامها" للمترجم ، فسوف يولد خطأ:
error: use of moved value: `vec` for i in vec.iter() { ^~~
هذا يشير إلى أن vec غير متاح لأن مجال ملكيته قد تغير. وبالتالي ، فإن "أطلق النار على نفسك" في عملية التطوير يصبح أكثر صعوبة.
لماذا قررنا إنشاء ملزم
بناء جملة صاخبة
يقدم Rust مجموعة واسعة ومريحة من أنواع البيانات التي يمكن دمجها مع بعضها البعض. هذا يجعل من الممكن تبسيط مجموعات القيم في التعليمات البرمجية وتقييد الوصول إلى البيانات ، وحمايتها من الوصول غير المصرح به.
هذه الميزات
مهمة جدًا عند العمل مع العقود الذكية في Exonum. بفضلها ، تتمتع العقود "الذكية" لإطار العمل لدينا بأداء أكثر وأمن الوصول إلى الذاكرة أكثر من ، على سبيل المثال ، حلول Ethereum.
بشكل عام ، يشبه Rust اللغات الحتمية الأخرى (على وجه الخصوص ، بنية الصدأ تشبه C / C ++) ، ولكنها تمثل عددًا كبيرًا من المفاهيم المبتكرة. لديها دورات وظروف ووظائف ، ولكن في نفس الوقت تظهر مجالات الملكية والأنواع. لذلك ، قد يكون من الصعب على أولئك الذين لم يسبق لهم العمل مع PL أن يقرأوا البرامج عليه.
في البداية
يبدون "أجانب". يضيف "Pain" إدارة ذاكرة غير عادية (مقارنة باللغات الأخرى) تجعل Rust آمنة للغاية. في الخريف الماضي ، نشر مبدعو رست استطلاعًا شمل 5 آلاف من أفراد المجتمع. وقال ما يقرب من ربع
المستطلعين إن روست كان من الصعب العمل معه.
مترجم شديد المطالب
كما ذكرنا من قبل ، فإن مهمة مترجم Rust هي تقليل عدد الأخطاء في الكود. المترجم صارم لنص البرنامج ، لكنه يعرض خيارات لاستكشاف الأخطاء وإصلاحها. في هذه الحالة ، يُظهر المترجم حتى التحذيرات المتعلقة بنمط البرمجة.
يسمح لك هذا النهج بكتابة كود موثوق به (وهو أمر مهم عند العمل مع blockchains بشكل عام) ، ولكن له أيضًا جانب جانبي للعملة. في بعض الأحيان يتعين عليك كتابة البرامج في Rust حتى يتمكن المترجم من "فهم" أنك لا تقوم بعمليات الذاكرة المحظورة. وبما أن اللغة لا تزال شابة وتستمر في التطور ، فقد لا تكون هناك أي ممارسات راسخة. لذلك ، كما يقول مطور Exonum Ilya Bogdanov ،
يجب العثور على العديد من الأنماط
من خلال طريقة البحث العلمي.
مجتمع صغير
السبب الثالث لإنشاء المجلدات كان مجتمع Rust الصغير. على الرغم من أن مجتمع هذه اللغة ودود للغاية ، وأفرادها مستعدون دائمًا للإجابة على الأسئلة ، فإن اللغة "تعاني" من كمية صغيرة من الأدب والمكتبات. ومع ذلك ، سيكون من العدل أن نلاحظ هنا أن هذه المشكلة يتم حلها تدريجياً.
في السنوات الأخيرة ، عملت روست بنشاط على
الترويج لموزيلا وسامسونج ، مما كان له تأثير إيجابي على عدد المكتبات التي يتم تطويرها و "أغلفة" جديدة للحلول الحالية من عالم C / C ++. كما تبدأ اللغة "الكتب المدرسية" في الظهور تدريجياً. من بين تلك الموجودة بالفعل ، يجدر تسليط الضوء على "
أساسيات الصدأ " من تأليف Ivo Balbaert ،
دليل عبر الإنترنت على الموقع الرسمي والكتاب الأخير لمطوري مشروع Rust ، Steve Klabnik ، "
لغة البرمجة الصدأ ".
لماذا تختار جافا
كان أحد الأسباب الرئيسية التي حددت الاختيار هو المجتمع الضخم لهذا PL. وفقًا
لدراسة أُجريت في موقع Stack Overflow العام الماضي ، تحتل Java المرتبة الثالثة في الشعبية (حيث تجاوزها فقط JavaScript و SQL). من بين 64 ألف مطور شملهم الاستطلاع ، يكتب ما يقرب من 40 ٪ في جافا.
نظرًا لحجم المجتمع ، اكتسب PL هذا مجموعة واسعة من الأدوات. وهذا يشمل IDEs ، والحلول التحليلية ، والأطر المعيارية ، وما إلى ذلك. هناك الكثير منها لدرجة أن بعض الشركات
تلزم المطورين باستخدام IDEs وأطر عمل معينة فقط لتجنب تقسيم بيئة العمل.
في الوقت نفسه ، تحتوي Java على بنية بسيطة ولها واجهة Java أصلية (JNI)
يمكنها العمل مع واجهة C Application Binary Interface (ABI). بالإضافة إلى ذلك ، تجعل Java من الممكن استخدام لغات أخرى على مكدس JVM: Scala و Kotlin و Clojure.
وأخيرًا ، فإن جهاز Java متعدد الأنظمة الأساسية: يتم تنفيذ كود Java في كود بايت ، والذي يتم تفسيره وتشغيله على أنظمة Windows و MacOS و Linux. في الوقت نفسه ، ترتبط لغة Java بمصدر مفتوح (مقارنة ، على سبيل المثال ، مع C #). أدوات تطوير Java في معظمها مجانية: فهي
JDK وبيئات التطوير المتكاملة بناءً على ذلك - JDeveloper و NetBeans و Eclipse ، إلخ. وفي الوقت نفسه ، يمكنك العثور على عدد كبير من المشاريع مفتوحة المصدر على الموارد المتخصصة (على سبيل المثال ، على
GitHub ). هناك أيضًا
العديد من الأدلة حول العمل باستخدام تقنيات مفتوحة المصدر.
التحديات الرئيسية في تطوير Java Binding
لقد كان تطوير Java Binding طويلًا ومعقدًا (ولا يزال مستمرًا). كان علينا أن نفكر في جميع الميزات التي تجعل Rust و Java مختلفين جدًا.
على سبيل المثال ، كان تنظيم إدارة الموارد أحد التحديات. النقطة هي أن هناك جامع القمامة في جاوة ، ولكن ليس في الصدأ. تمت
إزالته في أحد الإصدارات السابقة ، حيث توصل المطورون إلى استنتاج أنهم يمكنهم توفير نفس المستوى من الموثوقية باستخدام نظام النوع.
Java GC ، على الرغم من أنه زاد من استهلاك الموارد (فهو يفرض على جميع الوظائف إعادة الكائنات غير المستخدمة إليها لتجنب تسرب الذاكرة المحتمل) ، إلا أنه مناسب تمامًا. لذلك ، نحن بحاجة إلى تنفيذ آلية تنظيف الموارد التي يرغب مطورو Java.
تبين أن هناك صعوبة أخرى تتعلق بهياكل البيانات المحددة المقدمة في أشجار Exonum - Merkle.
يستخدمها Exonum لدمج حالات blockchain في تجزئة واحدة. وهذا يجعل من الممكن إثبات صحة المعاملات دون الحاجة إلى التواصل مع العديد من عقد الشبكة الكاملة. هذه الوظيفة مهمة لعمل عملائنا الخفيفين ، لذلك يجب أيضًا تفسيرها في Java.
يكرر Java API بشكل كامل تقريبًا Rust API. يتم ذلك لتسهيل علينا تكييف الوثائق وتبسيط العمل للمستخدمين. لقد قمنا بإعداد دليل منفصل لتكوين وتشغيل عقدة Exonum باستخدام تطبيق Java Binding.
لإنشاء خدمات في Java ، يمكنك استخدام مولد النماذج للمشاريع. تحتاج إلى تثبيت Maven 3 وتشغيل الأمر:
$ mvn archetype:generate \ -DinteractiveMode=false \ -DarchetypeGroupId=com.exonum.binding \ -DarchetypeArtifactId=exonum-java-binding-service-archetype \ -DgroupId=com.example.myservice \ -DartifactId=my-service \ -Dversion=1.0
يمكنك استخدام الوضع التفاعلي:
$ mvn archetype:generate \ -DarchetypeGroupId=com.exonum.binding \ -DarchetypeArtifactId=exonum-java-binding-service-archetype
سوف تجد دليلاً كاملاً مع أمثلة على إعداد خدمة Java
في الوثائق على موقع مشروع Exonum الرسمي. هناك توصيات لبدء العقدة Exonum
في المستودع على GitHub .
/ Exonumالخطط المستقبلية
بينما Java Binding موجودة في ألفا. نخطط لإصداره كميزة كاملة وجاهزة في المستقبل القريب. نقوم الآن بجمع التعليقات من المستخدمين من أجل تتبع المشاكل المحتملة في المكتبة وإجراء التصحيحات.
العمل جار أيضًا على التوثيق ، وكتابة أمثلة للمشاريع ، وحزم SDK لتبسيط التكامل مع التطبيق على blockchain وتحسين تجربة المستخدم بشكل عام. يمكنك
العثور على خريطة الطريق الكاملة للمشروع
في المستودع على GitHub .
هناك يمكنك
أخذ جميع المصادر لتجربة Java Binding وكتابة خدمة Java الخاصة بك لـ Exonum. إذا كان لديك أي أسئلة ، يرجى الاتصال
بفريق التطوير في Gitter . سيقولون ويساعدون قدر الإمكان.