পাইথনের কোন শব্দার্থক বৈশিষ্ট্য (এবং অন্যান্য গতিশীল ভাষাগুলি) এর স্বচ্ছলতায় অবদান রাখে?


26

আমি খুব ভাল পাইথন জানি না। ডায়নামিক ভাষার (what লা পাইথন, লুয়া, স্কিম, পার্ল, রুবি, ....) এর সঠিক বৈশিষ্ট্যগুলি কীভাবে তাদের বাস্তবায়নগুলি ধীর হতে বাধ্য করছে তা আমি আরও সুনির্দিষ্টভাবে বোঝার চেষ্টা করছি।

উদাহরণস্বরূপ , লুয়া 5.3 মেটাটেবেল যন্ত্রপাতি স্বজ্ঞাতভাবে লুয়াকে বেশ ধীর করে ফেলবে, তবে বাস্তবে লুয়া বেশ দ্রুত (এবং পাইথনের চেয়েও দ্রুত) গুঞ্জন রয়েছে।

এছাড়াও, আমার স্বজ্ঞাততা (সম্ভবত একটি ভুল) আছে যেহেতু বর্তমান প্রসেসরের উপর মেমরি কাঁচা গণনার চেয়ে অনেক ধীর হয় (ক্যাশে মিস সহ একটি মেমরি অ্যাক্সেস একইসাথে একইসাথে কয়েকশ পাটিগণিত অপারেশন প্রয়োজন), গতিশীল টাইপ চেকিং ( if (value->type != INTEGER_TAG) return;in লা ইন সি পার্লেন্স) বেশ দ্রুত চলতে পারে।

অবশ্যই, পুরো প্রোগ্রাম বিশ্লেষণ (যেমন স্ট্যালিন স্কিম বাস্তবায়ন চলছে) অনুবাদক দ্রুত চালিত হওয়ার সাথে সাথে একটি গতিময় ভাষা বাস্তবায়ন করতে পারে তবে ভেবে দেখি যে আমার প্রথমে একটি সম্পূর্ণ প্রোগ্রাম বিশ্লেষক তৈরি করার সময় নেই।

(আমি আমার মেল্ট মনিটরে একটি গতিশীল ভাষা নকশা করছি , এবং এর কিছু সি অনুবাদ করা হবে)



1
লুয়া পারফরম্যান্স টিপস , যা কিছু লুয়া প্রোগ্রাম কেন ধীর এবং কীভাবে সেগুলি ঠিক করা যায় তা ব্যাখ্যা করে।
রবার্ট হার্ভে

উত্তর:


24

পাইথনের কোন শব্দার্থক বৈশিষ্ট্য (এবং অন্যান্য গতিশীল ভাষাগুলি) এর স্বচ্ছলতায় অবদান রাখে?

কোনটিই নয়।

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

তারপরে, সান স্ব-তহবিল বন্ধ করে দিয়েছিল এবং আইবিএম, মাইক্রোসফ্ট, ইন্টেল এবং কোং সি ++ অর্থায়ন শুরু করে এবং প্রবণতাটি বিপরীত হয়। স্ব-বিকাশকারীরা সানকে তাদের নিজস্ব সংস্থা শুরু করার জন্য ছেড়ে চলে গেলেন, যেখানে তারা সেলফ ভিএম এর জন্য বিকাশ করা প্রযুক্তিটি এখন পর্যন্ত দ্রুততম ছোট ছোট ভিএমগুলির একটি (অ্যানিমর্ফিক ভিএম) তৈরি করতে ব্যবহার করেছিলেন এবং সান সেই সংস্থাটি আবার কিনেছিলেন এবং এর একটি সামান্য পরিবর্তিত সংস্করণ স্মার্টটাক ভিএম এখন "হটস্পট জেভিএম" নামে সুপরিচিত। হাস্যকরভাবে, জাভা প্রোগ্রামাররা গতিশীল ভাষাগুলি "ধীর" হওয়ার জন্য তাকাচ্ছেন, যখন বাস্তবে, জাভাএটি গতিময় ভাষার প্রযুক্তি গ্রহণ না করা পর্যন্ত ধীর ছিল। (হ্যাঁ, এটি ঠিক আছে: হটস্পট জেভিএম মূলত একটি ছোট্টকল ভিএম হয় by বাইটকোড যাচাইকারী অনেক ধরণের চেকিং করে তবে বাইটোকড একবার ভেরিফায়ার, ভিএম এবং বিশেষত অপ্টিমাইজার দ্বারা গ্রহণ করা হয় এবং জেআইটি আসলে না করে স্থিতিশীল ধরণের সাথে অনেক আগ্রহ!)

