المصدر: وارد كانينغهامTranspilation هو تحويل الشفرة من لغة إلى أخرى. باستخدام transpiler خاص (transcompiler) ، يمكن نقل لغة برمجة للأغراض العامة إلى أي لغة برمجة للأغراض العامة الأخرى.
إذا كنت بحاجة إلى التبديل إلى لغة أخرى ، فسوف يساعد المتحولون المطورين على حفظ معظم الشفرة الموجودة دون إعادة كتابة الشفرة بأكملها يدويًا. على سبيل المثال ، عند تحويل البرامج من Python 2 إلى Python 3 ، أو عند نقل البرنامج من API القديم إلى البرنامج الجديد.
غالبًا ما يتم استخدام مصطلحي transpiler و transcompiler بالتبادل ، لكن لا يزال
يعتقد أن هناك اختلافات. على سبيل المثال ، لتحويل كود C ++ إلى C ، فأنت بحاجة إلى محول ، ولتحويل Python-Ruby ، فأنت بحاجة إلى محوِّل transcompiler.
بابل لجافا سكريبت هو مترجم ، و
TypeScript هي لغة مترجمة.
في بعض الأحيان ، بعد التحويل من قبل الناقل ، من أجل التشغيل الصحيح للرمز ، يلزم التكوين اليدوي ، بينما يجب أن تعمل الشفرة في اللغات المترجمة دون تغيير. اليوم سنتحدث عن هؤلاء وعن الآخرين ، ولكن الأهم من ذلك ، سنتحدث عن مشاريع عبر المشهورة التي يمكن للمطورين استخدامها في عملهم اليومي.
الأمامية transpilation
يعد التحويل جزءًا مهمًا من التطوير الأمامي: نظرًا لأن الميزات الجديدة تظهر ببطء في المتصفحات ، فقد تم إنشاء لغات ذات قدرات تجريبية تترجم إلى لغات متوافقة مع المتصفح.
يعد مطورو المستعرضات الذين يستخدمون محرك JavaScript الخاص بهم في كل مشروع مسؤولين أيضًا عن اللغات المزدهرة لجافا سكريبت. نتيجة لذلك ، يكون أداء المتصفحات مختلفًا ، وتنفيذ مجموعة وظائف JavaScript الخاصة بها ، وتقترب من الامتثال الكامل للمواصفات بسرعات مختلفة.
تجعل Sass و
Less و
Stylus من السهل إنشاء كود CSS. لذا لدى Sass بناء جملة مرن ومنطق (@ إذا كان لكل منهما) والرياضيات (يمكنك إضافة أرقام وخطوط وألوان) ، بسبب تحويل ثراء الشفرة إلى برنامج روبي CSS منتظم.
تبدو أقل (صفائح Leaner Style Sheets) مثل CSS ، ولكنها تحتوي على إضافات مريحة: المتغيرات ، الخلاطات ، العمليات الحسابية (مثل Sass) ، إلخ.
تم كتابة Stylus في Node.js ويختلف عن Sass و Less في بناء جملة أنظف. لكن في الواقع ، فإن هذه اللغات الثلاث تشبه بعضها بعضًا ، لذا لن تكون مخطئًا إذا اخترت أيًا منها.
قل "مرحبًا ، العالم!" في CoffeeScript - والتي قد تكون أكثر بساطة:
alert "Hello, World!"
منذ فترة طويلة
CoffeeScript هو مشروع جافا سكريبت
الأكثر شعبية . هذا ليس مفاجئًا: الجمع بين إمكانية الوصول (الوثائق تناسبها في صفحة واحدة) ، والميزات الوظيفية (بين قوسين ، المسافة البادئة ، وما إلى ذلك) وبناء الجملة المستوحى من روبي ، هذه اللغة تمنح للمطورين العديد من درجات الحرية وتتيح جعل JS أكثر تعبيرية.
ماجستير TypeScript:
let message:string = "Hello World" console.log(message)
TypeScript هو مشروع منافس لجافا سكريبت ، وهي لغة نصية مع إضافة كتابة ثابتة اختيارية. يتيح لك وصف خصائص وأساليب الكائنات والفئات بشكل كامل ، على عكس JS ، مما يلغي الحاجة إلى التحقق من جميع الوسائط المضمنة في طريقة أو وظيفة.
هناك رأي مفاده أن جافا سكريبت هي لغة بها عيوب أساسية. خلاف ذلك ، من الصعب شرح شعبية اللغات المتقاطعة التي تعمل على وجه التحديد لتصحيح أوجه القصور فيها. بالإضافة إلى المشاريع المذكورة أعلاه ، هناك أيضًا لغة
Dart مرنة بلغة برمجة الويب ، ومترجم JavaScript في مترجم JavaScript
Closure ، والعديد من الحلول الأخرى ، والتي يمكنك العثور عليها في صفحة "
قائمة اللغات التي يتم تجميعها في JS ".
تحويل إلى C
في عام 2006 ، ظهر مشروع
Vala ، ويتألف من لغتين: Vala و Genie ، اللتان تترجمان الشفرة C الأكثر شيوعًا ، والتي بدورها يتم تجميعها إلى ملف قابل للتنفيذ أو مكتبة.
يشبه بناء الجملة Vala إلى حد كبير C # ، لكنه تم تكييفه لتحقيق توافق أفضل مع أنظمة GObject ، في حين أن Genie لديها الكثير من القواسم المشتركة مع Python. اللغة الأولى الآن أكثر شيوعًا من Genie ، لذلك دعونا نلقي نظرة فاحصة عليها.
لماذا كنت بحاجة إلى مثل هذا المشروع؟ أراد العديد من المطورين كتابة تطبيقات ومكتبات لـ GNOME بلغات عالية المستوى ، ولكن لأسباب مختلفة لم يتمكن أو لا يريد استخدام C # أو Java. يتيح لك Vala إنشاء تعليمات برمجية معقدة وموجهة نحو الكائن ، تدعم C C API و ABI بمتطلبات ذاكرة منخفضة.
لا يمكن استخدام مكتبات C # و Java بنفس طريقة استخدام مكتبات GObject الأصلية من C ولغات أخرى ، ولا يمكن اعتبارهما جزءًا من نظام جنوم الأساسي. يقوم Valac ، المحول البرمجي Vala ، بإنشاء ملفات C من ملفات مصدر Vala كما لو كنت قد كتبت مكتبتك أو تطبيقك مباشرةً في C. استخدام مكتبة Vala من C لا يختلف عن استخدام أي مكتبة أخرى تستند إلى GObject.
نقرأ ونكتب الملف إلى Vala:
voidmain () { try { string filename = "data.txt";
يمكنك التعرف على أمثلة التعليمات البرمجية الأخرى على
الموقع .
من فلاش إلى منصة متعددة
تم إنشاء Haxe في نفس الوقت الذي يتم فيه إنشاء Vala ، ولكن الغرض منه هو النقل في Flash و JavaScript و Neko. مع هذه المجموعة من المهارات ، كانت اللغة محكوم عليها بالانقراض ، لكنها لم تنجو فحسب ، بل اكتسبت أيضًا شعبية كبيرة.
سر النجاح هو منصة متعددة. بمرور الوقت ، نمت Haxe إلى مجموعة قوية من الأدوات التي تدعم الترجمة الآلية إلى لغات ومنصات مختلفة ، بما في ذلك JavaScript و C ++ و C # و Java و JVM و Python و Lua و PHP و Flash.
Haxe هي لغة برمجة حديثة ورفيعة المستوى. في نفس الوقت ، يكون الأمر بسيطًا وعمليًا ، بحيث يمكن تكييف الترجمة مع مختلف المنصات المستهدفة. بناء الجملة هو في الأساس ECMAScript ، ولكن يتم تغييره إذا لزم الأمر.
"Hello World" على Haxe:
class Main { static public function main():Void { trace("Hello World"); } }
في JavaScript ، ستبدو أسطر التعليمات البرمجية هذه كما يلي:
haxe -main HelloWorld -js HelloWorld.js
وفي جافا مثل هذا:
haxe -main HelloWorld -java path/to/java/out
يتم تنظيم معظم كود Haxe في فئات ووظائف ، مما يجعلها لغة OOP تشبه Java و ActionScript 3 و C #. ومع ذلك ، تم تصميم Haxe مع التركيز على البراغماتية وسهولة بناء الجملة.
وحول المتحولين
- C2Rust و Corrode هما فرصتان غير خطيئتان للهجرة من C إلى Rust.
- VOC عبارة عن ناقل من Python 3.4+ إلى Java يساعدك في إنشاء تطبيقات Android استنادًا إلى رمز Python.
- يعد Lombok حلاً مثيرًا للاهتمام لأولئك الذين لا يحبون جافا ، أو لا يحبون أي شيء سوى جافا. هذا مكون إضافي لبرنامج التحويل البرمجي يقوم بإضافة "كلمات رئيسية" جديدة إلى Java وتحويل التعليقات التوضيحية إلى تعليمات Java البرمجية ، مما يقلل من جهود التطوير ويوفر وظائف إضافية. على سبيل المثال ، يسمح باستخدام الكلمة الأساسية val (تناظرية لـ var من C #) في تعليمات Java البرمجية العادية.
- يتيح لك Bridge.NET استخدام أداء C # في JavaScript ، بالإضافة إلى VisualStudio IDE القوية وأدوات .NET القياسية (مثل msbuild ، وإعادة البناء ، واختبار الوحدة ، والتحليل الثابت ، وتصور الرمز ، FxCop).
- يقوم Grumpy بترجمة رمز Python إلى تمثيل Go ويسمح لك بتشغيل برامج Python بسلاسة في بيئات وقت تشغيل Go. يحل المشروع مشكلة التأمين الشامل للمترجم ، والذي لا يسمح بالتنفيذ المتوازي لعدة سلاسل من التعليمات البرمجية.
بالطبع ، هناك العديد من المترجمين الآخرين. يمكنك تقليديا التحدث عن الأدوات المفضلة لديك في التعليقات.
استنتاج
هناك عدد كبير من اللغات الأخرى ، لذلك بالنسبة لمشروعك ، يمكنك دائمًا اختيار اللغة الأكثر ملاءمة. لكن المواقف التي يلزم فيها تحويل الكود إلى الشفرة ليست غير شائعة ، لأن عمليات نقل C ++ إلى C ، و PHP إلى C ++ ، و "أي شيء في JavaScript" تحدث في كثير من الأحيان.
يعد "المترجم" من لغة إلى أخرى فكرة جيدة ، ولكن فقط طالما أن النتيجة يمكن التنبؤ بها بوضوح واستخدامها دون المخاطرة. لذلك ، كان الانتقال من COBOL إلى Java أمرًا صعبًا ، لأنه في Java قبل الإصدار 1.4 من JDK
، لم تكن هناك ملفات معيّنة للذاكرة . و C2Rust و Corrode المذكورة في المقالة على الإخراج تعطي رمز غير اصطلاحي ، وضع علامة غير آمنة ومليئة مؤشرات الخام.