জাভা 8 এ ফাংশনের ধরণের অপসারণের কারণগুলি


12

আমি বুঝতে চেষ্টা করেছি যে জেডিকে 8 লাম্বদা বিশেষজ্ঞ গ্রুপ (ইজি) জাভা প্রোগ্রামিং ভাষার ক্ষেত্রে কোনও নতুন ফাংশনের ধরণ অন্তর্ভুক্ত না করার সিদ্ধান্ত নিয়েছে।

মেলিং তালিকার উপরে গিয়ে আমি ফাংশনের ধরণের অপসারণ সম্পর্কে আলোচনার সাথে একটি থ্রেড পেয়েছি ।

বিবৃতিগুলির অনেকগুলিই আমার কাছে অস্পষ্ট, সম্ভবত প্রসঙ্গের অভাবের কারণে এবং কিছু ক্ষেত্রে টাইপ সিস্টেমগুলির প্রয়োগ সম্পর্কে আমার সীমিত জ্ঞানের কারণে।

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

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

ফাংশনের ধরণের অপসারণ এবং এসএএম প্রকারের ব্যবহারকে সমর্থন করার পক্ষে তার উত্তরে ব্রায়ান গোয়েজ বলেছেন:

কোন সংশোধন নেই। ফাংশন ধরণের পুনরায় সংশোধন করার জন্য এটি কতটা কার্যকর তা নিয়ে একটি দীর্ঘ থ্রেড ছিল। সংশোধন ছাড়াই, ফাংশন প্রকারের hobbled হয়।

তিনি যে সুতোর উল্লেখ করেছেন তাতে আমি খুঁজে পাইনি। এখন, আমি বুঝতে পারি যে স্ট্রাকচারাল ফাংশন টাইপের প্রবর্তন জাভাতে কিছু জটিলতা বোঝাতে পারে বেশিরভাগ নামমাত্র টাইপ সিস্টেমে, যা আমি বুঝতে পারি না তা হ'ল প্যারামেট্রাইজড এসএএম টাইপগুলি কীভাবে সংস্কারের ক্ষেত্রে আলাদা।

তারা উভয়ই কি একই পুনর্নির্মাণ সমস্যার বিষয় নয়? সংশোধনের ক্ষেত্রে প্যারামেট্রাইজড এসএএম টাইপের চেয়ে ফাংশনের ধরণগুলি কীভাবে আলাদা তা কি কেউ বুঝতে পারে?

অন্য মন্তব্যে গোয়েট বলেছেন:

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

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

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

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


4
"জাভার নামমাত্র টাইপ সিস্টেমে স্ট্রাকচারাল টাইপ সিস্টেম (ফাংশন টাইপ )গুলিকে গ্রাফ্ট করা মানে নতুন জটিলতা" - এটি সম্ভবত ভাষাটি ব্যবহার করতে আরও ব্যবহারকারীদের শেখার জটিলতা হিসাবে বোঝানো হয়েছিল । ভালো কিছু সহজ এবং জাভা ব্যবহার করা সহজ সি ++ শিখতে জটিল ও কঠোর মত হয়ে সেই মতো, স্টাফ। মেইলিং লিস্টের সদস্যদের সম্ভবত পূর্বে "উন্নতি বড় ঢেউ" সমালোচনার উল্লেখ করতে পারে, এক প্রকৃষ্ট উদাহরণ হচ্ছে জাভা 5 sucks ক্লিন্টন নিবন্ধ MyBatis এর শুরু করুন
মশা

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

4
@ এডালোরজো: ক্লোজার, গ্রোভী, স্কালা এবং অন্যান্য ভাষাগুলি যেমন দেখিয়েছে, (1) একটি নতুন ভাষা সংজ্ঞায়িত করা সম্ভব (2) পশ্চাদগম সামঞ্জস্যতা না ভেঙে জাভাতে ইতিমধ্যে লেখা গ্রন্থাগার এবং সরঞ্জামগুলির সমস্ত সম্পদ ব্যবহার করা সম্ভব (3) জাভা প্রোগ্রামাররা জাভাতে থাকতে চান, অন্য কোনও ভাষাতে স্যুইচ করতে চান, বা উভয়ই ব্যবহার করতে চান কিনা তা চয়ন করার স্বাধীনতা। আইএমও, একটি বিদ্যমান ভাষা অনির্দিষ্টকালের জন্য প্রসারিত করা গ্রাহকদের রাখার জন্য কৌশল, যেমন মোবাইল ফোন সংস্থাগুলি সর্বদা নতুন মডেল তৈরি করা প্রয়োজন।
জর্জিও

2
আমি জাভাতে সাম্বাদাস থেকে বুঝেছি , এর একটি কারণ হ'ল কিছু লাইব্রেরি (সংগ্রহ) পশ্চাদগম করে সামঞ্জস্য রাখা সমস্যাযুক্ত হবে।
পেটর পুদলক

2
এসও সম্পর্কিত পোস্ট যা গোয়েটসের এই অন্যান্য পোস্টের সাথে লিঙ্ক করে ।
assylias

