পাইথন বাইটকোড সংকলনকারী অন্যান্য প্রোগ্রামিং ভাষা কেন নেই?


51

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

তবে পাইথন দোভাষী দ্বারা চালিত হওয়ার আগে পাইথন বাইটকোডে (.pyc ফাইল) রূপান্তরিত হয়। আমি কেবল অজ্ঞ হতে পারি, তবে পাইথন বাইটকোড সংকলিত অন্য কোনও প্রোগ্রামিং ভাষা কেন নেই?

এটি কি কারণ কেউই মাথা ঘামায় না, বা এমন একধরণের অন্তর্নিহিত বাধা বা বাধা আছে যা কাজটি করা এত কঠিন করে তোলে?


30
... কারণ তারা জিআইএল নিয়ে কাজ করতে চায় না? ;)
ম্যাসন হুইলারের

4
প্রবৃত্তিগুলি আমাকে বলবে যে জেভিএম ঠিক কতটা পরিপক্ক, ভালভাবে নির্দিষ্ট হয়েছে এবং জেভিএম কার্যত সমস্ত প্ল্যাটফর্মে বা বোকামি অর্জন সহজ with
রিগ

4
আমি আরও সন্দেহ করি যে বেশিরভাগ জেভিএম পাইথনের দোভাষীদের চেয়ে অনেক দ্রুত are
পিটার স্মিথ

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

3
পাইথন বাইটকোড পাইথন ইন্টারপ্রেটারের পরবর্তী সংস্করণগুলি দ্বারা স্বীকৃত নয়। পাইথন বাইটকোড সংকলিত এমন কোনও প্রোগ্রামিং ভাষা কীভাবে কেউ প্রয়োগ করতে পারেন?
Gus

উত্তর:


77

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


22
প্রকৃতপক্ষে, বাইটকোড বিন্যাসের বিবরণগুলি প্রায়শই ছোটখাটো সংস্করণগুলির মধ্যে পরিবর্তিত হয় এবং 99% সামঞ্জস্যপূর্ণ পাইপাই এমনকি চেষ্টা করে না (বাস্তবে, তারা তাদের নিজস্ব বাইকোড নির্দেশাবলী যুক্ত করে)।

দ্রষ্টব্য: পাইথন - ভাষা - এর একটি আনুষ্ঠানিক স্পেসিফিকেশন রয়েছে ("PEPs" দেখুন)। 'পাইথন ভার্চুয়াল মেশিন' নেই। এটি প্রকৃতপক্ষে (যেমন) জাভা, যেখানে উভয়ই নির্দিষ্ট unlike
অ্যালবার্ট

56

এখানে একাধিক জেভিএম ভাষা রয়েছে কারণ সেখানে প্রতিভাবান ব্যক্তিরা কোড লিখতে চেয়েছিলেন যা বিদ্যমান জাভা কোডের সাথে কাজ করবে তবে তারা জাভা লিখতে চায় নি

স্পষ্টতই এমন কোনও প্রোগ্রামার নেই যারা বিদ্যমান পাইথন কোড নিয়ে কাজ করতে চায় তবে পাইথনকে ঘৃণা করে পাইথন বাইকোড দোভাষীকে অন্য একটি ভাষা বন্দর করতে পারে।

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


7
আমি আশা করি আপনি বোঝাচ্ছেন না যে জাভা পাইথন :-) এর চেয়ে বেশি সাফল্য পান বা জাভা
জর্জিও

8
@ জর্জিও: আমি বোঝাচ্ছি যে গ্রোভী, স্কালা, ক্লোজার ইত্যাদি প্রযোজকরা ভাবেন যে উন্নতির যথেষ্ট জায়গা রয়েছে। আপনি কি বোঝাচ্ছেন যে পাইথন চুষছে?
কেভিন

8
অজগর নিয়ে কাজ করার পরে আমি বলব "লো স্তন্যপণ ফ্যাক্টর "টি ভুল হবে। এটি খুব বেশি সাধারণভাবে গৃহীত স্টাফগুলিকে টাকা দেয় এবং পুরো 'স্ব' জিনিসটি অত্যন্ত বিপরীত। আসলে বোবা। কোনও শ্রেণি পদ্ধতিটি কোথায় তা জানতে পারে না?
রিগ

6
@ রিগ ব্যক্তিগতভাবে, আমি পাইথনের অভিব্যক্তিটি আরও মার্জিত বলে মনে করি। ওও ভেরিয়েবলের মতো দেখতে একটি বিশেষ কীওয়ার্ডের চেয়ে সিনট্যাক্স থেকে জৈবিকভাবে অনুসরণ করে। শ্রেণি পদ্ধতিগুলি কোথায় তা জানে না, কারণ পাইথন শ্রেণির সংজ্ঞাগুলি কেবল কোড এবং এই কোডটি গোপনীয় নয় কারণ এটি কোনও শ্রেণীর সংজ্ঞার অভ্যন্তরে অবস্থিত। আপনি যে কোনও জায়গায় পদ্ধতিগুলি সংজ্ঞায়িত করতে পারেন এবং রানটাইমে এগুলি একটি শ্রেণিতে যুক্ত করতে পারেন। প্রকৃতপক্ষে, আপনি একই ফাংশনটি নিতে পারেন এবং একাধিক ক্লাসে এটি একটি পদ্ধতি হিসাবে ব্যবহার করতে পারেন, যা এমন thisদৃষ্টান্তের সাথে সত্যই কাজ করে না ।
অ্যান্টিমনি

