স্কাল বনাম জাভা, পারফরম্যান্স এবং স্মৃতি? [বন্ধ]


160

আমি স্কালায় সন্ধান করতে আগ্রহী, এবং আমি একটি উত্তর পাচ্ছি না এমন একটি প্রাথমিক প্রশ্ন রয়েছে যার উত্তর খুঁজে পাওয়া যায়: সাধারণভাবে, স্কালা এবং জাভার মধ্যে কর্মক্ষমতা এবং মেমরির ব্যবহারের মধ্যে কোনও পার্থক্য আছে কি?


3
আমি দাবি শুনেছি পারফরম্যান্স খুব কাছাকাছি হতে পারে। আমি সন্দেহ করি এটি আপনি যা করছেন তার উপর নির্ভরশীল। (যেমন এটি জাভা বনাম সি এর জন্য)
পিটার লরে

এই ধরণের প্রশ্নের উত্তর হ'ল "এটি নির্ভর করে" - সিস্টেম এক্স বনাম সিস্টেম ওয়াই প্লাসের কার্যত যে কোনও তুলনা করার জন্য এটি স্ট্যাকওভারফ্লো
জেমস মুর

উত্তর:


261

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

int n = 0;
for (String s: array) {
  if (s.length > 2 && mapping.containsKey(s)) n++;
}
String[] bigEnough = new String[n];
n = 0;
for (String s: array) {
  if (s.length <= 2) continue;
  bigEnough[n++] = map.get(s);
}

রক্ষে! কঠিন কাজ. স্কালায়, একই জিনিসটি করার সবচেয়ে কমপ্যাক্ট উপায় হ'ল:

val bigEnough = array.filter(_.length > 2).flatMap(mapping.get)

সহজ! তবে, আপনি কীভাবে সংগ্রহগুলি কাজ করে সে সম্পর্কে মোটামুটিভাবে পরিচিত না হলে আপনি যা বুঝতে পারবেন না তা হ'ল এইভাবে করার ফলে অ্যারের প্রতিটি উপাদানগুলিরfilter জন্য একটি অতিরিক্ত মধ্যবর্তী অ্যারে (সহ ) তৈরি হয়েছিল ( mapping.getযার সাথে ফিরে আসে) একটি বিকল্প). এটি দুটি ফাংশন অবজেক্ট (একটি ফিল্টারের জন্য এবং একটি ফ্ল্যাটম্যাপের জন্য) তৈরি করে, যদিও ফাংশন অবজেক্টগুলি ছোট হওয়ায় এটি খুব কমই বড় সমস্যা।

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

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

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


172
চূড়ান্ত অনুচ্ছেদের জন্য +1। এটা একটা অতীব গুরুত্বপূর্ণ পয়েন্ট যে বিবেচনা আউট নামটাই বাকি আছে পর্যন্ত খুব প্রায়ই।
কেভিন রাইট

2
আমি ভেবেছিলাম যে আপনার উল্লেখ করা সমস্যাগুলির সাথে মতামতগুলি অনেক সাহায্য করতে পারে। বা বিশেষভাবে অ্যারেগুলির সাথে সত্য নয়?
নিকোলাস পায়েট

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

1
>> চূড়ান্ত পারফরম্যান্সের সাথে আইডোমেটিক স্টাইলে << আইডেমোমেটিক স্কালার প্রোগ্রামগুলির জন্য বেঞ্চমার্কস গেম রয়েছে যা "সুপারিটিভ" পারফরম্যান্স অর্জন করে না।
igouy

2
@ রেক্সেরার - আপনার জাভা উদাহরণগুলি প্রতিটি সম্ভাব্য স্ট্রিংয়ের জন্য দু'বার ম্যাপিং কীটি সন্ধান করে না যেখানে স্ট্রিংগুলি নির্বাচিত হওয়ার পরে আপনার স্কালার উদাহরণটি কেবল এটি একবারই করে? অর্থাৎ তারা বিভিন্ন উপাত্ত সেটগুলির জন্য বিভিন্ন উপায়ে অনুকূলিত হয়?
শেঠ

103

আমি একজন নতুন ব্যবহারকারী, সুতরাং আমি উপরের রেক্স কেররের উত্তরে একটি মন্তব্য যুক্ত করতে পারছি না (নতুন ব্যবহারকারীদের "উত্তর" দেওয়ার অনুমতি দেওয়া হয়েছে তবে "মন্তব্য" নয় এটি একটি বিচিত্র রুল বিটিডাব্লু)।

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

List<String> bigEnough = new ArrayList<String>();
for(String s : array) {
  if(s.length() > 2 && mapping.get(s) != null) {
    bigEnough.add(mapping.get(s));
  }
}

