গতিশীল ভাষার দোভাষী / সংকলক যেমন জাভাস্ক্রিপ্টে কীভাবে টাইপ পরীক্ষা করা হয়?


11

গতিশীল ভাষাগুলিতে যেমন জাভাস্ক্রিপ্ট বা পাইথনগুলিতে একটি চলকটির ধরণ রানটাইম সময়ে নির্ধারিত হয়। এটি জাভা হিসাবে টাইপ করা ভাষার চেয়ে ধীর গতির একটি কারণ।

টাইপ চেকিং কিভাবে সম্পাদিত হয়? এই প্রক্রিয়াটি ধীর হওয়ার প্রয়োজনীয় কারণ কী?


এগুলি ধীর নয় কারণ এগুলি গতিশীল, তারা ধীর গতির কারণ তাদের দ্রুত করা আরও শক্ত er জাভাস্ক্রিপ্ট আসলে সবচেয়ে অপ্টিমাইজড এবং বেশ দ্রুত quite
ডেরিক লিটজ

উত্তর:


5

প্রশ্নে বিভ্রান্তি আছে।

এমন একটি অনুমান রয়েছে যে প্রকারের চেকিংটি ধীর, যা অগত্যা ক্ষেত্রে হয় না।

প্রশ্নটি টাইপ চেকিংয়ের সাথে প্রকার প্রেরণের প্রক্রিয়াটিকেও বিভ্রান্ত করছে বলে মনে হয় এবং এগুলি দুটি ভিন্ন জিনিস। একটি প্রক্রিয়া যা রান সময়ে সম্পন্ন হয়, অন্যটি সংকলনের সময় একটি প্রক্রিয়া। আমি সন্দেহ করি যে প্রশ্নটি সত্যিই টাইপ প্রেরণের বিষয়ে জিজ্ঞাসা করছে।

এটি টাইপ প্রেরণ যা রানটাইমের সময় ওভারহেডকে পরিচয় করিয়ে দিতে পারে, কারণ গণনাটি সঞ্চয়ের সময় যে মানগুলি দেখায় সেগুলির ভিত্তিতে গতিশীলভাবে, কী পদক্ষেপ নেবে সেই সিদ্ধান্তের সাথে সময় ব্যয় করে। উদাহরণস্বরূপ, একটি গতিশীল ভাষায়, আমি যদি দুটি বিষয়ের উপর "+" প্রয়োগ করি, তবে আমি সংখ্যার সংযোজন বা স্ট্রিং কনটেন্টেশন বোঝাতে পারি, তাই কী করতে হবে তা স্থির করার জন্য আমার হাতে কী আছে তা দেখার জন্য সময় ব্যয় করা দরকার। গতিশীল প্রেরণের ব্যয় হ্রাস করতে পারে এমন মূল্যায়নের কৌশল রয়েছে। (যেমন, জেআইটি-র ট্রেসিং)

জাভাস্ক্রিপ্টে টাইপ-চেকিংয়ের ক্ষেত্রে, দেখুন: http://www.cs.brown.edu/~sk/ প্রজাতন্ত্র / পত্রিকা / প্রকাশিত / gsk- ফ্লো-typing-theory / । টাইপ চেকাররা কীভাবে কাজ করে তার আরও সাধারণ ওভারভিউয়ের জন্য, একটি প্রমিত প্রোগ্রামিং ভাষার পাঠ্যপুস্তক আলগোরিদিমগুলি কভার করবে। উদাহরণস্বরূপ, http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/


আমিও মধ্যে JITs এবং গতিশীল ভাষায় ট্রেসিং সম্পর্কে একটি ছোট জরিপ লিখেছি hashcollision.org/comprehensive/tracing.pdf

জাভাস্ক্রিপ্ট ইন্টারপ্রেটার টাইপ প্রেরণের জন্য প্রতিটি মান সহ ট্যাগ বিট বহন করে। আপনি কি এই সম্পর্কে কিছুটা ব্যাখ্যা করতে পারেন? উদাহরণস্বরূপ, ট্যাগ বিটের ব্যবহার কী? কিছুটা কি এক প্রকারের সাথে মিল রয়েছে?

