পাইথনকে আধুনিক জাভাস্ক্রিপ্ট প্রয়োগের মতো অনুকূলিত করা হয়নি কেন?


11

V8 (ক্রোম), স্পাইডারমনকি (ফায়ারফক্স), এবং চক্র (আইই / এজ) এর মতো আধুনিক জাভাস্ক্রিপ্ট বাস্তবায়নগুলি জেআইটি সংকলন, এবং পারফরম্যান্সের উন্নতির জন্য আরও কয়েকটি অপ্টিমাইজেশন রয়েছে।

পাইথনের এগুলি নেই কেন?

আমি পাইপাই এবং আয়রন পাইথনের দিকে তাকিয়ে আছি, যা উভয়ই গতি লাভের দাবি করে। পাইপাই আমি বুঝতে পারছি না যে পাইথনে লিখিত একটি পাইথন বাস্তবায়ন কীভাবে সি আইরন রেফারেন্স প্রয়োগের চেয়ে দ্রুত হবে, একই ধারণা, তবে .নেট ফ্রেমওয়ার্ক কীভাবে গতি বাড়বে তা আমি দেখতে পাই না।


2
আয়রন পাইথন - অন্য কোনও নেট নেট ভাষার মতো - মাইক্রোসফ্টের "কমন ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ" -এ সংকলিত হয়েছে যার জন্য খুব পরিপক্ক জেআইটি সংকলক বাস্তবায়ন উপস্থিত রয়েছে।
ডক ব্রাউন

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

1
@ বেসাইলস্টারিঙ্কেভিচ: আপনি এই মন্তব্যটি দিয়ে আমাদের যা বলার চেষ্টা করছেন তা আমি পাই না। ওপি CPython, PyPy এবং IronPython, যা সম্পর্কে স্পষ্টভাবে জিজ্ঞাসা করা হয় হয় নির্দিষ্ট পাইথন বাস্তবায়নের।
ডক ব্রাউন

1
@ ডকব্রাউনটি প্রশ্নের শেষ অনুচ্ছেদে প্রদত্ত কোনও প্রাসঙ্গিক বিষয় হিসাবে মনে হচ্ছে, যা বিশেষত পাইথনকে ব্যাখ্যা করা ভাষা হিসাবে অভিহিত করার সময় একটি ভুল বোঝাবুঝি দেখায়।
বিট্রি

উত্তর:


19

পাইথনের এগুলি নেই কেন?

পারফরম্যান্স সম্পর্কে যত্নশীল এমন পাইথন বাস্তবায়ন নেই বলে আপনি কেন ভাবেন তা আমি নিশ্চিত নই। পাইপি , আয়রন পাইথন এবং জাইথন ​​হ'ল শিল্প-শক্তি, উত্পাদন-প্রস্তুত পাইথন বাস্তবায়ন যা পারফরম্যান্সের বিষয়ে যত্নশীল। পাইস্টন একটি ইন-ডেভলপমেন্ট বাস্তবায়ন যা বিশেষত পারফরম্যান্সের জন্য তৈরি করা হয়েছিল । ভারমুক্ত সোয়ালো এবং Psyco ছিলেন পাইথন কর্মক্ষমতা উন্নত করতে প্রকল্প।

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

এই উত্তরটি পাইথন সম্প্রদায়ের আদর্শ মানসিকতার একটি ভাল উদাহরণ: পারফরম্যান্স সমস্যাগুলি সমাধান করার পরিবর্তে তারা কেবল তাদের কোডটি পাইথনে নয় লিখতে পছন্দ করবে।

আমি পাইপাই এবং আয়রন পাইথনের দিকে তাকিয়ে আছি, যা উভয়ই গতি লাভের দাবি করে। পাইপাই আমি বুঝতে পারছি না যে পাইথনে লিখিত একটি পাইথন বাস্তবায়ন সি'তে রেফারেন্স প্রয়োগের চেয়ে দ্রুততর হবে an

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

দ্বিতীয়ত, যেহেতু এটি কেবলমাত্র কম্পাইলারের আউটপুটটি কত দ্রুততর তা বিবেচনা করে এবং সংকলকটি পাইথনে লিখিত হয়, অর্থাৎ যে ভাষাটি এটি সংকলন করে, এটি আসলে নিজেকে সংকলন করে দ্রুততর করে তুলতে পারে।

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

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

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