এবং অবশ্যই, আমরা যদি ভান করতে যাচ্ছি যে গ্রহন আপনার জন্য প্রকৃত টাইপিংয়ের বেশিরভাগ কাজ করে না এবং সংরক্ষণ করা প্রতিটি চরিত্র সত্যই আপনাকে আরও ভাল প্রোগ্রামার করে তোলে, তবে আপনি এটি কোড করতে পারেন:

List b=new ArrayList();
for(String s:array)
  if(s.length()>2 && mapping.get(s) != null) b.add(mapping.get(s));

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


7
আপনি কীভাবে "মাসের হিপ ভাষা" ক্লাবের সদস্য নন? ভাল মন্তব্য। আমি শেষের অনুচ্ছেদটি পড়ে বিশেষভাবে উপভোগ করেছি।
পদক্ষেপবিদ

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

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

5
যখন আমরা এটি করছি, জাভা 8 এ এটি হবে:Arrays.stream(array).map(mapping::get).filter(x->x!=null).toArray(File[]::new);
বেনিয়েল

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

67

জাভা এর মতো আপনার স্কেল লিখুন এবং আপনি প্রায় অভিন্ন মেট্রিক সহ প্রায় অভিন্ন বাইটকোড নির্গত হওয়ার আশা করতে পারেন।

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

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

তাই যদি

  • স্কালা কোডটি একক থ্রেডে জাভা কোডের তুলনায় 1.25x দীর্ঘ সময় নেয়
  • এটি সহজেই 4 টি কোর জুড়ে বিভক্ত করা যেতে পারে (এমনকি এখন ল্যাপটপেও সাধারণ)
  • মূল জাভা (1.24 / 4 =) 0.3125x এর সমান্তরাল রান সময়ের জন্য

তাহলে কি আপনি বলবেন যে স্কালা কোডটি এখন তুলনামূলকভাবে 25% ধীর, বা 3x দ্রুত?

সঠিক উত্তরটি আপনি কীভাবে "পারফরম্যান্স" সংজ্ঞায়িত করেছেন তার উপর নির্ভর করে :)


4
ঘটনাচক্রে, আপনি উল্লেখ করতে চাইতে পারেন যে .par২.৯-এ রয়েছে।
রেক্স কেরার

26
>> আপনি কি বলবেন যে স্কাল কোডটি এখন তুলনামূলকভাবে 25% ধীর, বা 3x দ্রুত? << আমি বলব কেন আপনার বহুমাত্রিক জাভা কোডের সাথে অনুমানের তুলনা হয় না?
igouy

17
@ আইগোই - মূল বক্তব্যটি হ'ল হাইপোথেটিকাল কোডের অস্তিত্ব নেই, "দ্রুত" জাভা কোডটির অপরিহার্য প্রকৃতিটি সমান্তরালে তুলনাকে আরও শক্ত করে তোলে, যেমন ব্যয় / উপকারের অনুপাতের অর্থ এটি হওয়ার সম্ভাবনা কমই। অন্যদিকে আইডোমেটিক স্কেলাল প্রকৃতির অনেক বেশি ঘোষিত হওয়ার কারণে ঘন ঘন তুচ্ছ পরিবর্তন ছাড়া আর ঘন ঘন একযোগে তৈরি করা যেতে পারে।
কেভিন রাইট

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

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

31

কম্পিউটার ল্যাঙ্গুয়েজ বেঞ্চমার্কস গেম:

গতি পরীক্ষা জাভা / স্কাল 1.71 / 2.25

স্মৃতি পরীক্ষার জাভা / স্কাল 66.55 / 80.81

সুতরাং, এই মানদণ্ডগুলি বলে যে জাভা 24% দ্রুত এবং স্কালা 21% বেশি মেমরি ব্যবহার করে।

সব মিলিয়ে এটি কোনও বড় বিষয় নয় এবং বাস্তব বিশ্বের অ্যাপ্লিকেশনগুলিতে কোনও বিষয় নয়, যেখানে বেশিরভাগ সময় ডেটাবেস এবং নেটওয়ার্ক দ্বারা ব্যয় করা হয়।

নীচের লাইন: যদি স্কালা আপনাকে এবং আপনার দলকে (এবং যখন আপনি চলে যাবেন তখন প্রকল্প গ্রহণকারী ব্যক্তিরা) আরও বেশি উত্পাদনশীল করে তোলে, তবে আপনার উচিত।



22
এই জাতীয় সংখ্যার সাথে সতর্ক থাকুন, এগুলি সত্যই দুর্দান্ত শব্দ করে যখন বাস্তবে তারা প্রায় কিছুই বোঝায় না। দেখে মনে হয় না যে স্ক্যালালা সবসময় গড় ইত্যাদির চেয়ে জাভা থেকে 24% বেশি দ্রুত
জেস্পার

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

