সি ভাষার বহনযোগ্যতা


10

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

উত্তর:


27

এটি কি সিতে লেখা কেবল উত্স কোডটি এক্সিকিউটেবলের মতো নয়?

সঠিক। কিছু লোক এটিকে একবার লিখতে বলে, সর্বত্র সংকলন করে।

http://en.wikedia.org/wiki/Write_once,_compile_ कहींও

অন্য বিকল্পটি হ'ল একবার লিখুন, সর্বত্র চালান। জাভা এর একটি ভাল উদাহরণ।

http://en.wikipedia.org/wiki/Write_once,_run_anywhere

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


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

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

6

এটি কেবল আইএসএ নির্দিষ্ট নয়। উদাহরণস্বরূপ আপনি জিজ্ঞাসা:

এক্স 86 এর জন্য অ্যাপ্লিকেশনগুলি অ্যাপলের অ্যাপ্লিকেশনগুলির থেকে পৃথক?

হ্যাঁ, তারা হ'ল অ্যাপল x86 হার্ডওয়্যার ব্যবহার করে। সি বাইনারিগুলি আর্কিটেকচার এবং অপারেটিং সিস্টেম নির্দিষ্ট।


1
@ স্টিভেন314: আপনার মন্তব্যটি স্পর্শকাতর। হার্ডওয়্যারটি মানসম্মত কিনা তা নিয়ে কিছুই করার নেই এবং ওএস এক্সের ভিন্ন ভিন্ন বাইনারি ফর্ম্যাট (ম্যাচ-ও) রয়েছে বলে, লিনাক্স (সাধারণত ইএলএফ) এর সাথে কিছুই করার নেই।
মিপাদি

@ স্টিভ: EFI বনাম BIOS কেবল বুটিং এবং ওএস ইন্টার্নালগুলির জন্য গুরুত্বপূর্ণ; হার্ডওয়্যার আর্কিটেকচার, যা সিপিইউ নির্দেশিকা সেট একই, কারণ এটি একই সিপিইউ।
ভের্টেক

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

@ ভার্টেক আপনি বলেছেন যে সি বাইনারিগুলিও অপারেটিং সিস্টেম নির্দিষ্ট, তবে ও / এস নিজেই আইএসএ নির্দিষ্ট কারণ, সি বাইনারিগুলি পরোক্ষভাবে ও / এস নির্দিষ্ট হয়ে যায়?
KawaiKx

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

5

এটি কি সিতে লেখা কেবল উত্স কোডটি এক্সিকিউটেবলের মতো নয়?

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


3

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

উদাহরণস্বরূপ, জাএভিএ একবার লেখা যেতে পারে এবং যে কোনও প্ল্যাটফর্মে চালানো যেতে পারে যেখানে ভিএম (আজ এটি "রানটাইম পরিবেশ" নামে পরিচিত)। তবে আরেকটি সুবিধা হ'ল আপনি নিজের ২০১১ মেশিনে 1995 থেকে জাভা 1.1 কোড চালাতে পারেন। যদি আপনার কোড i386 তে সংকলিত হয় এবং আপনি এটি আপনার AMD64 আর্কিটেকচারে চালানোর চেষ্টা করেন যা কোনটি সম্ভব নয় not

আপনি নিজে ভার্চুয়াল মেশিনেরও উন্নতি পেতে পারেন।

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

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


3

লেখার সম্পর্কে ভাল উত্তর একবারে যে কোনও জায়গায় সংকলন করে।

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

সুতরাং আমি বলব যে কোনও ভাষার বহনযোগ্যতা এটি দ্বারা নির্ধারিত হয়:

  1. মানীকরণের স্তর।
  2. বিভিন্ন প্ল্যাটফর্ম / আর্কিটেকচারের জন্য সংকলকগুলির উপলভ্যতা।
  3. পোর্টেবল লাইব্রেরির গভীরতা এবং প্রস্থ।

বাস্তবিকভাবে যদিও প্রায় কোনও জটিল সি অ্যাপ্লিকেশনটির জন্য হার্ডওয়্যার বা অপারেটিং সিস্টেমের নির্ভরতার কারণে নতুন প্ল্যাটফর্মে যেতে কিছু কাজ প্রয়োজন। এই প্রক্রিয়াটি পোর্টিং হিসাবে পরিচিত।


3

"বহনযোগ্যতা" এর একাধিক অর্থ রয়েছে। সি সম্পর্কে শ্রদ্ধার সাথে এর অর্থ নিম্নলিখিতগুলি:

  • বিভিন্ন ধরণের হার্ডওয়্যার এবং অপারেটিং সিস্টেম প্ল্যাটফর্মগুলির জন্য সি এর জন্য কমপাইলারগুলি প্রয়োগ করা হয়েছে, যা 70 এর দশকের গোড়ার দিকে একটি বড় চুক্তি ছিল;

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

  • এই স্ট্যান্ডার্ডের কারণে, বিভিন্ন প্ল্যাটফর্মগুলিতে সংকলিত হওয়ার সময় কনফার্মিং কোড একই আচরণ তৈরি করবে।

সোর্স কোড পোর্টেবল, কিন্তু একটি নতুন বাইনারি প্রতিটি লক্ষ্য জন্য তৈরি করা হয়েছে।

নোট, তবে, যে সি উত্স খুব কমই "তুচ্ছ" পোর্টেবল; বেশিরভাগ অ্যাপ্লিকেশনগুলির জন্য আপনাকে ভাষা স্ট্যান্ডার্ড দ্বারা নির্দিষ্ট করা প্ল্যাটফর্মগুলি ব্যবহার করে যা নির্দিষ্ট নির্দিষ্ট প্ল্যাটফর্মের জন্য অনন্য।

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


0

আইএসএ যাই হোক না কেন, সি আইএসএ নির্দিষ্ট নয়। আমি ধরে নিয়েছি আপনি পিসি এক্সটেনশন কার্ডের জন্য এখন-অপ্রচলিত স্লটটির উল্লেখ করছেন না।

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

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

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

সি এর অবশ্যই একটি স্ট্যান্ডার্ড গ্রন্থাগার রয়েছে তবে জাভা, সি #, পাইথন ইত্যাদি ইত্যাদির সাথে তুলনায় তুলনামূলকভাবে এর ব্যাপ্তি সীমিত limited


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