সিপিথন কেবল প্রচুর পরিমাণে স্টাফ করে না যা গতিময় ভাষাগুলি (বা বরং গতিশীল প্রেরণ) দ্রুত করে তোলে: গতিশীল সংকলন (জেআইটি), গতিশীল অপ্টিমাইজেশন, অনুমানমূলক ইনলাইনিং, অভিযোজিত অপ্টিমাইজেশন, গতিশীল ডি-অপ্টিমাইজেশন, গতিশীল ধরণের প্রতিক্রিয়া / অনুমান। প্রায় পুরো কোর এবং স্ট্যান্ডার্ড গ্রন্থাগারটি সিটিতে লেখা রয়েছে এমন সমস্যাও রয়েছে যার অর্থ হ'ল আপনি পাইথনকে হঠাৎ করেই 100x দ্রুত তৈরি করলেও এটি আপনাকে বেশি সাহায্য করবে না, কারণ 95% কোডের মতো একটি দ্বারা কার্যকর করা হয়েছিল পাইথন প্রোগ্রামটি সি, পাইথন নয়। যদি পাইথনে সমস্ত কিছু লেখা থাকে, তবে এমনকি মধ্যপন্থী গতিসম্পন্নগুলি হিংস্রূপে একটি প্রভাব তৈরি করতে পারে, যেখানে অ্যালগোরিদমগুলি দ্রুততর হয়, এবং মূল ডেটাস্ট্রাকচারগুলি দ্রুততর হয়, তবে অবশ্যই মূল ডেটা স্ট্রাকচারগুলিও অ্যালগরিদমের মধ্যে ব্যবহৃত হয়, এবং মূল অ্যালগরিদম এবং মূল ডেটা কাঠামো অন্য কোথাও ব্যবহৃত হয়,

আজকের সিস্টেমে কয়েকটি জিনিস রয়েছে যা স্মৃতি-পরিচালিত ওও ভাষাগুলির (গতিশীল বা না) জন্য কুখ্যাত। ভার্চুয়াল মেমরি এবং মেমরি সুরক্ষা বিশেষত আবর্জনা সংগ্রহের পারফরম্যান্স এবং সাধারণভাবে সিস্টেমের কার্য সম্পাদনের জন্য একটি হত্যাকারী হতে পারে। এবং এটি মেমোরি-নিরাপদ ভাষায় সম্পূর্ণ অপ্রয়োজনীয়: যখন ভাষার কোনও মেমরি অ্যাক্সেস শুরু হয় না তখন কেন অবৈধ স্মৃতি অ্যাক্সেসগুলি থেকে রক্ষা করুন? আজুল আবদ্ধ হওয়ার পরিবর্তে আবর্জনা সংগ্রহে সহায়তা করার জন্য আধুনিক শক্তিশালী এমএমইউগুলি (ইনটেল নেহালিম এবং আরও নতুন এবং এএমডি এর সমতুল্য) ব্যবহার করতে পেরেছেন, তবে এটি সিপিইউ দ্বারা সমর্থিত হলেও মূলধারার ওএসের বর্তমান মেমরি সাবসিস্টেমগুলি যথেষ্ট শক্তিশালী নয় এটির অনুমতি দেওয়ার জন্য (এজন্য আজুলের জেভিএম আসলে খালি ধাতব পাশাপাশি ভার্চুয়ালাইজড চালায় runs ওএস, এটির মধ্যে নয়)।

সিঙ্গুলারিটি ওএস প্রকল্পে, মাইক্রোসফ্ট প্রক্রিয়া পৃথককরণের জন্য টাইপ সিস্টেমের পরিবর্তে এমএমইউ সুরক্ষা ব্যবহার করার সময় সিস্টেমের কার্যক্ষমতায় 30% ডলার প্রভাব পরিমাপ করেছে।