9
"যদি স্কালা আপনাকে এবং আপনার দলকে তোলে ..." নীচের লাইন: আপনি জানবেন যে এর আগে নয় :-)
igouy

"2 ভাষা বাস্তবায়নের জন্য প্রোগ্রামের গতি এবং আকারের তুলনা" কীভাবে করা যায় তার একটি উদাহরণ বেঞ্চমার্কস গেম সহায়তা পৃষ্ঠা সরবরাহ করে। Scala এবং জাভা জন্য উপযুক্ত তুলনা ওয়েবপৃষ্ঠাটি হয় - shootout.alioth.debian.org/u64q/scala.php
igouy

20

অন্যরা টাইট লুপের বিষয়ে এই প্রশ্নের উত্তর দিয়েছেন যদিও রেক্স কেরের যে উদাহরণগুলিতে আমি মন্তব্য করেছি তার মধ্যে পারফরম্যান্স পারফরম্যান্সের পার্থক্য রয়েছে বলে মনে হয়।

এই উত্তরটি সত্যই সেই ব্যক্তিদের লক্ষ্যবস্তু করা হয়েছে যারা ডিজাইনের ত্রুটি হিসাবে টাইট-লুপ অপ্টিমাইজেশানের প্রয়োজনীয়তা তদন্ত করতে পারে।

আমি অপেক্ষাকৃত Scala নতুন am কিন্তু এটি মনে (ক বছর বা তাই সম্পর্কে), দূর পর্যন্ত, যে এটি আপনাকে অনুমতি দেয় মুলতবি নকশা, বাস্তবায়ন ও মৃত্যুদন্ড অনেক দিক অপেক্ষাকৃত সহজে (যথেষ্ট পটভূমি পড়া এবং পরীক্ষা দিয়ে :)

মুলতুবি নকশা বৈশিষ্ট্য:

বিলম্বিত বাস্তবায়ন বৈশিষ্ট্য:

স্থগিত সম্পাদনের বৈশিষ্ট্য: (দুঃখিত, কোনও লিঙ্ক নেই)

  • থ্রেড-নিরাপদ অলস মান
  • পাশ-নামে
  • মোনাডিক স্টাফ

আমার কাছে এই বৈশিষ্ট্যগুলি হ'ল দ্রুত এবং আঁটসাঁট অ্যাপ্লিকেশনগুলির পথে চালিত করতে আমাদের সহায়তা করে।


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

আমি তার জাভা উদাহরণের সমান আপেলগুলিতে আপেল বেশি মনে করি তা এখানে:

val bigEnough = array.collect({
    case k: String if k.length > 2 && mapping.contains(k) => mapping(k)
})

কোনও মধ্যস্থতাকারী সংগ্রহ, কোনও Optionদৃষ্টান্ত নেই ইত্যাদি This এটি সংগ্রহের প্রকারটি সংরক্ষণ করে তাই bigEnoughএর ধরণটি Array[File]- Arrayএর collectবাস্তবায়ন সম্ভবত মিঃ কেরের জাভা কোড যা করে তার লাইন বরাবর কিছু করছে।

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

এছাড়াও:

val bigEnough = array.withFilter(_.length > 2).flatMap(mapping.get)

withFilterপদ্ধতি যে আমি এখান থেকে ব্যবহার করেছি পরিবর্তে filterসংশোধন করা হয়েছে অন্তর্বর্তী সংগ্রহে সমস্যা কিন্তু এখনও অপশন উদাহরণস্বরূপ বিষয়।


স্কেলে সাধারণ সম্পাদনের গতির একটি উদাহরণ লগিংয়ের সাথে।

জাভাতে আমরা কিছু লিখতে পারি:

if (logger.isDebugEnabled())
    logger.debug("trace");

স্কালায়, এটি ঠিক:

logger.debug("trace")

কারণ স্কালায় ডিবাগ করার বার্তা প্যারামিটারে " => String" টাইপ রয়েছে যা আমি মূল্যায়ন করার সময় সঞ্চালিত প্যারামিটার-কম ফাংশন হিসাবে মনে করি, তবে ডকুমেন্টেশনটি পাস-বাই-নাম বলে।

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

এটি কোডটি দ্রুততর করে না তবে এটি আরও দ্রুত হওয়ার সম্ভাবনা তৈরি করে এবং অন্যান্য লোকের কোড এন ম্যাসেজের মধ্য দিয়ে যাওয়ার এবং পরিষ্কার করার অভিজ্ঞতা আমাদের কম হবে।

আমার কাছে, এটি স্কালার মধ্যে একটি ধারাবাহিক থিম।


হার্ড কোডটি ক্যাপচারে ব্যর্থ হয় কেন স্কেলা দ্রুততর যদিও এটি কিছুটা ইঙ্গিত দেয়।

