সি #, জাভা এবং স্ক্যালায় বন্ধ / ল্যাম্বডাস /… এর পদ্ধতির সুবিধা এবং অসুবিধাগুলি কী?


30

আমি আশ্চর্য হই যে সি # এবং স্কালার মধ্যে প্রযুক্তিগত প্রয়োগের পার্থক্যগুলি কীভাবে এবং প্রকল্প ল্যাম্বডা (জেএসআর 335) এর মেলিং তালিকায় প্রেরণ করা ব্রায়ান গয়েটসের ইমেল পিক পাস্ট ল্যাম্বডায় ইমপ্লিকেশন ধারণাগুলি এবং উদ্বেগগুলির সাথে উভয় সমাধানের তুলনা কীভাবে ?

ইমেল থেকে:

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

এবং আরও:

ল্যাম্বডাস-হ'ল অবজেক্টস দুনিয়া সম্পর্কে এই সম্ভাব্য ভবিষ্যতের সাথে দ্বন্দ্ব রয়েছে। ল্যাম্বডাস-হ'ল ফাংশন দুনিয়ার দৃষ্টিভঙ্গি নেই এবং এই নমনীয়তাটি সংরক্ষণ করা ল্যাম্বডাসকে এমনকি বস্তু-নেসের উপস্থিতি সহ বোঝা না করার পক্ষে অন্যতম পয়েন্ট।

উপসংহার:

লাম্বডাস-হ'ল ফাংশনগুলি দরজা খুলে দেয়। ল্যাম্বডাস-হ'ল অবজেক্টগুলি সেগুলি বন্ধ করে দেয়।
আমরা দরজা খোলা দেখতে পছন্দ করি।

এবং রেডডিট থ্রেডে থাকা কোনও ব্যক্তির কিছু মন্তব্য বলেছেন:

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

"লাম্বডাস হ'ল ফাংশন" পদ্ধতির কেন ভবিষ্যতে "ল্যাম্বডাস-অজ-অবজেক্টস" এর চেয়ে বেশি সুযোগ সক্ষম করে? কেউ কী ব্যাখ্যা করতে পারে কোন পার্থক্য বিদ্যমান এবং তারা কীভাবে কোড রচিত হবে তা প্রভাবিত করবে?

স্কালার জিনিসগুলি "কেবলমাত্র কাজ করে" দেখে আমি ভাবতে থাকি যে সি # / জাভাতে গৃহীত / প্রস্তাবিত পদ্ধতির বিষয়ে আমি কিছু মিস করছি, সম্ভবত এটি পিছিয়ে-সামঞ্জস্যতা সম্পর্কিত উদ্বেগের সাথে সম্পর্কিত?


1
এটা মজার. প্রদত্ত যে জাভাস টাইপ সিস্টেমে এখনকার মতো কোনও কার্যকারিতা নেই, এর অর্থ এই যে কোনওটিকে প্রথমে এটি প্রবর্তন করতে হবে। এটি সম্ভব হতে পারে যে ভাষা এটির সাথে খুব জটিল হয়ে উঠবে।
ইঙ্গো

ফাংশনগুলি কি কোনও ইন্টারফেসের উদাহরণ নয়? এগুলি সম্পর্কে বিশেষ কী?
Soc

লিস্প / স্কিম / ক্লোজার ইমেজগুলিকে মডেল করতে পারে যখন জাভা / সি # ফাংশনগুলির স্বেচ্ছায় বাসা বাঁধতে পারে না। পাইথন মনে হয় উভয় বিশ্বের সেরা আছে।
চাকরী

উত্তর:


15

আমি মনে করি অবজেক্টস বনাম ফাংশন সম্পর্কিত আলোচনাটি একটি লাল হেরিং। যদি প্রশ্নটি হয়, "একটি ল্যাম্বডা কোনও ফাংশন বা কোনও বস্তু?" উত্তরটি হ্যাঁ হওয়া উচিত ।

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

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


9

আমি যা বুঝতে পারি তা থেকে, ল্যাম্বডাসকে প্রাথমিক ভাষার স্তরে কীভাবে বিবেচনা করা হয় সে সম্পর্কে এটি আরও বেশি । ইমেল যেমন বলেছে,

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

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

তবে জাভা ১.৮, বা ১.৯, আরও বেশি নমনীয় উপায়ে ব্যবহার করতে ফাংশন সক্ষম করার চেয়ে ভাষাতে পরিবর্তন আনতে পারে (যেমন রিফাইড স্ট্রাকচারাল ধরণের)। যদি "ল্যাম্বডাস বস্তু ছিল", তবে এই পরিবর্তনগুলি পিছনের দিকে সামঞ্জস্যপূর্ণ না হত এবং আপনাকে একটি নতুন ধারণা এলগোথার প্রবর্তন করতে হবে, যাতে মানুষের বিদ্যমান কোডটি ভঙ্গ না হয়। তবে যদি javacকেবল চুপিচুপি ল্যাম্বডাসকে পর্দার আড়ালে থাকা বস্তুতে রূপান্তরিত করা হত, নতুনরা javacএগুলিকে যা খুশি তাই রূপান্তর করতে পারে, যতক্ষণ শব্দার্থবিজ্ঞান এখনও ধরে রেখেছে ।