তাদের বিশেষকৃত জাভা সিপিইউগুলি তৈরি করার সময় আজুল আরেকটি বিষয় লক্ষ্য করেছিল যে আধুনিক মূলধারার সিপিইউগুলি ক্যাশে মিসের ব্যয় হ্রাস করার চেষ্টা করার সময় সম্পূর্ণ ভুল জিনিসটির দিকে মনোনিবেশ করে: তারা শাখার পূর্বাভাস, স্মৃতি প্রিফেচিং ইত্যাদির মাধ্যমে ক্যাশে মিসের সংখ্যা হ্রাস করার চেষ্টা করে, ইত্যাদি। তবে, একটি ভারী বহুবর্ষজীবী ওও প্রোগ্রামে অ্যাক্সেসের ধরণগুলি মূলত সিউডো-এলোমেলো, এখানে পূর্বাভাস দেওয়ার কিছুই নেই। সুতরাং, এই ট্রানজিস্টরগুলির সমস্তগুলি কেবলই নষ্ট, এবং এর পরিবর্তে একটি করা উচিত যা প্রতিটি স্বতন্ত্র ক্যাশে মিসের ব্যয় হ্রাস করে। (মোট ব্যয়টি # মিসিস * ব্যয়, মূলধারার প্রথমটিকে নীচে নামানোর চেষ্টা করা হয়েছে, দ্বিতীয় আজুল দ্বিতীয়।) আজুলের জাভা কম্পিউট এক্সিলারেটরগুলিতে ফ্লাইটে 20000 একযোগে ক্যাশে মিস থাকা এবং এখনও অগ্রগতি হতে পারে।

যখন আজুল শুরু হয়েছিল, তারা ভেবেছিল যে তারা শেল্ফ I / O উপাদানগুলি কিছুটা নেবে এবং তাদের নিজস্ব বিশেষায়িত সিপিইউ কোর নকশা করবে, তবে তারা আসলে যা করা দরকার তা হ'ল বিপরীত: তারা একটি আদর্শের পরিবর্তে গ্রহণ করেছে - শেল্ফ 3-ঠিকানা আরআইএসসি কোর এবং তাদের নিজস্ব মেমরি নিয়ামক, এমএমইউ এবং ক্যাশে সাবসিস্টেমটি ডিজাইন করেছে।

tl; dr : পাইথনের "অলসতা" ভাষার কোনও সম্পত্তি নয় তবে ক) এর নিষ্পাপ (প্রাথমিক) বাস্তবায়ন, এবং খ) আধুনিক সিপিইউ এবং ওএস বিশেষত সিটিকে দ্রুত চালিত করার জন্য ডিজাইন করা হয়েছে, এবং তাদের বৈশিষ্ট্যগুলি সি এর জন্য হয় সাহায্য করে না (ক্যাশে) অথবা এমনকি সক্রিয়ভাবে আঘাত করছে (ভার্চুয়াল মেমরি) পাইথনের কর্মক্ষমতা।

এবং আপনি এখানে গতিশীল অ্যাডহক পলিমারফিজম সহ যে কোনও মেমরি-পরিচালিত ভাষা সন্নিবেশ করতে পারেন… এটি যখন কার্যকর প্রয়োগের চ্যালেঞ্জের কথা আসে তখনও পাইথন এবং জাভা প্রায় "একই ভাষা" হয়।


আপনার কি আজুলের জন্য কোনও লিঙ্ক বা রেফারেন্স আছে?
বেসাইল স্টারিঙ্কেভিচ

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

1
একদিকে যেমন ... আপনার কি সিঙ্গুলারিটির 30% উন্নতির জন্য কোনও রেফারেন্স রয়েছে? আমি বহু বছর ধরে ভাষা-ভিত্তিক-সুরক্ষা ওএস-এর একজন সমর্থক হয়েছি, তবে এই চিত্রটি আগে কখনও দেখিনি এবং এটি বেশ চমকপ্রদভাবে খুঁজে পেলাম (অতীতে আমি যে পরিসংখ্যানগুলি দেখেছি 10% এর কাছাকাছি এসেছি) এবং অবাক করে দেখি কী তারা যে অনেক উন্নতি পেতে করেনি ...
জুলে

