আমি সমাবেশে অনুশীলন সমস্যা করার চেষ্টা করা উচিত? [বন্ধ]


9

আমি প্রকল্পের এলারের সমস্যা 48 এ খুঁজছিলাম :

সিরিজ, 1 1 + 2 2 + 3 3 + ... + 10 10 = 10405071317।

সিরিজের শেষ দশটি সংখ্যা খুঁজুন, 1 1 + 2 2 + 3 3 + ... + 1000 1000

পাইথনে আমি একক লাইন দিয়ে এটি করতে পারি:

sum((x**x for x in xrange(1,1001))

তবে এর বিধানসভা সমান 100 লাইন এবং একটি সত্য চ্যালেঞ্জ হবে।

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


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

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

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

3
হয় আপনার পাইথন লাইনটি x.1 এর জন্য x ^ 2 গণনা করে (1..1000-এ x এর জন্য x ^ x এর পরিবর্তে) বা পাইথনটি আমি যা ভাবি তার চেয়েও বেশি যাদু। :)
এঙ্গো

*পাইথনে কি "উত্থানের শক্তি" ফাংশন হয়?

উত্তর:


1

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

উদাহরণস্বরূপ, কীভাবে সহজ বিবৃতি সংকলন করা হয়েছে তা কেবল বুঝতে understanding নিম্নলিখিত ফাংশন,

int func(int val)
{
  int num = val * 5;
  return num;
}

... হয়ে যায় (কমপক্ষে আকর্ষণীয় কিছুটা):

movl    %edi, -20(%rbp)
movl    -20(%rbp), %edx
movl    %edx, %eax
sall    $2, %eax
addl    %edx, %eax

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

-Sবিকল্পটি সহ জিসিসি থেকে এসেম্বলারের আউটপুট উত্পন্ন করুন । তবে, সচেতন থাকুন যে ফলাফলগুলি সংকলক এবং অপ্টিমাইজেশন স্তর দ্বারা পৃথক হবে।

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


11

সম্ভবত এসেম্বলার লিখতে সক্ষম হওয়ার প্রয়োজন নেই (বেশিরভাগই আপনার সিস্টেমে আরম্ভ এবং কলিং কনভেনশনের বিবরণ)।

এটি কিছুটা বোঝার মতো, যদি আপনি উত্স ছাড়াই কোনও ডিবাগ করার চেষ্টা করছেন।

তবে মেশিনটি কমপক্ষে 'সি' এবং পয়েন্টার (মূলত একটি উচ্চ স্তরের একত্রিতকারী) এর স্তরে বুঝতে পারা যায় যাতে আপনি জানতে পারবেন কেন একটি লুপের জন্য এক মিলিয়ন বার স্ট্রিংটি উত্তোলন করা খারাপ।


আসলে, কিছু অপেক্ষাকৃত চৌকস বাস্তবায়ন for i in range(1000000): s = s + '.'আমার পুনরায় ব্যবহারের "অনুকূলিত" সংস্করণগুলির চেয়ে কোনও (খুব বেশি) খারাপ করতে পারে না s। একইভাবে, অন্যান্য বেশ কয়েকটি বিকাশ সি জ্ঞানের সাথে একটি যুক্তিসঙ্গত অনুমান এবং একটি নির্বিকার বাস্তবায়ন অনুমান করে যা বাতিল করে দেয়। তবে সাধারণভাবে এটি ক্ষতির চেয়ে বেশি কার্যকর। কেবল মনে রাখবেন যে ভাষা প্রয়োগগুলি কখনও কখনও আপনার চেয়ে বেশি স্মার্ট হয়))

2
@ ডেলান -আমার একটি সংক্ষিপ্ত উদাহরণের দরকার ছিল যেখানে জাভা / সি # তে নিরীহ দেখাচ্ছে এমন কিছু সিলিকনে খুব ব্যয়বহুল হতে পারে। আমি বিশেষত এমন অনেক লোককে নিয়ে এসেছি যারা মনে করে যে একটি বড় মেমরির বরাদ্দ এবং অনুলিপি তাত্ক্ষণিক।
মার্টিন বেকেট

আমি যে delnan :-) বিশ্বাস করতে ঘৃণা
নিশান্ত

5

