جافاسكريبت في العمق : الجزء الأول.
الكمبيوتر لا يفهم سوى لغة الآلة الMachine Code و لذا يجب اولاً ترجمة الاكواد بواسطة برنامج اخر يترجم يسمى إما Compiler او Interpreter. الInterpreter سريع في التشغيل لكن بطيء في التنفيذ , و الCompiler عكس ذلك.
(سلسلة)
الكمبيوتر لا يفهم سوى لغة الآلة الMachine Code و لذا يجب اولاً ترجمة الاكواد بواسطة برنامج اخر يترجم يسمى إما Compiler او Interpreter. الInterpreter سريع في التشغيل لكن بطيء في التنفيذ , و الCompiler عكس ذلك.
(سلسلة)
الكلمتين كلاهما معناها مترجم لكن الInterpreter هو الذي عادة يكون في المؤتمرات او القنوات التلفزيونية المباشرة لترجمة الكلام في وقته. اما الCompiler فهو الذي يأخذ كل النص مرة احدة ثم يترجمه.
خذ مثلا لغة بايثون كلغة تعمل على Interpreter و لغة سي شارب و جافا كـCompiled في بايثون و جافا سكريبت ما تقدر تنادي function الا بعد ما تعرفها فوق امر النداء في الكود. اما سي شارب تقدر تنادي الفنكشن من فوق و هي معرفه تحت في الكود. لأن المعلومات موجودة عند الكومبايلر مسبقاً.
نرجع لجافاسكريبت, جافاسكريبت تعتبر انها Dynamically Typed اي ما تحتاج انك تعرّف نوع المتغير في الكود , بعكس اللغات ال Statically Typed مثل ++C اللي لازم تعرف نوع المتغير. الثانية اسرع لأن معلومة النوع موجودة وقت التشغيل
لكن الأول يحتاج المترجم إنه يعرف نوع المتغير و هذي تأخذ وقت خصوصاً لو غيرت النوع في كودك , مرة تسند قيمة Number و مرة String!.
للتغلب على مشكلة مثل السابقة استخدموا ال JIT اختصار Just In Time Compilation بمعنى انتج الMachine Code وقت التشغيل لأجل يراقب نوع المتغير.
و عكسه AOT اختصار لAhead Of Time يعني انتج الMachine Code قبل التشغيل لأجل يعرف المترجم نوع المتغير مسبقاً.
و عكسه AOT اختصار لAhead Of Time يعني انتج الMachine Code قبل التشغيل لأجل يعرف المترجم نوع المتغير مسبقاً.
لكن في سي شارب مثلا تحتاج اول تترجم csc.exe hello.cs بعدها يطلع معك ملف hello.exe و تشغله! و في جافا تكتب javac hello.java بعدها تكتب java hello.class عشان تشغله.
(مرحلتين).
(مرحلتين).
لحظة !!! بس جافا و سي شارب ايضاً فيها JIT !!
صحيح لكن لأغراض اخرى تتعلق بتشغيل برامج الدوت نت و جافا على اكثر من نوع معالج او Architecture و لأجل الOptimization.
صحيح لكن لأغراض اخرى تتعلق بتشغيل برامج الدوت نت و جافا على اكثر من نوع معالج او Architecture و لأجل الOptimization.
فأوجدوا runtime مثل JRE في جافا و CLR في سي شارب لأجل يترجم لbytecode ثم لأنسب وأفضل Machine Code حسب الArchitecture. و هذا من الأسباب اللي خلت جافا و سي شارب بطيئة مقارنة ب++C اللي مافيها runtime.
هذه السلسلة مقدمة لسلسلة قادمة اخرى هذه الليلة عن المتصفحات و بالأخص كيف يتعامل Google Chrome مع Js و بالتالي Nodejs و Electron و حتى قواعد بيانات مثل MongoDB و ربما نفرد سلسلة اخرى نوصل لمستوى لغة الAssembly من جافاسكريبت و نتعلم كيف نكتب كود Js عالي الأداء.
جاري تحميل الاقتراحات...