উত্তর:


6

এসএএম পদ্ধতিটি স্ক্যানাল (এবং সি ++ 11) বেনামে ফাংশনগুলির সাথে (স্কালার =>অপারেটর বা সি ++ 11 এর []()(ল্যাম্বদা) সিনট্যাক্স দিয়ে তৈরি) এর সাথে কিছুটা মিল similar

জাভা সাইডে উত্তর দেওয়ার প্রথম প্রশ্নটি হ'ল ল্যাম্বদা স্টেটমেন্টের রিটার্ন টাইপ নতুন প্রিমিটভ টাইপ, যেমন intবা byteকোনও ধরণের অবজেক্ট টাইপ হওয়া উচিত whether Scala, সেখানে হয় কোন আদিম ধরনের - এমনকি একটি পূর্ণসংখ্যা বর্গ হল একটি অবজেক্ট Int- এবং ফাংশন কোন পার্থক্য, বর্গ অবজেক্টের হচ্ছে Function1, Function2এবং তাই ঘোষণা যুক্তি সংখ্যার উপর নির্ভর করে ফাংশন লাগে।

সি ++ ১১, রুবি এবং পাইথনের একইভাবে ল্যাম্বডা এক্সপ্রেশন রয়েছে যা এমন কোনও বস্তুকে প্রত্যাবর্তন করে যা স্পষ্ট বা অন্তর্নিহিত উপায়ে কলযোগ্য। প্রত্যাবর্তিত অবজেক্টের কিছু মানক পদ্ধতি রয়েছে (যেমন #callএটি একটি ফাংশন হিসাবে কল করতে ব্যবহার করা যেতে পারে C সি ++ 11, উদাহরণস্বরূপ, একটি std::functionটাইপ ব্যবহার করে যা ওভারলোড হয় operator()যাতে বস্তুর কল পদ্ধতির কলগুলি এমনকি ফাংশন কলগুলির মতো দেখতে টেক্সটিক্যালি দেখতে পায়। :-)

যেখানে জাভা সম্পর্কিত নতুন প্রস্তাবটি অগোছালো হয়ে ওঠে অন্য কাঠামোর কাছে যেমন একটি পদ্ধতি নির্ধারণের জন্য স্ট্রাকচারাল টাইপিংয়ের ব্যবহার রয়েছে যেমন একটির আলাদা নামেরComparator একক প্রধান পদ্ধতি রয়েছে । এই কিছু উপায় ধারণার দিক থেকে কিনতে হত, এটা করে গড় যে ফলে বস্তুর বিদ্যমান ফাংশন যা একটি বস্তু নিতে একটি কলব্যাক, একটি comparator প্রতিনিধিত্ব করতে প্রেরণ করা যেতে পারে, ইত্যাদি, এবং কল করার জন্য একটি ভালভাবে সংজ্ঞায়িত একক পাবে আশা পদ্ধতি যেমন #compareবা #callback। সি ++ এর ওভাররাইড করার কৌশলটি operator()সি ++ 11 এর আগেও এই সমস্যাটিকে ঝাঁপিয়ে পড়েছিল, যেহেতু এই জাতীয় সমস্ত কলব্যাক্স বিকল্পগুলি একইভাবে কলযোগ্য ছিল এবং সুতরাং এসটিএলকে সি ++ 11 ল্যাম্বডাস ব্যবহার করার অনুমতি দেওয়ার জন্য কোনও সামঞ্জস্যের প্রয়োজন হয়নিsortইত্যাদি। জাভা, অতীতে এই জাতীয় সামগ্রীর জন্য একটি প্রমিত নামকরণ করা হয়নি (সম্ভবত অপারেটর ওভারলোডিংয়ের মতো কোনও কৌশল কোনও একক পদ্ধতির স্পষ্ট করে তোলে না), এত ভাগ্যবান নয়, সুতরাং এই হ্যাকটি তাদের উপস্থিতিগুলিকে পুরো প্রচুর পরিবর্তন করতে বাধা দেয় ts ।


1
কৌতুকজনকভাবে, সমস্যাটি যদি বিভিন্ন, বেমানান ধরণের বিভিন্ন উপায়ে থাকে তবে সমস্ত কিছু "ফাংশন-জাতীয় জিনিস" উপস্থাপন করে খুব সহজেই লাইব্রেরিতে স্ট্যান্ডার্ড ফাংশন প্রকারগুলি সংযোজন করে এগুলি নির্মাণের জন্য প্রকৃত আক্ষরিক বাক্য গঠন ছাড়াই এড়ানো যেত। যদি java.util.Function2<T1, T2, R>জাভা ০.০ তে একটি থাকত, তবে কোনও Comparatorইন্টারফেস থাকত না , পরিবর্তে এই সমস্ত পদ্ধতিতে একটি নেওয়া হত Function2<T1, T2, int>। (আচ্ছা, Function2TT_int<T1, T2>আদিম কারণগুলির মতো ইন্টারফেসগুলির পুরো বিশদটি থাকতে পারে তবে আপনি আমার
বক্তব্যটি পেয়েছেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.