সি # তে লামদাস = প্রতিনিধিদের কাছ থেকে। সংকলকটিতে সেগুলি ডিজেলেটস বা এক্সপ্রেশন ট্রিগুলিতে সংকলনের বিকল্প রয়েছে। উভয়ই সত্যই বস্তুর গ্রাফ তবে এগুলি একটি "নির্দিষ্ট শ্রেণি" বা একটি নির্দিষ্ট উত্তরাধিকার গাছের শ্রেণিতেও সংকলিত হয় না
রুন এফএস

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

@ এমওয়ালফেটেক: যতদূর আমি জানি, তারা ইতিমধ্যে জাভা 8 এর জন্য ডিফেন্ডার পদ্ধতিগুলি নিয়ে পরিকল্পনা করেছে। তারা ভালো জিনিস যোগ করতে চান foreach, map, filterসংগ্রহের।
Soc

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

"বর্তমান চিন্তা" mhhh, 2010 এর পোস্টটি কি এখন অপ্রচলিত নয়?
Soc

5

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

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

স্কালার এই পদ্ধতিগুলি বিবেচনা করুন Regex:

def replaceAllIn (target: CharSequence, replacer: (Match)  String): String
def replaceSomeIn (target: CharSequence, replacer: (Match)  Option[String]): String

এগুলি যদি সহজভাবে হয় তবে এটি সহজ হবে:

def replace (target: CharSequence, replacer: (Match)  String): String
def replace (target: CharSequence, replacer: (Match)  Option[String]): String

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

যাইহোক, একটি Matchখুব দরকারী কিছু, তবে বেশিরভাগ সময় আপনি ম্যাচটি Stringবা সাবগ্রুপগুলির তালিকা চান । আমরা এটি পেতে চাই:

def replaceAllIn (target: CharSequence, replacer: (String)  String): String
def replaceAllIn (target: CharSequence, replacer: (Seq[String])  String): String
def replaceAllIn (target: CharSequence, replacer: (Match)  String): String

সম্ভব নয়, ক্ষয়ের কারণে। আমি এই নির্দিষ্ট উদাহরণটি বেছে নিয়েছিলাম কারণ আমি সরাসরি এর সাথে জড়িত ছিলাম, তবে স্ট্যাক ওভারফ্লোতে আমি কমপক্ষে অর্ধ ডজন প্রশ্ন দেখেছি, যেখানে লোকেরা জিজ্ঞাসা করে যে এই সঠিক সমস্যার কারণে একটি ওভারলোড কেন অবৈধ is

এবং তারপরে, বিবেচনা করুন যে স্কালার প্যাটার্নের মিল এবং জাভা instanceofকার্যকরভাবে অকার্যকর কারণ ক্ষয় হয়।

আমি মনে করি যতক্ষণ না এই সমস্যাটি মোকাবেলা করা হয় ততক্ষণ ফাংশন ধরণের দেরি করা ন্যায়সঙ্গত। সর্বোপরি, জেভিএম এ প্রচুর ভাষা রয়েছে এবং এটি জাভা দ্রুত বিকশিত ভাষা বলে মনে হয় না।


ঠিক আছে, টাইপ ইরেজর যদি তাদের একমাত্র সমস্যা হয় তবে তারা কী পরিকল্পনা করবেন? প্রত্যেক কোড ব্রেকিং এই গ্রহে জাভা 5 ইতিমধ্যে জন্য একটি অ-বিকল্প শাসনাধীনে ছিল ...
SOC

@soc আমি তাই আনন্দিত আমি তাদের জুতো নই! তবে তা ছিল রোদ, এটি ওরাকল। ওরাকল এর প্রধান পণ্যের সংস্করণ - এমনকি এমনকি গৌণ - সংস্করণগুলির মধ্যে ব্রেকিং পরিবর্তন করার ক্ষেত্রে কখনও কোনও সামঞ্জস্য রাখেনি।
ড্যানিয়েল সি সোব্রাল

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

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

@ ড্যানিয়েল সি সোব্রাল: আইএমও একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ কিছুটা সফটওয়্যারের মতো: শুরুতে এটি পরিষ্কার এবং সুন্দর ডিজাইন হতে পারে তবে আপনি যত বেশি খেলবেন ততই গণ্ডগোল হয়ে যায়। সুতরাং আমি মনে করি যে ভাষাটি জাভা হিমায়িত করা এবং (১) নতুন গ্রন্থাগার তৈরি করা বা বিদ্যমান গ্রন্থাগার উন্নতকরণ, (২) জেভিএম (যদি সম্ভব হয়) উন্নত করা, (৩) নতুন ভাষা বিকাশ করা উন্নয়নশীলদের স্বার্থে হবে । তবে আপনি যেমন বলেছিলেন যে এমন কিছু লোক আছেন যা জাভার জন্য দায়বদ্ধ এবং যারা আপগ্রেড বিক্রি চালিয়ে যেতে চান। সুতরাং তারা এটি "শীতল" রাখতে এটি প্রসারিত করতে চলেছে। শুধু আমার 2 সেন্ট।
জর্জিও 19
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.