কোনও ধরণের ধারণা সর্বদা উপস্থাপনের সাথে সংযুক্ত থাকে না। উদাহরণস্বরূপ, আমাদের কাছে একটি 'মাইল' টাইপ বনাম 'কিলোমিটার' প্রকারের ধারণা থাকতে পারে এবং সংকলনকালে কোনও ভাষা স্ট্যাটিকালি সনাক্ত করতে পারে তা যুক্তিসঙ্গত হতে পারে, যদি গুনাগুনগুলি বিভিন্ন ধরণের গণ্ডগোল করে যে মানগুলিতে ভুলভাবে অপারেশন প্রয়োগ করে whether । আপনি কল্পনা করতে পারেন যে তাদের অনুরূপ উপস্থাপনা থাকবে এবং সংকলক যদি সংকলনের সময় গ্যারান্টি দিতে পারে যে তারা কখনই মিশ্রিত না হয়, তবে মূল্যবোধগুলি উপস্থাপনে অতিরিক্ত লেবেলিংয়ের প্রয়োজনীয়তার কোনও কারণ নেই।

1
অবিরত: তবে প্রায়শই বিশেষত গতিশীল ভাষাগুলিতে আপনি বিভিন্ন ধরণের মান উপস্থাপন করতে চান। এই বৈষম্য করার বিভিন্ন উপায় রয়েছে। প্রকারের ট্যাগগুলি সাধারণ, তবে অন্যান্য কৌশল রয়েছে। উদাহরণস্বরূপ, আপনি মেমরির ব্লকড-অফ অঞ্চলে নির্দিষ্ট ধরণের স্থান রাখতে পারেন। "ডায়নামিকালি টাইপড ভাষায় প্রকারের তথ্যের প্রতিনিধিত্ব করুন" দেখুন। উপস্থাপনের কৌশলগুলির একটি বিস্তৃত সমীক্ষার জন্য lambda-t--latemate.org/node/3912

7

মূলত, টাইপযুক্ত ভাষায়, প্রতিটি রেফারেন্স এমন কোনও বস্তুর দিকে নির্দেশ করে যা প্রকার এবং মান উভয়ই অন্তর্ভুক্ত করে। উদাহরণস্বরূপ var a = 3একটি উদাহরণের দিকে নির্দেশ করে যার মধ্যে মান 3 এবং টাইপ ইন্ট থাকে, আপনি যদি তৈরি করেন a = "bla"তবে রেফারেন্সটি এমন একটি উদাহরণে আপডেট করা হয় যাতে স্ট্রিং "ব্লে" থাকে এবং টাইপ স্ট্রিং থাকে, পুরাতন বস্তুটি ফেলে দেওয়া হয়, ইত্যাদি ...

এটি ধীরে ধীরে কারণ প্রতিটিবার যখন a + bএই মৌলিক ধরণের উপর কোনও অপারেশন (উদাঃ ) করা আবশ্যক, রানটাইম অবশ্যই প্রথমে অবজেক্টগুলিকে অবলম্বন করবে, তাদের প্রকারটি উপযুক্ত কিনা তা পরীক্ষা করতে হবে, অপারেশনটি সম্পাদন করবে, একটি নতুন অবজেক্ট তৈরি করবে।

বিপরীতে, a + bসি ++ বা জাভা সংকলনের সময় পরীক্ষা করে যে প্রকারগুলি বৈধ এবং সামঞ্জস্যপূর্ণ হয়, তারপরে a এবং b তাত্ক্ষণিক মান হিসাবে উল্লেখ করা হয় (রেফারেন্স নয়), এবং সংযোজন এই মানগুলিতে একটি সাধারণ প্রসেসর অপারেশন।

অবশ্যই, এটি সব খুব তাত্ত্বিক। অনুশীলনে, বেশিরভাগ ওভারহেড এড়াতে এই প্রক্রিয়াটিতে প্রচুর অপ্টিমাইজেশন করা যেতে পারে এবং গতিশীলভাবে টাইপ করা ভাষাগুলি বেশ দ্রুত পেতে পারে।


1
পলিমর্ফিক ইনলাইন ক্যাশের মতো কৌশলগুলি কার্যকারিতা আরও বাড়িয়ে তুলতে পারে। গতিশীল ভাষার পারফরম্যান্স সম্পর্কিত ডেভিড উঙ্গার (স্ব) এবং এলিয়ট মিরান্দার (স্কুয়াক, ভিজ্যুয়াল ওয়ার্কস স্মার্টটাক ভার্চুয়াল মেশিন) রচনাগুলি সবচেয়ে তথ্যবহুল।
ফ্রাঙ্ক শিয়ার

0

প্রতিটি মান তার প্রকারের সাথে একসাথে সংরক্ষণ করা হয়, যা প্রথমে পরিদর্শন করা প্রয়োজন। এছাড়াও রূপান্তরগুলি স্ট্রিং থেকে সংখ্যায় উড়ে যাওয়ার সময় পরিদর্শনের মাধ্যমে বলে।


হ্যাঁ, এটি, এটি কেবল একটি রানটাইম চেক, অভিনব কিছু নয়।
আনন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.