নেটিভ মেশিন কোডে অজগর সংকলক কেন নেই?


25

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


4
সেখানে হয় । হাসেলও জিএইচসিআই
toasted_flakes

সি ++ এরও দোভাষী রয়েছে । এবং সম্ভবত অন্যান্য অনেক ভাষার উভয়ই প্রয়োগ রয়েছে।
ক্লাদিও

2
আসলে, IronPythong চয়ন করে ( ironpython.net ) এবং "ngen" ব্যবহার দ্বারা উত্পাদিত আইএল কোড কম্পাইল ( msdn.microsoft.com/de-de/library/6t9t5wcf%28v=vs.110%29.aspx ) সেখানে হয় একটি উপায় পাইথনকে দেশীয় মেশিন কোডে সংকলন করতে। এমন নয় যে আমি সেই সরঞ্জাম চেইনটি পরীক্ষা করেছিলাম।
ডক ব্রাউন

10
পাইথন-থেকে-নেটিভ সংকলক লিখতে পারেন। এগুলি কেবল খুব আকর্ষণীয় নয় কারণ তারা প্রকৃতপক্ষে কোনও উল্লেখযোগ্য ব্যবধানের দ্বারা পারফরম্যান্সের উন্নতি করে না, যদি না তারা সত্যিকার অর্থে এমন একটি ভাষার প্রয়োগ করে যা পাইথনের মতো দেখায় তবে আরও বেশি সীমাবদ্ধ না হয়। আমি আগে অন্য কোথাও ব্যাখ্যা করেছি ।

উত্তর:


29

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

পাইথনের মতো ভাষা কার্যকরভাবে সংকলন করতে আপনার প্রয়োজন:

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

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

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

2
আসলে, আপনি অবাক হবেন যে এসবিসিএল কী করতে পারে। বেনমার্কস গেমটি এটি জাভা হিসাবে দ্রুত চলমান দেখায়, প্রায় জিএইচসির চেয়ে দ্রুত গতিতে এবং 1x থেকে 10x সি এর মধ্যে এটি কোনও মান দ্বারা ধীর হয় না। হ্যাঁ, গতিশীল ধরণগুলি কিছুটা হলেও সংকলনকে বাধাগ্রস্ত করে, তবে আপনি যা ভাবেন বলে মনে হয় তেমনটি নয়।
ড্যানিয়েল গ্রেটজার

3
সংকলিত পাইথনের সাথে ব্যাখ্যা করা অজগরটির গতির তুলনা নিজের মধ্যে আকর্ষণীয়। "সি ++ ব্যবহার করুন" বলা বন্ধ করুন। পাইথনে সম্ভবত আপনার কোড লেখা আছে। সম্ভবত কোডটি অজগরে লেখা সহজ। কে পাত্তা দেয়। আমি যা যত্ন করি তা হ'ল 1.5x গতি (এটি যাই হোক না কেন)। এটি একটি বিশাল পার্থক্য করতে পারে।
টমাস এডিং

3
অন্য কথায়, আপনি যদি সংকলন করতে চান তবে সি ++ বা পাসকালের মতো অন্য একটি ভাষা বেছে নিন
করে_ডন্ট_বুলি_মে_স_ও_লর্ড

0

দুটি ধারণা আমাদের আরও বুঝতে সহায়তা করতে পারে যে পাইথন নেটিভ মেশিন কোডে সংকলিত কেন "সংকলিত সি বা অন্যান্য সাধারণভাবে সংকলিত ভাষার মতো দ্রুত চালাতে পারে না"। এগুলিকে প্রারম্ভিক বাঁধাই এবং দেরী বন্ধন বলে।

আমার বলা উচিত যে আমি পাইথন বিশেষজ্ঞ নই, এবং আমি দুর্ঘটনাক্রমে এই সাইটে এসেছি। তবে আমি এই সাইটটি পছন্দ করি।

এখানে অন্য প্রতিক্রিয়া হিসাবে উল্লিখিত হিসাবে, সি ++ সংকলক প্রোগ্রাম সম্পর্কে অনেক কিছু জানতে পারে এবং নির্দিষ্ট ডেটা স্ট্রাকচারের জন্য কোন ক্রিয়াকলাপগুলি ব্যবহার করতে হবে সে সম্পর্কে সিদ্ধান্ত নিতে পারে। উদাহরণস্বরূপ যদি দুটি পূর্ণসংখ্যের ভেরিয়েবল একসাথে যুক্ত করা প্রয়োজন, সংকলকটি জানেন যে তারা নেটিভ পূর্ণসংখ্যা, উদাহরণস্বরূপ 32 বিট প্রশস্ত এবং এটি একটি "ADD" নির্দেশের সাথে তাদের একসাথে যুক্ত করতে পারে। সুতরাং এটি কোডে ADD নির্দেশনা সংকলন করে। এটি লক হয়ে গেছে এবং প্রোগ্রাম চলাকালীন পরিবর্তন করা যায় না। তাড়াতাড়ি বাঁধাই।

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


-4

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


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