আরপিথন ফ্রেমওয়ার্কটি RPython প্রোগ্রামিং ল্যাঙ্গুয়েজে উচ্চ-পারফরম্যান্স ডায়নামিক ল্যাংগুয়েজ ইমপ্লোয়েশন লেখার জন্য একটি কাঠামো। এটিতে আবর্জনা সংগ্রহকারী, অবজেক্ট স্পেস, মেটা-অবজেক্ট প্রোটোকল, প্রাক-সংজ্ঞায়িত বস্তু, প্রকার এবং ক্রিয়াকলাপ এবং আরও রয়েছে includes তবে মুকুট রত্নটি হ'ল একটি দোভাষী থেকে একটি জেআইটি সংকলক স্বয়ংক্রিয়ভাবে উত্পন্ন করার ক্ষমতা: আপনি যদি আরপিথন কাঠামোর কোনও ভাষা প্রয়োগ করেন, আপনাকে কেবল একটি দোভাষী লিখতে হবে, আরপিথন কাঠামোটি জেআইটির যত্ন নেয়।

কেবল পিপিই নয়, আরপিথন প্ল্যাটফর্মে প্রচুর ভাষার প্রয়োগ রয়েছে

আয়রন পাইথন, একই ধারণা কিন্তু আমি কীভাবে নেট নেট ফ্রেমওয়ার্কের গতি বাড়িয়ে দেখছি তা দেখছি না।

মাইক্রোসফ্ট, বা মনো দ্বারা বিভিন্ন .NET রূপগুলির মতো আইএসও সি এল এলির বেশিরভাগ বাস্তবায়নে পরিশীলিত আবর্জনা সংগ্রহকারী, অপ্টিমাইজার এবং সংকলক রয়েছে। জাইথন ​​এবং জাভা বাস্তবায়নের ক্ষেত্রেও একই কথা।

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


6

V8 (ক্রোম), স্পাইডারমনকি (ফায়ারফক্স), এবং চক্র (আইই / এজ) এর মতো আধুনিক জাভাস্ক্রিপ্ট বাস্তবায়নগুলি জেআইটি সংকলন, এবং পারফরম্যান্সের উন্নতির জন্য আরও কয়েকটি অপ্টিমাইজেশন রয়েছে।

পাইথনের এগুলি নেই কেন?

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

পাইপাই আমি বুঝতে পারছি না যে পাইথনে লিখিত একটি পাইথন বাস্তবায়ন সি'তে রেফারেন্স প্রয়োগের চেয়ে দ্রুততর হবে an

ধারণাটি হ'ল একবার কোডটি জেআইটি-এড হয়ে গেলে এটি আর "ব্যাখ্যা করা" হয় না। পাইপিআই পাইথন কোডটি মেশিন কোডে রূপান্তরিত করে কাজ করে (যেমন x86_64 মেশিন কোড) যা তখন প্রসেসরে সরাসরি চালিত হয়।


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

-3

আপনি যদি অজগর কোডটিকে মূল অজগর ফাইল হিসাবে একটি সাধারণ শীর্ষ স্তরের স্টার্ট-আপ দিয়ে মডিউলগুলিতে কাঠামো করেন (এতে খুব কম কোড থাকে) তবে পাইথন আপনার বাকী সমস্ত কোডকে মেশিন स्वतंत्र বাইট কোডে সংকলন করে, এগুলি হ'ল .pyc ফাইলগুলি যা আপনি আপনার ডিরেক্টরি কাঠামোতে দেখেন। এটি প্রথম রানের পরে লোডিং এবং ব্যাখ্যার সময়কে হ্রাস করে।

আপনি যদি স্ক্রিপ্টটি -O বা -OO পতাকাগুলি দিয়ে শুরু করেন বা 0 টির চেয়ে বড় একটি মানের সাথে পাইথোনপটিমাইজ সেট করেন তবে .pyo ফাইলগুলি উত্পন্ন হয় যা আরও অনুকূলিত হয়।

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


পাইথনে নন-সি এক্সটেনশানগুলি কীভাবে সংহত করবেন? আমি কেবল সিথনের সি-এক্সটেনশান সম্পর্কে সচেতন।

1
@ বে: শেয়ার্ড লাইব্রেরিতে মূলত যে কোনও কিছু, (.dll বা .so) বলা যেতে পারে আপনি ফাংশনের স্বাক্ষরগুলি জানতে পারলে - এগুলি ম্যানুয়ালি কনফিগার করা যেতে পারে, যেমন সুইংয়ের মতো সরঞ্জাম দ্বারা উত্পাদিত বা এমনকি ডক্সিওন ডকুমেন্টেশন থেকে উত্পন্ন। stackoverflow.com/questions/5811949/... হিসাবে সহায়ক blog.heroku.com/see_python_see_python_go_go_python_go
স্টিভ বার্নস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.