জাভা সংকলন গতি বনাম স্কালা সংকলন গতি


101

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

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

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


দেখে মনে হচ্ছে কিছু ব্যবহারকারী আপনার সাথে একমত হয়েছেন;) twitter.com/etorreborre/status/21286172202
ভনসি

জাভা তুলনায় দ্রুত সংকলন যান। ওয়ে দ্রুত, যা কিছু বলছে।
ড্যানিয়েল সি সোব্রাল

আহা, আমার ক্ষেত্রে এটি কয়েক শঙ্কিত এলওসি সহ গড় স্ক্যালাক সংকলনের জন্য কয়েক মিনিট সময় নেয়, fsc কিছুটা দ্রুত।
জেরিহো

উত্তর:


57

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

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

মার্টিন ওডারস্কি তার উত্তরে আরও বিশদ সরবরাহ করেছেন।


1
এই পৃষ্ঠাটি কি আরও বেশি নয় ( lamp.epfl.ch/~magarcia/ScalaCompilerCornerReloade )?
ভোনসি

আমি নেটবিয়ান থেকে পিঁপড়ে + জেডিটে স্যুইচ করেছি (আমি জানি আমি জানি, পিঁপড়া ক্যাভম্যানদের জন্য, তবে আমি নিজের সময়ে বিকাশ করব) যাতে আমি fsc ব্যবহার করতে পারি। তবে আমি ভাবছিলাম, ক্লোজারের সংকলনের গতি কীভাবে স্কালার সাথে তুলনা করে? স্ক্যালায় এটির অনেকগুলি বৈশিষ্ট্য রয়েছে বলে মনে হয় তবে আমি ধারণা করি সিনট্যাক্সটি পার্স করা আরও সহজ।
ব্যবহারকারী 405163

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

458

স্কালা সংকলকটির গতির (অভাব) দুটি দিক রয়েছে।

  1. গ্রেটার স্টার্টআপ ওভারহেড

    • স্ক্যালাক নিজেই প্রচুর ক্লাস নিয়ে থাকে যা লোড এবং জিট-সংকলন করতে হয়

    • সমস্ত রুট প্যাকেজ এবং ফাইলগুলির জন্য স্ক্যালাককে ক্লাসপথটি অনুসন্ধান করতে হবে। আপনার ক্লাসপাথের আকারের উপর নির্ভর করে এক থেকে তিন অতিরিক্ত সেকেন্ড সময় নিতে পারে।

    সামগ্রিকভাবে, 4-8 সেকেন্ডের স্কাল্যাকের একটি প্রারম্ভিক ওভারহেডের প্রত্যাশা করুন, আপনি যদি এটি প্রথমবার চালিত করেন যাতে ডিস্ক-ক্যাশগুলি ভরে না যায়।

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

  2. ধীর সংকলনের গতি। স্ক্যালাক 1000 লাইন / সেকেন্ড পর্যন্ত প্রায় 500 টি পরিচালনা করে। জাভাক তার প্রায় 10 বার পরিচালনা করে। এর বেশ কয়েকটি কারণ রয়েছে।

    • প্রকার অনুকরণ ব্যয়বহুল, বিশেষত যদি এতে অন্তর্নিহিত অনুসন্ধান জড়িত থাকে।

    • স্ক্যালাক দুইবার টাইপ চেকিং করতে হবে; একবার স্কালার নিয়ম অনুসারে এবং জাভা এর বিধি অনুসারে মুছে ফেলার পরে দ্বিতীয়বার।

    • টাইপ চেকিংয়ের পাশাপাশি স্কালা থেকে জাভাতে যেতে প্রায় 15 টি রূপান্তর পদক্ষেপ রয়েছে যা সব সময় নেয়।

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

    অন্যদিকে, 1000 লাইন স্কালার প্রোগ্রামটি 2-3 কে-লাইন জাভা প্রোগ্রামের সাথে সঙ্গতিপূর্ণ হতে পারে, তাই সেকেন্ডে লাইনে গণনা করার সময় কিছুটা ধীর গতি প্রতি লাইনে আরও কার্যকারিতার বিরুদ্ধে ভারসাম্য বজায় রাখতে হয়।

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


1
ক্লাস লোডিংয়ের কারণে প্রারম্ভকালীন ওভারহেড সম্পর্কে: জিসিজে বা মনো সহায়তা ব্যবহার করে নেটিভ কোডে আগাম সময়ের সংকলন করবে?
যান্ত্রিক শামুক 7

