ভাষার কর্মক্ষমতা ধারাবাহিকতায় অবজেক্টিভ-সি কোথায় পড়ে?


20

জাভা বা পাইথন বলার তুলনায় সি বা সি ++ এর বিভিন্ন গতির যোগ্যতার বিষয়ে প্রচুর আলোচনা হয়েছে বলে মনে হয়, তবে আমি লক্ষ্য করি খুব কমই লক্ষ্য করা যায় j মোটামুটি ভাষা পারফরম্যান্সের ক্ষেত্রে এটি কোথায় পড়ে?


23
1986 - ব্র্যাড কক্স এবং টম লাভ অবজেক্টিভ সি তৈরি করে ঘোষণা করে, "এই ভাষায় সি'র সমস্ত স্মৃতি সুরক্ষা রয়েছে স্মলটালকের সমস্ত জ্বলন্ত গতির সাথে মিলিত।" আধুনিক iansতিহাসিকরা সন্দেহ করেন যে তারা দুজনই ডিসলেক্সিক ছিলেন। ( উত্স )
ম্যাসন হুইলারের

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

1
"পারফরম্যান্স" কোনও ভাষার বৈশিষ্ট্য নয়, তবে একটি ভাষা বাস্তবায়নের এবং আরও গুরুত্বপূর্ণ, সেই ভাষায় লিখিত প্রোগ্রামগুলির। আপনি অবজেক্টিভ-সি তে খুব দ্রুত প্রোগ্রাম লিখতে পারেন বা আপনি খুব ধীরে ধীরে লিখতে পারেন।
কালেব

এটি ঘৃণ্য বাক্য গঠন করতে ব্যর্থ হয় তবে এটি তার বর্তমান সংকলকগুলির উপর ভিত্তি করে খারাপ পারফরম্যান্স ভাষা নয় কারণ পারফরম্যান্সটি প্রকৃত ভাষার চেয়ে সংকলক / ভিএম এর উপর ভিত্তি করে বেশি।
রিগ

উত্তর:


28

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

সুতরাং, কোড জেনারেশন পর্যায়ে, সি এবং উদ্দেশ্য-সি সমতুল্য তা ধরে নেওয়া নিরাপদ।

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

সি ++ এর বিপরীতে, বাইন্ডিং পদ্ধতিটি আরও বেশি 'গতিশীল', এবং idসর্বত্র সুপারক্লাসের ব্যবহারকে প্রচার করে , যা এটি তত্ত্বের ক্ষেত্রে সি ++ এর চেয়ে সামান্য ধীর করে তোলে। অনুশীলনে, এই পার্থক্যটি পরিমাপযোগ্যের চেয়ে কম।

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

টিএল; ডিআর: সি এবং সি ++ ভাষার সাথে এটি সর্বাধিক গুরুত্বপূর্ণ যেখানে রয়েছে with আপনি যদি ভাল পারফরম্যান্স না পেয়ে থাকেন তবে আপনার অ্যালগরিদমগুলি পরীক্ষা করুন; ঠিক তেমন কোনও গুরুতর ভাষায়।


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

11

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


1
সি এর সাথে এই পারফরম্যান্স তুলনাটি খুঁজে পেয়েছে : rmarcus.info/?p=488 মনে হচ্ছে অবজেক্টিভ-সি তবুও সি এর বেশ কাছাকাছি রয়েছে
ওলিপি


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

ডাউনভোটার নয়; আমি মূলত ভারী-সংখ্যাগত অ্যালগোরিদমগুলিতে আগ্রহী, গতিশীল প্রেরণগুলি এর মধ্যে খুব বেশি কিছু আসে না ।
হরিণ হান্টার

8

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


7

অলিভার নীচে যেমন বলেছেন ওবজ-সি এবং সি / সি ++ এর মধ্যে মৌলিক গতির পার্থক্যগুলি গতিশীল পদ্ধতির প্রেরণের কারণে।

এই প্রবন্ধে এই উপরি প্রোফাইলের OBJ-সি http://it.toolbox.com/blogs/macsploitation/bypassing-objectivecs-message-passing-mechanism-for-speed-24946

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

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

আরও কিছু দরকারী আলোচনা এখানে: http://www.cocoabuilder.com/archive/cocoa/106535-instance-variable-access.html#106605

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

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