5
@ ম্যাসনওহিলার: কারণ এখানে কেবলমাত্র কৃপণ পাইথন বাস্তবায়ন রয়েছে। পাইথনের কোনও বাস্তবায়নকারী জে 9, জারোকিত, হটস্পট এবং কো'র জন্য জে 9, জারোকিত, হটস্পট এবং কো'র জন্য ব্যয় করেছেন অর্থ, লোক, গবেষণা এবং সংস্থানসমূহের একটি ক্ষুদ্র ক্ষুদ্র অংশও ব্যয় করেনি সম্ভবত 5 টি পাইথন বাস্তবায়নগুলি এমনকি সম্ভবত নয় জনবল আছে যে ওরাকল কেবল আবর্জনা সংগ্রহকারীকে ব্যয় করছে। আইবিএম এক্লিপ্স ওএমআর (জে 9 থেকে প্রাপ্ত সংশ্লেষিত ওপেন-সসেসড ভিএম ফ্রেমওয়ার্ক) এর ভিত্তিতে একটি পাইথন বাস্তবায়নে কাজ করছে, আমি বাজি রাখতে ইচ্ছুক যে জে
জার্গ ডব্লু মিতাগ

2
রেকর্ড সি এর জন্য সংখ্যাগত কাজের জন্য ফোর্টরানের তুলনায় ধীর গতিতে যেহেতু ফোর্টরান কঠোর অ্যালিয়াসিং প্রয়োগ করে তাই অপ্টিমাইজার আরও আক্রমণাত্মক হতে পারে।
মাইকেল শপসিন

8

পাইথনের বর্তমান বাস্তবায়ন (যা অন্যান্য গতিশীল ভাষাগুলি যেমন আধুনিক জাভাস্ক্রিপ্ট বাস্তবায়নগুলি এবং যেমনটি আপনি দেখিয়েছেন, লুয়া) দ্বারা পরিচালিত প্রচুর পরিমাণে অপটিমাইজেশন নেই, তার বেশিরভাগ সমস্যার উত্স রয়েছে, এতে কিছু শব্দার্থ সমস্যা রয়েছে যা এটি তৈরি করবে কমপক্ষে কয়েকটি ক্ষেত্রে অন্য ভাষার সাথে প্রতিযোগিতা করা কার্যকর করা কঠিন। কিছু যে বিশেষভাবে বিবেচনা মূল্য:

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

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

  • পাইথনের একটি evalফাংশন রয়েছে যার অর্থ একটি জেআইটি সংকলক ক্রিয়াকলাপটি ঘটবে না সে সম্পর্কে ধারণা অনুমান করতে পারে না, যদিও এটি পুরো প্রোগ্রাম বিশ্লেষণ করে, যতক্ষণ না evalএকবার ব্যবহার করা হয়। উদাহরণস্বরূপ, পাইথন সংকলকটি ধরে নিতে পারে না যে কোনও শ্রেণীর কোনও সাবক্লাস নেই এবং অতএব পদ্ধতি কলগুলি ডিভারচ্যুয়ালাইজ করা যায়, কারণ সেই অনুমানটি পরে কল করার মাধ্যমে উপেক্ষা করা যেতে পারে eval। দেশী-সংকলিত কোড দ্বারা অনুমানগুলি সেই কোডটি কার্যকর করার আগে অবৈধ করা হয়নি তা নিশ্চিত করার জন্য এটি অবশ্যই গতিশীল প্রকারের চেকগুলি সম্পাদন করতে হবে।


3
evalএকটি পুনরায় সংকলন এবং / অথবা ডি-অপ্টিমাইজেশন ট্রিগার করে পরবর্তী পয়েন্টটি প্রশমিত করা যায় ।
জার্গ ডব্লু মিট্টাগ

4
যাইহোক, এটি পাইথনের কাছেও অনন্য নয়। জাভা (বা বরং জেভিএম) এর ডায়নামিক কোড লোডিং, এবং ডায়নামিক লিঙ্কিং রয়েছে, সুতরাং ক্লাস হায়ারার্কি বিশ্লেষণও সেখানে হ্যালটিং সমস্যা সমাধানের সমতুল্য। তবুও, হটস্পট আনন্দের সাথে অনুমিতভাবে বহুবিক পদ্ধতিগুলিকে ইনলাইন করে, এবং যদি শ্রেণি শ্রেণিবিন্যাসের কিছু পরিবর্তন হয় তবে ভাল, এটি কেবল তাদের ফিরিয়ে আনবে।
জার্গ ডব্লু মিট্টাগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.