15
স্ক্যালাকে যদি C ++ এ আবার লেখা হয়? : o)
মার্কাস

ইনভয়েডাইনামিক বাইটকোড নির্দেশ ব্যবহার করে কি কোনও উপকার হবে?
রব গ্রান্ট

40

আপনার সচেতন হওয়া উচিত যে স্কালা সংকলন জাভা সঙ্কলনের জন্য কমপক্ষে একটি দৈর্ঘ্যের অর্ডারের বেশি সময় নেয়। এর কারণগুলি নিম্নরূপ:

  1. নামকরণের কনভেনশন (একটি ফাইল XY.scalaফাইলে কল করা ক্লাস থাকা দরকার না XYএবং এতে একাধিক শীর্ষ-স্তরের শ্রেণি থাকতে পারে)। সংকলকটিকে তাই প্রদত্ত শ্রেণি / বৈশিষ্ট্য / অবজেক্ট সনাক্তকারী সনাক্ত করতে আরও উত্স ফাইলগুলি অনুসন্ধান করতে হতে পারে।
  2. ইমপ্লিটস - ইমপ্লিটস-এর ভারী ব্যবহারের অর্থ কম্পাইলারের কোনও প্রদত্ত পদ্ধতির জন্য কোনও ইন-স্কোপ ইম্পিলিটি রূপান্তর অনুসন্ধান করতে হবে এবং "ডান" সন্ধানের জন্য তাদেরকে র‌্যাঙ্ক করতে হবে। ( অর্থাত্ কোনও পদ্ধতি সনাক্ত করার সময় সংকলকটির ব্যাপকহারে অনুসন্ধানের ডোমেন রয়েছে ))
  3. টাইপ সিস্টেম - স্কালাল টাইপ সিস্টেমটি জাভা এর চেয়ে জটিলতর এবং তাই আরও সিপিইউ সময় নেয়।
  4. টাইপ অনুমান - টাইপ অনুমান গণনা ব্যয়বহুল এবং এমন একটি কাজ যা javacএকেবারেই করার দরকার হয় না
  5. scalacজেনিকোড সংকলন পর্বের সময় ম্যাজিক কী সংমিশ্রণ CTRL-ALT-F12 ব্যবহার করে দেখা যায় এমন একটি সম্পূর্ণ সশস্ত্র এবং অপারেশনাল যুদ্ধ কেন্দ্রের 8-বিট সিমুলেটর অন্তর্ভুক্ত ।

3
@obox_lakes, nitpick ঘৃণা, কিন্তু জাভা করে স্থিতিমাপ পদ্ধতি জন্য টাইপ অনুমান করতে প্রয়োজন int a<T>(T a) {}এবং তারপর a(pls_infer_my_type)james-iry.blogspot.com/2009/04/…
এলাজার

13
@ এলাজার - হ্যাঁ, আমি জানি। তবে এটিকে "টাইপ ইনফারেন্স" বলার জন্য এটি স্পষ্টভাবে হাস্যকর, স্কেলার পাশে!
অক্সবো_লাক্স


19

স্কেলা করার সর্বোত্তম উপায় হ'ল আইডিইএ এবং এসবিটি। একটি প্রাথমিক এসবিটি প্রকল্প সেট আপ করুন (এটি আপনার জন্য এটি করবে যদি আপনি চান) এবং এটি স্বয়ংক্রিয় সংকলন মোডে চালিত করুন (কমান্ড ~compile) এবং আপনি যখন আপনার প্রকল্পটি সংরক্ষণ করবেন তখন এসবিটি এটি পুনরায় সংকলন করবে।

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

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


9

স্কালা-আইডিই (এক্সিলিপস) এর সর্বশেষ সংশোধনগুলি ইনক্রিমেন্টাল সংকলনকে আরও ভালভাবে পরিচালনা করতে পারে।

আরও তথ্যের জন্য " সেরা স্কালা বিল্ড সিস্টেমটি কী? " দেখুন।


অন্য সমাধানটি হ'ল fsc - আপনার আইডিইতে একজন নির্মাতা হিসাবে স্কেল 2 ভাষার জন্য দ্রুত অফলাইন সংকলক - (এই ব্লগ পোস্টে চিত্রিত )।

বিকল্প পাঠ

কিন্তু এ সরাসরি অন্ধকার যদিও, যেমন দানিয়েল Spiewak মন্তব্য উল্লেখ করেছে:

