সি ++ মডিউলগুলি - কেন তাদের সি ++ 0x থেকে সরানো হয়েছে? তারা কি পরে ফিরে আসবে?


110

আমি সদ্য C ++ 0x মডিউল সম্পর্কে এই পুরানো সি ++ 0x খসড়াটি আবিষ্কার করেছি ।

ধারণা ছিল কেবলমাত্র .cpp ফাইল লিখে বর্তমান .h / .cpp সিস্টেম থেকে বেরিয়ে আসুন যা সংকলনের সময় মডিউল ফাইলগুলি তৈরি করতে পারে যা পরবর্তীতে অন্যান্য .cpp ফাইলগুলি ব্যবহার করবে।

এটি দেখতে সত্যিই দুর্দান্ত বৈশিষ্ট্যের মতো দেখাচ্ছে।

তবে আমার প্রশ্ন হ'ল তারা কেন এটি সি ++ 0x থেকে সরিয়ে দিয়েছে? এটি কি অনেক প্রযুক্তিগত সমস্যার কারণে হয়েছিল? সময়ের অভাব? এবং আপনি কি মনে করেন যে তারা সি ++ এর একটি অতি সংস্করণের জন্য এটিতে কাজ করা বিবেচনা করবে?

উত্তর:


70

সি ++ বিবর্তন রাজ্য থেকে (সান ফ্রান্সিসকো পোস্ট করুন ২০০ 2008) , মডিউলগুলির প্রস্তাবটিকে "আলাদা টিআরের শিরোনাম:" হিসাবে শ্রেণীবদ্ধ করা হয়েছিল

এই বিষয়গুলি প্রকাশিত হওয়ার আগে C ++ 0x এর পরে অন্য স্ট্যান্ডার্ডের জন্য অপেক্ষা করা খুব গুরুত্বপূর্ণ বলে মনে করা হয় তবে পরবর্তী স্ট্যান্ডার্ডের জন্য সময় মতো চূড়ান্ত করা খুব পরীক্ষামূলক নয়। অতএব, এই বৈশিষ্ট্যগুলি প্রাথমিক পর্যায়ে একটি প্রযুক্তিগত প্রতিবেদন দ্বারা সরবরাহ করা হবে।

মডিউলগুলির প্রস্তাব কেবল প্রস্তুত ছিল না এবং এটির জন্য অপেক্ষা করা C ++ 0x স্ট্যান্ডার্ড সমাপ্ত করতে বিলম্বিত হত। এটি সত্যই সরানো হয়নি, এটি কখনও কার্যকারী কাগজে অন্তর্ভুক্ত ছিল না।


89

সি ++ মডিউল খসড়া (সি ++ 17 এর পরে প্রযুক্তিগত নির্দিষ্টকরণ)

একটি খসড়া এবং C জন্য বিভিন্ন আপডেট পুনর্বিবেচনা / সি ++ মডিউল স্পেসিফিকেশন দ্বারা প্রকাশ করা হয়েছে WG21 open-std.org উপর। আমি এখানে কেবলমাত্র সর্বশেষ নথিগুলিতে লিঙ্ক করব:

  • ওয়ার্কিং ড্রাফ্ট, মডিউল N4610 (অক্টোবর 2016) এর জন্য সি ++ তে বর্ধিতকরণ
  • চতুর্থ সংশোধনী P0142R0 (মার্চ 2016) হিসাবে প্রকাশিত ।
  • P0143R2 (মার্চ 2016) হিসাবে প্রকাশিত মডিউলগুলির জন্য ওয়ার্ডিং
  • ঝনঝন টিম তাদের পরিবর্তনগুলির একটি দ্বিতীয় সংশোধন প্রকাশ করেছে: P0273R1 (অক্টোবর 2016)।

নিম্নলিখিত ব্লগ পোস্টগুলিতে মান সভার একটি সংক্ষিপ্তসার এবং বিশেষত মডিউল খসড়ার বর্তমান অবস্থার সংক্ষিপ্তসার রয়েছে:

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