আমি মনে করি এটি কোড পুনরায় ব্যবহার এবং স্কালায় কোড মানের সিলিংয়ের সংমিশ্রণ।

জাভাতে, অসাধারণ কোডটি প্রায়শই একটি বোধগম্য জগাখিচুড়ি হতে বাধ্য হয় এবং তাই উত্পাদন মানের API এর মধ্যে সত্যই কার্যকর হয় না কারণ বেশিরভাগ প্রোগ্রামাররা এটি ব্যবহার করতে সক্ষম হবে না।

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


আপনার লগিং স্টাফগুলি স্কালার পারফরম্যান্সের ক্ষতির জন্য একটি ভাল উদাহরণ: লগার.দেবগ ("ট্রেস") প্যারামিটার-কম ফাংশনের জন্য একটি নতুন অবজেক্ট তৈরি করে।
jcsahnwaldt মনিকা

প্রকৃতপক্ষে - এটি কীভাবে আমার সম্পর্কিত পয়েন্টকে প্রভাবিত করে?
শেঠ

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

ঠিক আছে, আমি এটি আবার পড়েছি এবং আমি লিখেছি, "সাধারণ সম্পাদনের গতি" - আমি একটি নোট যুক্ত করব। শুভ পয়েন্ট :)
শেঠ

3
অনুমানযোগ্য যদি বিবৃতি (মূলত সুপারসকলার প্রসেসরে মুক্ত) বনাম অবজেক্ট বরাদ্দ + আবর্জনা। জাভা কোডটি স্পষ্টতই দ্রুত (নোট করুন এটি কেবলমাত্র শর্তটি মূল্যায়ন করে, এক্সিকিউশনটি লগের বিবৃতিতে পৌঁছায় না।) এর প্রতিক্রিয়া হিসাবে "আমার কাজের জন্য, একটি তুচ্ছ বস্তুর ওজন একটি লগ বার্তা অপ্রয়োজনীয়ভাবে মূল্যায়নের সম্ভাবনা অপসারণের পক্ষে মূল্যবান । "
এলফ


10

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

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


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

@ ব্যবহারকারীর অজানা - "কিছুক্ষণের জন্য লুপের জন্য শব্দার্থগত সমতুল্য তুলনায় স্কালায় অনেক বেশি দ্রুত হতে পারে" - লক্ষ্য করুন যে সেই স্কালা বেঞ্চমার্ক গেম প্রোগ্রামগুলি লুপের সাথে লেখা রয়েছে।
igouy

@ আইগৌই: আমি এই মাইক্রোব্যাঙ্কমার্ক থেকে ফলাফল নিয়ে কথা বলিনি, তবে তর্ক-বিতর্ক সম্পর্কে। একটি সত্য বিবৃতি Java and Scala both compile down to JVM bytecode, যা আমি soপ্রশ্নের সাথে যে বিবৃতিতে diffence isn't that big.দেখাতে চেয়েছিলাম তার সাথে একত্রিত হয়েছিল , যে এটি soকেবল একটি বাকবিতণ্ডার কৌশল, এবং একটি বিতর্কিত উপসংহার নয়।
ব্যবহারকারী অজানা

3
আশ্চর্যজনকভাবে উচ্চ ভোট সহ আশ্চর্যজনকভাবে ভুল উত্তর।
shabunc

4

জাভা উদাহরণটি আদর্শ অ্যাপ্লিকেশন প্রোগ্রামগুলির জন্য সত্যই কোনও প্রতিমা নয়। এই ধরনের অপ্টিমাইজড কোডটি সিস্টেম লাইব্রেরি পদ্ধতিতে পাওয়া যেতে পারে। তবে তারপরে এটি সঠিক ধরণের একটি অ্যারে ব্যবহার করবে, অর্থাত্ ফাইল [] এবং কোনও সূচিপত্র ছাড়বে না E (গণনা এবং যোগ করার জন্য পৃথক ফিল্টার শর্তাদি)। আমার সংস্করণটি (সর্বদা (!) কোঁকড়ানো ধনুর্বন্ধনী সহকারে হবে কারণ আমি একটি বাগ অনুসন্ধান করতে এক ঘন্টা ব্যয় করতে পছন্দ করি না যা একটিগ্রহের একক কীতে আঘাত করার জন্য 2 সেকেন্ডের সঞ্চয় করে প্রবর্তিত হয়েছিল:

List<File> bigEnough = new ArrayList<File>();
for(String s : array) {
  if(s.length() > 2) {
    File file = mapping.get(s);
    if (file != null) {
      bigEnough.add(file);
    }
  }
}

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

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

এই সাবক্লাসিং এবং ইনস্ট্যান্টেশন কোড জাভাতে মোটেই পরিষ্কার নয় এবং স্কালায় খুব পঠনযোগ্য হবে।

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