আপনার যদি সরাসরি গ্রহটি পৃষ্ঠের নীচে এফএসসি ব্যবহার করে থাকে তবে কেবলমাত্র গ্রহণের মধ্যে এফএসসি ব্যবহার করা উচিত নয়।
এফএসসি হ'ল আবাসিক সংকলকের শীর্ষে একটি পাতলা স্তর যা স্পষ্টতই স্ক্যাল প্রকল্পগুলি সংকলনের জন্য Eclipse দ্বারা ব্যবহৃত পদ্ধতি।


অবশেষে, জ্যাকসন ডেভিস যেমন মন্তব্যগুলিতে আমাকে স্মরণ করিয়ে দিয়েছেন:

SBT (সিম্পল বিল্ড টুল) এছাড়াও "ক্রমবর্ধমান" সংকলন (মাধ্যমে কোন ধরণের অন্তর্ভুক্ত আলোড়ন সৃষ্টি ফাঁসি ,) যদিও এটি নিখুঁত নয় , এবং উন্নত ক্রমবর্ধমান সংকলন আসন্ন 0.9 SBT সংস্করণের জন্য কাজ করা হয়।


2
এসবিটি বর্ধিত সংকলনও করতে পারে
জ্যাকসন ডেভিস

@ জ্যাকসন: ঠিকঠাক কার্যকর হয়েছে! আমি আমার উত্তরে এটি অন্তর্ভুক্ত করেছি।
ভনসি

2
আপনি সরাসরি অন্ধকার মধ্যে FSC ব্যবহার করে, যদি শুধু কারণ অন্ধকার হয় করা উচিত হবে না ইতিমধ্যে পৃষ্ঠ অধীনে FSC ব্যবহার করে। FSC মূলত বাসিন্দা কম্পাইলার যা উপরে পাতলা স্তর অবিকল অন্ধকার দ্বারা ব্যবহৃত Scala প্রকল্প কম্পাইল করার প্রক্রিয়া।
ড্যানিয়েল স্পিয়াক

1
এফএসসির অর্থ দ্রুত স্কেলা সংকলক - দ্রুত জাভা সংকলক নয়
বেন ম্যাককান

@ বেনমিসক্যান: ওফ! ঠিক। আমি উত্তর স্থির করেছি।
ভনসি

6

Fsc ব্যবহার করুন - এটি একটি দ্রুত স্কাল সংকলক যা ব্যাকগ্রাউন্ড টাস্ক হিসাবে বসে এবং সর্বদা লোড করার প্রয়োজন হয় না। এটি পূর্ববর্তী সংকলক উদাহরণ পুনরায় ব্যবহার করতে পারে।

আমি নিশ্চিত না যে নেটবিন্স স্কেলা প্লাগইন fsc সমর্থন করে (ডকুমেন্টেশনটি তাই বলে) তবে আমি এটি কার্যকর করতে পারিনি। প্লাগিনটির রাতের বিল্ডগুলি চেষ্টা করুন।


1
ইন্টেলিজ আইডিইএ স্কেলা প্লাগইনে এফএসসি ব্যবহারের বিকল্প রয়েছে
অ্যারন

1
@ অ্যানোভস্ট্রাপ: হ্যাঁ, তবে এটি কখনও কখনও ক্রাশ হয়।
ডেনিস তুলসকি

4

আপনি জেআরবেল প্লাগইন ব্যবহার করতে পারেন যা স্কালার জন্য বিনামূল্যে। সুতরাং আপনি ধরণের "ডিবাগারে বিকাশ করতে পারেন" এবং জেআরবেল সর্বদা স্পটটিতে পরিবর্তিত শ্রেণিকে পুনরায় লোড করবে।

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

যদি এটি 100% স্কালাল না হয়ে থাকে তবে একই রকম কিছু হয় তবে আপনি কোটলিনকে চেষ্টা করে দেখতে পারেন।

- অলিভার


2

আমি নিশ্চিত যে এটি নীচে ভোট হবে, তবে অত্যন্ত দ্রুত ঘুরে দাঁড়ানোর বিষয়টি সর্বদা গুণমান বা উত্পাদনশীলতার পক্ষে উপযুক্ত নয়।

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

সংক্ষেপে: স্কালার জন্য সর্বোত্তম উপযুক্ত প্যাটার্ন সন্ধান করুন।


3
আমি সম্মত হই যে দ্রুত ঘুরিয়ে দেওয়ার চক্রটি থাকা অপরিহার্য নয়। তবে তাতে ক্ষতি হয় না, তাই না?
এলাজার লাইবোভিচ

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

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

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