ভাল প্রশ্ন. অ্যাসেম্বলি শেখা অবশ্যই চেষ্টা করার পক্ষে ভাল এবং মূল্যবান।

  1. এম্বেডড সফ্টওয়্যার বিকাশে এ জাতীয় নিম্ন স্তরের বোঝাপড়া ভাল কাজে আসবে
  2. নিম্ন স্তরে রিফ্যাক্টরিং
  3. এটি আপনাকে কার্যকরভাবে ডিবাগারটি ব্যবহারে সহায়তা করবে
  4. কোড গুহাদের মতো স্টাফগুলিতে সহায়তা করার জন্য আপনাকে বিচ্ছিন্ন কোডের একটি ধারণা দিন understanding

2
আমাকে কোডেকাভ সন্ধান করতে হয়েছিল। আমি এগুলি প্রচুর ব্যবহার করি তবে আমরা তাদের এখন "ডিটর্স" বলি। গবেষণা.
microsoft.com/en-us/projects/detours

1

হ্যা এবং না.

যদিও এটি সত্য যে এটি আপনাকে আপনার কোডটি কী করছে এবং কিছু প্রচেষ্টা কেন আপনার প্রচেষ্টা সম্পর্কে ভাবা উচিত তা একটি খারাপ ধারণা কেন তা আরও ভাল বোঝার মঞ্জুরি দেবে।

এসেম্বলার শেখা কোনও সাপ্তাহিক প্রকল্প নয়, এটি আপনাকে অনেক সময় দেবে এবং এই সময়টি আরও ভালভাবে ব্যয় করা যায় কি না তা আপনার চিন্তা করা দরকার।

যদি আপনার অনুকূলিত কোডগুলিতে না আসে তবে আপনি সম্ভবত যে প্রচেষ্টাটি করেছেন তার সমান বেনিফিট দেখতে পাবেন না।


1

আমি যখন ছোট ছিলাম তখন আমি অনেকগুলি এসেম্বলার করেছি এবং আমি মনে করি না এটি এসেম্বলারের বাইরে কিছু বুঝতে সহায়তা করেছিল। আপনি যদি আধুনিক এসেম্বলারের দিকে একবার নজর দেন তবে এটি সমস্ত ম্যাক্রো ল্যাঙ্গুয়েজ স্টাফ। আমি সাধারণত উপমাগুলি ঘৃণা করি, তবে যাইহোক এখানে: গাড়ির ইঞ্জিন কীভাবে কাজ করে তা আপনাকে কীভাবে উন্নততর চালক করে তোলে তা জানেন?


কোনও গাড়ির ইঞ্জিন কীভাবে কাজ করে তা জেনে রাখলে কী আপনাকে আরও ভাল চালক বানানো যায়? না, তবে এটি আপনাকে আরও ভাল গাড়ির মালিক করে তোলে, কারণ ইঞ্জিনটি যদি ভেঙে যায় তবে আপনি এটি ঠিক করতে পারেন।
ক্যামেরন মার্টিন

সম্মত, তবে এটি আপনাকে আরও ভাল চালক হিসাবে তৈরি করতে পারে না, যা আমি ব্যবহার করছিলাম an ইঞ্জিনটি নিজেকে স্থির করে আপনি যান্ত্রিকদের নিয়োগ দিয়ে বিস্তৃত অর্থনীতির সমর্থন করছেন না, ... সাদৃশ্যগুলি সীমাবদ্ধতার সাথে আসে। সাধারণত আমি কাউকে আগ্রহী হলে তারা কিছু শিখতে নিরুৎসাহিত করব না, তবে আমি মনে করি খরগোশের গর্তটিকে উচ্চতর স্তরের ভাষাগুলিতে কার্যকরভাবে প্রয়োগ করতে সক্ষম হওয়ার জন্য আপনাকে বেশ গভীরভাবে যেতে হবে। শুরু করার জন্য আপনাকে নির্দিষ্ট ভাষা দ্বারা সংকলিত অপ্টিমাইটিজেশনগুলি সংকলন করা থাকলে, বা দোভাষী বা জিটারটি বুঝতে হবে। এটি একটি বিশাল অঞ্চল।
ইয়ান

1

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

(যখন আমি হোস্ট প্রোগ্রামটি এইচএলএলতে লিখিত হওয়ার বিষয়ে কথা বলি তখন আমার অর্থ সি বা ওবজেসি যখন আমি x86_64 asm শিখতে চাইছি এবং বেসিক যখন আমি Z80, 6502 এবং 6809 asm এ কাজ করছি))

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