6
আমি মনে করি এটি ভাষা নয় ভিএমএসের বিষয়। জেভিএম প্রজন্মের আবর্জনা সংগ্রহকারী, জেআইটি ইত্যাদির সাথে একটি পারফরম্যান্স ভিএম এবং সিপিথন রেফারেন্স গণনা ব্যবহার করে এবং দোভাষী হয়। এটি সিপিথন যা একটি প্লাটফর্ম হিসাবে ডাকে। বিটিডব্লিউ হাইহাই বিদ্যমান।
পুয়েরকপপ

26

সিপিথনে জিআইএল এর মতো প্রযুক্তিগত ঘাটতি রয়েছে, তবে ভাষার কিছু অভাব রয়েছে, তাই রানটাইম পাইথন সম্প্রদায়ের বিক্রয়কেন্দ্র নয়। ঠিক বিপরীতে, জিআইএল / সিপিথন প্রয়োগের সাথে অসন্তুষ্টির কারণে আরও ব্যাকএন্ড রানটাইম বিকল্প রয়েছে।

জাভা ভাষা JVM (এমনকি জাভা সম্প্রদায়তে) এর চেয়ে অনেক বেশি ম্যালেন্ডেড।

বেশিরভাগ চেনাশোনাগুলিতে জেভিএম বেশ সম্মানিত; এইভাবে পৃথক / আরও ভাল ভাষার ফ্রন্টের আকাঙ্ক্ষা অত্যন্ত অনুকূলিত ব্যাক এন্ড জেভিএমের সুবিধার সাথে শেষ হয়।


10

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

আরও কিছু গবেষণা করেছেন এবং দৃশ্যত দুটি জিআইএল রয়েছে কেবল একটি নয়। অন্যগুলি আমদানি নিয়ন্ত্রণ করে ।


1
পাইথন উইকিতে "সিপিথন প্রোগ্রামাররা আয়রন পাইথনের প্রতি আগ্রহী হতে পারে" কারণগুলিতে উল্লেখ করা একটি প্রযুক্তিগত কারণগুলির মধ্যে "জিআইএল মুক্ত" হ'ল ।
ইন্নিস

1
@ ইয়ান্নিসিজোস: অবশ্যই নেট নেট ফ্রেমওয়ার্ক অ্যাক্সেস সম্পূর্ণরূপে অসঙ্গত নয়। অবশ্যই, এটি সম্ভব যে সিপিথন ব্যবহারকারীরা এতে সম্পূর্ণ আগ্রহী নন।
রবার্ট হার্ভে

@ রবার্টহারভে নিনজা এটিকে সম্পাদনা করেছে। যদিও আমি প্রযুক্তিগত কারণ হিসাবে "অভিনব নতুন খেলনাগুলিতে অ্যাক্সেস" ভাবি না (খেলনাগুলি দুর্দান্ত নয়) তবে উইকিও উল্লেখ করেছে যে আয়রন পাইথনটি প্রসারিত করা আরও সহজ।
ইন্নিস

8

অন্যান্য উত্তরগুলি অনেক অর্থবহ করে, তবে বাস্তবে বর্তমানে এমন ভাষা রয়েছে যা পাইথনের সংকলন করে। যেখানে ইচ্ছা আছে ...

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

মন্তব্যের ভিত্তিতে আমরা বর্তমানে তিনটি বিকল্প ভাষা জানি যা পাইথন ভিএম ব্যবহার করে (এখানে অন্য কোনও সংযোজন করতে দ্বিধা বোধ করবেন):

  • ফাংশনাল প্রোগ্রামিং এবং অভিনেতা-স্টাইল প্রোগ্রামিংয়ের জন্য মোচি নিজেকে গতিশীল টাইপড প্রোগ্রামিং ভাষা হিসাবে বর্ণনা করে ।
  • হাই : পাইথনে এম্বেড থাকা লিস্পের একটি উপভাষা হিসাবে নিজেকে বর্ণনা করে ।
  • ডিজি : নিজেকে (প্রযুক্তিগত) সহজ ভাষা হিসাবে বর্ণনা করে যা সিপিথন বাইটকোডে সংকলন করে

2
হাইল্যাং উল্লেখ করারও উপযুক্ত
আইডিয়ান্সম্যান 42


6

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

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

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

আমি পাইথনকে ভালবাসি, আমি এটি সত্যই করি এবং এটি বলার ঘৃণা করি তবে মাঝে মাঝে পারফরম্যান্সটি আমাকে দাঁতে দাঁত মারে - অন্যথায়, কেন ন্যাপি বা স্কিপির মতো সমালোচক পাইথন লাইব্রেরিগুলিকে সি কোডে ফিরে আসতে হবে?

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

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