মাইক্রোসফ্ট প্রস্তাবিত মডিউল স্পেসিফিকেশন

এই প্রস্তাবটিতে থাকা সর্বাধিক গুরুত্বপূর্ণ ধারণাগুলির একটি দ্রুত ওভারভিউ এখানে দেওয়া হল। এটির খসড়া হিসাবে এটি সম্ভবত এখনও পরিবর্তন হতে পারে। নতুন মডিউলগুলির স্ট্যান্ডার্ডটিতে অন্যান্য বিষয়গুলির মধ্যে অন্তর্ভুক্ত থাকবে:

একটি moduleশব্দ একটি মডিউল ডিক্লেয়ার, একাধিক ফাইল এই ডিক্লেয়ার করতে পারেন একটি মডিউল নির্মাণ করতে (কিন্তু প্রতিটি মডিউলের জন্য শুধুমাত্র একটি সংকলন ইউনিট একটি থাকতে পারে export {}অধ্যায়):

module M;

importপরিবর্তে মডিউলগুলি আমদানি করার জন্য একটি কীওয়ার্ড এর পরিবর্তে importব্যবহারের সিদ্ধান্ত নেওয়া হতে পারে using module, সুতরাং একটি নতুন আমদানি কীওয়ার্ড এড়ানো যায়।

import std.io;
import module.submodule;

একটি exportসিনট্যাক্স, যা জনসাধারণের ঘোষণাগুলি সংজ্ঞায়িত করে যা এই মডিউলটির অংশ, মডিউলটির অংশ হিসাবে রফতানি করা উচিত নয় এমন ইন্টারফেস অ- ঘোষণাগুলি রফতানি ব্লকের বাইরে সংজ্ঞায়িত করা হবে। ঘোষণাগুলি সি / সি ++ এ যে কোনও ধরণের ঘোষণা হতে পারে, এটি কেবল ফাংশনই নয় তবে ভেরিয়েবল, স্ট্রাক্ট, টেম্পলেট, নেমস্পেস এবং ক্লাসগুলি:

export {
    int f(int);
    double g(double, int);

    int foo;

    namespace Calc {
         int add(int a, int b);
    }        
}

void not_exported_function(char* foo);

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

#define FILE "my/file"
import std.io;   //will not be impacted by the above definition

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

আরও বিস্তারিত তথ্যের জন্য আমি খসড়াটি পড়ার পরামর্শ দিই।

ঝনঝন মডিউল

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

বর্তমানে আমদানির ঘোষণার জন্য কোনও সি বা সি ++ সিনট্যাক্স নেই। ঝনঝনানি সি ++ কমিটিতে মডিউলগুলির প্রস্তাব ট্র্যাক করবে। আজ মডিউলগুলি কীভাবে আমদানি হয় তা দেখতে আমদানি সহ বিভাগটি দেখুন।

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

মডিউলগুলি থেকে ম্যাক্রো রফতানি

উপরে উল্লিখিত হিসাবে এখনও ম্যাক্রো রফতানি চূড়ান্ত মডিউল টিএস এর অংশ হবে কিনা তা এখনও অস্পষ্ট । ইন P0273R1 নিম্নলিখিত সিনট্যাক্স ম্যাক্রো রপ্তানি প্রস্তাবিত হয়েছিল:

#export define MAX(A,B) ((A) > (B)) ? (A) : (B);

2
2018 র্যাপারসুইল থেকে আপডেট, গ্যাব্রিয়েল ডস রেস এবং রিচার্ড স্মিথ, পি 1103 আর 0 এর একীভূত প্রস্তাব রয়েছে। botondballo.wordpress.com/2018/06/20/…
ডোয়েন রবিনসন

32

স্ট্যাংডাইজেশন মানককরণ শেষ হওয়ার আগেই মডিউলগুলিতে কাজ শুরু করার জন্য প্রথম সংকলক। এখনও কোনও ডকুমেন্টেশন খুব বেশি পাওয়া যায় নি, তবে উদাহরণ কোডটি এখানে পাওয়া যাবে:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/

