আধুনিক পাঠাগারগুলি কেন ওওপি ব্যবহার করে না


20

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

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

সব মিলিয়ে এগুলি সি ++ স্টাইলের চেয়ে সি স্টাইলে বেশি লেখা হয়েছে বলে মনে হয়। তবে এগুলি সম্পূর্ণ ভিন্ন অপ্রয়োজনীয় ভাষা, তাই না?

প্রশ্নটি হ'ল: আধুনিক গ্রন্থাগারগুলি যে ভাষায় লিখিত রয়েছে সেগুলির সুবিধা কেন ব্যবহার করে না?


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

5
এগুলি ছাড়াও ওপেনজিএল বা "আধুনিক" এই অর্থে নয় যে তারা তরুণ, বা কমপক্ষে অভিনব নতুন ফ্যাচারগুলি গ্রহণ করতে সক্ষম। উভয়ের একটি দীর্ঘ ইতিহাস রয়েছে (ওপেনজিএল 1.1: 1997; এসডিএল: 1998) এবং পিছনে-সামঞ্জস্যতার সীমাবদ্ধতা।

1
ঠিক তাই বলা হয়েছে: ডাইরেক্টএক্স অনেক বেশি আপত্তিজনক (যদি এটি আরও খানিকটা নিম্ন-স্তরের হয়)।
সিএইচও

1
নেটিভ সি ++ লাইব্রেরি, যেমন স্টিল এবং বুস্টের মতো ক্র্যাপি, পুরানো, অকেজো OOP ধারণাগুলিও ব্যবহার করবেন না।
এসকে-যুক্তি

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

উত্তর:


31

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

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

যদিও সি এবং সি ++ একেবারেই আলাদা ভাষা, সেগুলি "বেমানান" নয়, প্রকৃতপক্ষে, অনেকাংশে সি ++ সি'র একটি সুপারসেট রয়েছে কিছু অসামঞ্জস্য রয়েছে তবে অনেকগুলি নয়, তাই সি ++ থেকে সি ইন্টারফেস ব্যবহার করা খুব সহজ জিনিস is করতে.


আচ্ছা বুঝলাম. ঠিক আছে, তারপরে পরবর্তী প্রশ্ন: সেখানে কি আছে, বলুন, ওপিজিএল হিসাবে কার্যকর সি ++ এর জন্য কোনও গ্রাফিক্স লাইব্রেরি? অথবা হতে পারে ওপেনগিএলের উপরে একটি মোড়ক যা সি ++ এর সমস্ত সুবিধা ব্যবহার করে এবং সংস্থানগুলির ভাল পরিচালনা সরবরাহ করে? এপিআইগুলি আরও পরিষ্কার পরিচ্ছন্ন দেখাবে এবং আমি মনে করি না মেমরি / সিপিইউ ওভারহেড খুব বেশি হবে।
সেজে

কার্যকর বা দক্ষ? যেভাবেই হোক, এসডিএল বা ওপেনজিএল উভয়ের জন্য সি ++ র‌্যাপারটি খুঁজে পাওয়া মোটামুটি সহজ হওয়া উচিত। একটি তাত্ক্ষণিক গুগল ওপেনগিএলের জন্য এই মোড়ক নিয়ে এসেছে: oglplus.org - এটি কতটা ভাল তা জানেনা , আমি এটি ব্যবহার করি নি।
টিমো জিউশ

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

ঠিক আছে, আমি মনে করি আমি যে উত্তরগুলি সন্ধান করেছি তা আমার কাছে রয়েছে। ধন্যবাদ সবাইকে!
সেজে

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

10

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

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

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

কিন্তু সিওএম এখনও তার লাগেজ ছাড়া নেই। অনেক ক্ষেত্রে নিয়মিত, প্ল্যান সি-স্টাইলের এপিআই এখনও আরও অনেক ভাল বিকল্প।


7

ওপেনজিএল এবং এসডিএল উভয়ই সি লাইব্রেরি, সি ++ লাইব্রেরি নয়। আপনি এগুলি সি ++ থেকে ব্যবহার করতে পারেন তবে সেগুলি সিতে লিখিত রয়েছে এবং একটি সিপিআই রয়েছে (যা অন্যান্য ভাষা থেকেও অ্যাক্সেসযোগ্য; সি ++ এফএফআই এর মাধ্যমে অ্যাক্সেস করার জন্য একটি ব্যথা)। কটাক্ষপাত আছে বুস্ট সাধারণ বৃহৎ অ্যারের (এবং কিছু বিশেষ) সি ++ লাইব্রেরি এবং জন্য SFML একটি সি ++ মাল্টিমিডিয়া লাইব্রেরির জন্য।


3

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

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


-2

এই লাইব্রেরিগুলি দূরবর্তীভাবে মোটেই আধুনিক নয়। তারা সি আই পি, এবং এতে খারাপ bad আপনার ভিত্তি ত্রুটিযুক্ত।


ওপেনজিএল কীভাবে আধুনিক নয়?
জেমস

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