ডগলাস গ্রেগর এর কিছু মন্তব্য (তাদের বাস্তবায়নকারী বিকাশকারী):
http://clang-developers.42468.n3.nabble.com/C-modules-td3619936.html

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

সম্পাদনা 1:
ডগলাস গ্রেগর তার বাস্তবায়ন সম্পর্কে একটি উপস্থাপনা প্রকাশ করেছেন:
http://llvm.org/devmtg/2012-11/ গ্রেগর- Modules.pdf?=submit

সম্পাদনা 2: জঞ্জাল
মধ্যে মডিউল সমর্থন এখানে নথিভুক্ত করা হয়েছে:
http://clang.llvm.org/docs/Modules.html

সম্পাদনা 3:
মডিউলগুলি এখন মাইক্রোসফ্টের সি ++ সংকলনেও সমর্থিত: http://blogs.msdn.com/b/vcblog/archive/2015/12/03/c-modules-in-vs-2015-update-1। aspx


-39
  1. কারণ এটি খুব বড় ধারণাগত পরিবর্তন।
  2. H / cpp এর উত্সগুলিকে আলাদা করার কারণে এটির সত্যিকারের প্রয়োজন নেই
  3. কারণ সি ++ প্রকৃত "মডিউল" লাইব্রেরি কীভাবে তৈরি হয় তা নির্ধারণ করে না। এটি এটি সংকলক বিকাশকারী এবং লিঙ্কারে ছেড়ে দেয়।
  4. "মডিউলগুলি" কখনও কখনও বেশ প্ল্যাটফর্ম নির্ভর হয়, উদাহরণস্বরূপ ডিএলএল ভাগ করা বস্তুগুলির থেকে একেবারে আলাদা। সুতরাং এই ধারণাগুলির মধ্যে মার্জ করা এত তুচ্ছ নয়।

78
অবশ্যই একটি প্রয়োজন আছে। .h / .cpp একটি হাস্যকর মন্দ এবং উত্সাহিত কাজ ar একটি মডিউল সিস্টেম একটি বড় পরিবর্তন হতে পারে, কিন্তু এটি এমন একটি যা স্ট্যান্ডার্ড কমিটি দৃশ্যত গুরুত্বপূর্ণ বিবেচনা করে।
jalf

13
শিরোনাম বিল্ড মডেল হ'ল সমস্যা মডিউলগুলি সমাধানের জন্য বোঝানো হয়, সমাধান নয়। এছাড়াও মডিউলগুলি ডিএলএল / এসওগুলির প্রতিস্থাপন নয়।
bames53

5
এটি ভুল: মডিউল প্রস্তাব বিদ্যমান শিরোনাম সিস্টেমের সাথে পিছনে সামঞ্জস্যতা নিশ্চিত করার জন্য ভাল যত্ন নেয়, তাই মডিউলগুলি ভবিষ্যতে যখন প্রবর্তিত হবে তখন কিছুই ভেঙে যায় না। ২. হে (এম * এন) জটিলতায় হে (এম + এন) থেকে হেডার মডিউলটির সংকলনের সময় জটিলতা হ্রাস করার প্রয়োজনীয়তা খুব ভালভাবে নথিভুক্ত করা হয়েছে। ৩. মডিউল স্ট্যান্ডার্ড হ'ল মডিউলগুলি কীভাবে সংকলন ও সংযুক্ত করা হচ্ছে তা নির্দেশ করবে না, তবে এটি একটি মডিউলের ব্যক্তিগত এবং পাবলিক এপিআইয়ের মধ্যে পৃথক করার জন্য একটি স্পষ্ট শব্দার্থক যুক্ত করেছে। ৪. ডিএলএল বা ভাগ করা বস্তুর বাইনারি বিন্যাসটি মান দ্বারা প্রভাবিত হয় না।
ল্যানক্সিক্স

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