সি ডাটা টাইপগুলি কীভাবে "বেশিরভাগ কম্পিউটারের দ্বারা সরাসরি সমর্থিত হয়"?


114

আমি কে ও আর এর "দ্য সি প্রোগ্রামিং ল্যাঙ্গুয়েজ" পড়ছি এবং এই বিবৃতিটি দেখতে পেলাম [ভূমিকা, p। 3]:

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

সাহসী বক্তব্যটির অর্থ কী? কোনও ডেটা টাইপ বা নিয়ন্ত্রণ কাঠামোর উদাহরণ রয়েছে যা সরাসরি কম্পিউটার দ্বারা সমর্থিত নয় ?


1
আজকাল, সি ভাষা জটিল পাটিগণিতকে সমর্থন করে, তবে মূলত এটি এর কারণ নয় যে কম্পিউটারগুলি জটিল সংখ্যাকে সরাসরি ডেটা টাইপ হিসাবে সমর্থন করে না।
জনাথন লেফলার 16'15

12
প্রকৃতপক্ষে, এটি historতিহাসিকভাবে অন্য উপায়ে ছিল: সি সেই সময়ে উপলব্ধ হার্ডওয়্যার ক্রিয়াকলাপ এবং প্রকারগুলি থেকে তৈরি করা হয়েছিল।
বেসিল স্টারিনকিভিচ

2
দশমিক ফ্লোটের জন্য বেশিরভাগ কম্পিউটারের কোনও সরাসরি হার্ডওয়্যার সমর্থন নেই
প্লাজমাএইচএইচ

3
@ এসএমএলটার্স: "আমি কি কোনও ডেটা টাইপ বা নিয়ন্ত্রণ কাঠামোর একটি উদাহরণ যা সরাসরি কম্পিউটার দ্বারা সমর্থিত নয়?" এই প্রশ্নের জন্য কিছু দিক নির্দেশ করার চেষ্টা করছিলাম? যা আমি কে
অ্যান্ডআর

11
স্ট্যাক ওভারফ্লো চালু হওয়ার 6 বছরেরও বেশি পরে এটি কীভাবে নকল নয়?
পিটার মর্টেনসেন

উত্তর:


143

হ্যাঁ, এমন ডেটা ধরণের রয়েছে যা সরাসরি সমর্থিত নয়।

অনেক এম্বেড থাকা সিস্টেমে কোনও হার্ডওয়্যার ফ্লোটিং পয়েন্ট ইউনিট নেই। সুতরাং, আপনি যখন কোডটি এভাবে লিখবেন:

float x = 1.0f, y = 2.0f;
return x + y;

এটি এরকম কিছুতে অনুবাদ হয়:

unsigned x = 0x3f800000, y = 0x40000000;
return _float_add(x, y);

তারপরে সংকলক বা স্ট্যান্ডার্ড লাইব্রেরির একটি বাস্তবায়ন সরবরাহ করতে হবে _float_add(), যা আপনার এম্বেড থাকা সিস্টেমে স্মৃতি গ্রহণ করে। আপনি যদি একটি অতি ক্ষুদ্র সিস্টেমে বাইটগুলি গণনা করেন তবে এটি বাড়তে পারে।

আর একটি সাধারণ উদাহরণ 64৪-বিট পূর্ণসংখ্যার (১৯৯০ long longসাল থেকে সি স্ট্যান্ডার্ডে), যা সরাসরি ৩২-বিট সিস্টেম দ্বারা সমর্থিত নয়। পুরাতন স্পার্ক সিস্টেমগুলি পূর্ণসংখ্যার গুণকে সমর্থন করে না, তাই রানটাইম দ্বারা গুণন সরবরাহ করতে হয়েছিল। অন্যান্য উদাহরণ আছে।

অন্যান্য ভাষাসমূহ

তুলনা করে, অন্যান্য ভাষাগুলিতে আরও জটিল আদিম রয়েছে।

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

নিয়ন্ত্রণ কাঠামো

সি থেকে অনুপস্থিত একটি উল্লেখযোগ্য নিয়ন্ত্রণ কাঠামো ব্যতিক্রম হ্যান্ডলিং। ননলোকাল প্রস্থান কেবল সীমাবদ্ধ setjmp()এবং longjmp()এটি কেবল প্রসেসরের স্টেটের কিছু অংশ সংরক্ষণ এবং পুনরুদ্ধার করে। তুলনা করে, সি ++ রানটাইমকে স্ট্যাকটি চালিয়ে যেতে হবে এবং ডেস্ট্রাক্টর এবং ব্যতিক্রম হ্যান্ডলারদের কল করতে হবে।


2
মূলত কেবল পয়েন্টার ... বরং মেমরির কেবল কাঁচা অংশ। এমনকি যদি এটি নিট-পিকিং হয় এবং যাইহোক উত্তরটি ভাল।
উত্সাহক 14

2
আপনি তর্ক করতে পারেন যে নাল টার্মিনেটেড স্ট্রিংগুলির "হার্ডওয়্যার সমর্থন" রয়েছে কারণ স্ট্রিং টার্মিনেটর বেশিরভাগ প্রসেসরের ক্রিয়াকলাপ 'শূন্য যদি জম্পান' ফিট করে এবং এইভাবে স্ট্রিংয়ের অন্যান্য সম্ভাব্য প্রয়োগের চেয়ে কিছুটা দ্রুত is
পিটারিস

1
সি কিভাবে asm এ ম্যাপ করার জন্য ডিজাইন করা হয়েছে তার প্রসারিত করার জন্য আমার নিজের উত্তর পোস্ট করে।
পিটার কর্ডেস

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

1
@ দ্য পারম্যাগনেটিক ক্রোস্যান্ট: আমি মনে করি এই প্রসঙ্গে এটি যথাযথ ... স্পষ্টতা নির্ভুলতার ব্যয়েই আসে।
ডায়েটারিচ এপ্প

37

প্রকৃতপক্ষে, আমি বাজি ধরছি যে 1978 সাল থেকে এই পরিচয়ের বিষয়বস্তুগুলির খুব বেশি পরিবর্তন হয়নি যখন কার্নিগান এবং রিচি বইটির প্রথম সংস্করণে প্রথম লিখেছিলেন এবং তারা সে সময়ের আধুনিকতার চেয়ে সি এর ইতিহাস এবং বিবর্তনকে উল্লেখ করে বাস্তবায়নের।

কম্পিউটারগুলি মূলত কেবল মেমরি ব্যাংক এবং কেন্দ্রীয় প্রসেসর এবং প্রতিটি প্রসেসর একটি মেশিন কোড ব্যবহার করে পরিচালনা করে; প্রতিটি প্রসেসরের ডিজাইনের অংশটি হ'ল একটি নির্দেশিকা সেট আর্কিটেকচার, যাকে অ্যাসেম্বলি ল্যাঙ্গুয়েজ বলা হয় , যা মানব-পঠনযোগ্য স্মৃতিবিজ্ঞানের একটি সেট থেকে মেশিন কোডে একের পর এক মানচিত্র করে, যা সমস্ত সংখ্যা।

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

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

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

ভাষার ইতিহাসের আকর্ষণীয় লেখার জন্য, সি ভাষার বিকাশ দেখুন - ডেনিস রিচি


14

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

দীর্ঘ উত্তরটির জন্য অ্যাসেম্বলি ভাষার কিছুটা জ্ঞান প্রয়োজন। সি তে, একটি বিবৃতি যেমন:

int myInt = 10;

সমাবেশে এরকম কিছুতে অনুবাদ করবে:

myInt dw 1
mov myInt,10

এটি সি ++ এর মতো কিছুতে তুলনা করুন:

MyClass myClass;
myClass.set_myInt(10);

ফলস্বরূপ অ্যাসেম্বলি ভাষার কোড (মাইক্লাস কত বড় হয় তার উপর নির্ভর করে () কতগুলি সমাবেশ ভাষা লাইন যোগ করতে পারে।

অ্যাসেম্বলি ভাষায় প্রকৃতপক্ষে প্রোগ্রাম তৈরি না করে খাঁটি সি সম্ভবত আপনি "একটি প্রোগ্রাম তৈরি করতে পারেন" ত্বকের সবচেয়ে ত্বকযুক্ত এবং "কঠোরতম" কোড।

সম্পাদনা

আমার উত্তরে মন্তব্যগুলি দেওয়া, আমি কেবল নিজের স্বচ্ছলতার জন্য পরীক্ষা চালানোর সিদ্ধান্ত নিয়েছি। আমি "টেস্ট.সি." নামে একটি প্রোগ্রাম তৈরি করেছি, যা দেখে মনে হচ্ছে:

#include <stdio.h>

void main()
{
    int myInt=10;

    printf("%d\n", myInt);
}

আমি এটি জিসিসি ব্যবহার করে সমাবেশে সংকলিত করেছি। এটি সঙ্কলনের জন্য আমি নিম্নলিখিত কমান্ড লাইনটি ব্যবহার করেছি:

gcc -S -O2 test.c

এখানে ফলাফল ফলাফল সমাবেশ:

    .file   "test.c"
    .section    .rodata.str1.1,"aMS",@progbits,1
.LC0:
    .string "%d\n"
    .section    .text.unlikely,"ax",@progbits
.LCOLDB1:
    .section    .text.startup,"ax",@progbits
.LHOTB1:
    .p2align 4,,15
    .globl  main
    .type   main, @function
main:
.LFB24:
    .cfi_startproc
    movl    $10, %edx
    movl    $.LC0, %esi
    movl    $1, %edi
    xorl    %eax, %eax
    jmp __printf_chk
    .cfi_endproc
.LFE24:
    .size   main, .-main
    .section    .text.unlikely
.LCOLDE1:
    .section    .text.startup
.LHOTE1:
    .ident  "GCC: (Ubuntu 4.9.1-16ubuntu6) 4.9.1"
    .section    .note.GNU-stack,"",@progbits

আমি তারপরে "test.cpp" নামে একটি ফাইল তৈরি করি যা একটি শ্রেণি সংজ্ঞায়িত করে এবং একই জিনিসটিকে "test.c" হিসাবে আউটপুট করে:

#include <iostream>
using namespace std;

class MyClass {
    int myVar;
public:
    void set_myVar(int);
    int get_myVar(void);
};

void MyClass::set_myVar(int val)
{
    myVar = val;
}

int MyClass::get_myVar(void)
{
    return myVar;
}

int main()
{
    MyClass myClass;
    myClass.set_myVar(10);

    cout << myClass.get_myVar() << endl;

    return 0;
}

আমি এই কমান্ডটি ব্যবহার করে এটি একইভাবে সংকলিত করেছি:

g++ -O2 -S test.cpp

এখানে ফলাফল ফলাফল সমাবেশ:

    .file   "test.cpp"
    .section    .text.unlikely,"ax",@progbits
    .align 2
.LCOLDB0:
    .text
.LHOTB0:
    .align 2
    .p2align 4,,15
    .globl  _ZN7MyClass9set_myVarEi
    .type   _ZN7MyClass9set_myVarEi, @function
_ZN7MyClass9set_myVarEi:
.LFB1047:
    .cfi_startproc
    movl    %esi, (%rdi)
    ret
    .cfi_endproc
.LFE1047:
    .size   _ZN7MyClass9set_myVarEi, .-_ZN7MyClass9set_myVarEi
    .section    .text.unlikely
.LCOLDE0:
    .text
.LHOTE0:
    .section    .text.unlikely
    .align 2
.LCOLDB1:
    .text
.LHOTB1:
    .align 2
    .p2align 4,,15
    .globl  _ZN7MyClass9get_myVarEv
    .type   _ZN7MyClass9get_myVarEv, @function
_ZN7MyClass9get_myVarEv:
.LFB1048:
    .cfi_startproc
    movl    (%rdi), %eax
    ret
    .cfi_endproc
.LFE1048:
    .size   _ZN7MyClass9get_myVarEv, .-_ZN7MyClass9get_myVarEv
    .section    .text.unlikely
.LCOLDE1:
    .text
.LHOTE1:
    .section    .text.unlikely
.LCOLDB2:
    .section    .text.startup,"ax",@progbits
.LHOTB2:
    .p2align 4,,15
    .globl  main
    .type   main, @function
main:
.LFB1049:
    .cfi_startproc
    subq    $8, %rsp
    .cfi_def_cfa_offset 16
    movl    $10, %esi
    movl    $_ZSt4cout, %edi
    call    _ZNSolsEi
    movq    %rax, %rdi
    call    _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
    xorl    %eax, %eax
    addq    $8, %rsp
    .cfi_def_cfa_offset 8
    ret
    .cfi_endproc
.LFE1049:
    .size   main, .-main
    .section    .text.unlikely
.LCOLDE2:
    .section    .text.startup
.LHOTE2:
    .section    .text.unlikely
.LCOLDB3:
    .section    .text.startup
.LHOTB3:
    .p2align 4,,15
    .type   _GLOBAL__sub_I__ZN7MyClass9set_myVarEi, @function
_GLOBAL__sub_I__ZN7MyClass9set_myVarEi:
.LFB1056:
    .cfi_startproc
    subq    $8, %rsp
    .cfi_def_cfa_offset 16
    movl    $_ZStL8__ioinit, %edi
    call    _ZNSt8ios_base4InitC1Ev
    movl    $__dso_handle, %edx
    movl    $_ZStL8__ioinit, %esi
    movl    $_ZNSt8ios_base4InitD1Ev, %edi
    addq    $8, %rsp
    .cfi_def_cfa_offset 8
    jmp __cxa_atexit
    .cfi_endproc
.LFE1056:
    .size   _GLOBAL__sub_I__ZN7MyClass9set_myVarEi, .-_GLOBAL__sub_I__ZN7MyClass9set_myVarEi
    .section    .text.unlikely
.LCOLDE3:
    .section    .text.startup
.LHOTE3:
    .section    .init_array,"aw"
    .align 8
    .quad   _GLOBAL__sub_I__ZN7MyClass9set_myVarEi
    .local  _ZStL8__ioinit
    .comm   _ZStL8__ioinit,1,1
    .hidden __dso_handle
    .ident  "GCC: (Ubuntu 4.9.1-16ubuntu6) 4.9.1"
    .section    .note.GNU-stack,"",@progbits

আপনি স্পষ্ট দেখতে পাচ্ছেন যে, ফলস্বরূপ অ্যাসেমবিলি ফাইলটি সি ++ ফাইলে অনেক বড় তবে এটি সি ফাইলে রয়েছে। এমনকি যদি আপনি অন্য সমস্ত জিনিসগুলি কেটে ফেলে থাকেন এবং কেবলমাত্র "সি" প্রধানকে সি ++ "প্রধান" সাথে তুলনা করেন, সেখানে প্রচুর অতিরিক্ত স্টাফ রয়েছে।


14
সেই "সি ++ কোড" কেবল সি ++ নয়। এবং রিয়েল কোড যেমন MyClass myClass { 10 }সি ++ তে ঠিক একই সমাবেশে সংকলন করা খুব সম্ভবত। আধুনিক সি ++ সংকলক বিমূর্ত দণ্ডকে সরিয়ে দিয়েছে। এবং ফলস্বরূপ, তারা প্রায়শই সি সংযোজনকারীদের বীট করতে পারে। যেমন সি এর অ্যাবস্ট্রাকশন জরিমানাটি qsortআসল, তবে সি ++ এর std::sortএমনকি বেসিক অপ্টিমাইজেশনের পরে কোনও বিমূর্ততা জরিমানা নেই।
এমসাল্টারস

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

7

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

একটি উদ্ধৃতি আছে:

সি সমাবেশ ভাষাটির ব্যবহারকারী-বন্ধুত্বের সাথে সমাবেশ ভাষার নমনীয়তা এবং শক্তিকে একত্রিত করে।

( এখানে পাওয়া যায়) । আমি ভেবেছিলাম যে আমি একটি ভিন্ন ভিন্নতার কথা মনে করেছি, যেমন "সংসদীয় ভাষার সুবিধাযুক্ততা এবং স্পষ্টতা সহ সংসদীয় ভাষার গতি"))

দীর্ঘ অন্তর্ভুক্ত সাধারণত নেটিভ মেশিনের নিবন্ধগুলির সমান প্রস্থ হয়।

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

আপনি যদি x86-64 এ 128 বিট ইনট নিয়ে কাজ করতে চান, বা সাধারণ ক্ষেত্রে বিবিআইন্টিজার স্বেচ্ছাসেবক আকারের জন্য, আপনার এটির জন্য ফাংশনগুলির একটি গ্রন্থাগার প্রয়োজন। সমস্ত সিপিইউ এখন negativeণাত্মক পূর্ণসংখ্যার বাইনারি উপস্থাপনা হিসাবে 2 এস পরিপূরক ব্যবহার করে, তবে সি ডিজাইন করার সময় এমনটি ঘটেনি। (এই কারণেই এমন কিছু জিনিস যা নন 2 এস-পরিপূরক মেশিনে বিভিন্ন ফলাফল দেয় তা প্রযুক্তিগতভাবে সি স্ট্যান্ডার্ডে অপরিবর্তিত))

সি পয়েন্টারগুলিতে ডেটা বা ফাংশনগুলিতে সমাবেশের ঠিকানার মতোই কাজ করে।

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

স্ট্রিংগুলি কেবল অ্যারে হয়

লাইব্রেরির ফাংশনগুলির বাইরে প্রদত্ত একমাত্র স্ট্রিং অপারেশনগুলিতে একটি অক্ষর পড়া / লেখা হয়। কোন কনক্যাট, কোনও সাবস্ট্রিং, কোনও অনুসন্ধান নেই। (স্ট্রিংগুলি নুল-টার্মিনেটেড হিসাবে সংরক্ষণ করা হয় ('\0' 8 বিট ইন্টিজারের ) বিন্যাস , পয়েন্টার + দৈর্ঘ্য নয়, তাই কোনও স্ট্রিংয়ের জন্য আপনাকে মূল স্ট্রিংয়ে নুল লিখতে হবে))

সিপিইউগুলির মাঝে মাঝে স্ট্রিং-অনুসন্ধান ক্রিয়াকলাপ দ্বারা ব্যবহারের জন্য নকশাকৃত নির্দেশাবলী থাকে তবে তবুও সাধারণত লুপে প্রতিটি নির্দেশ কার্যকর করা হয়। (বা x86 রেপ উপসর্গ সহ। সি সি x86 এর উপর ডিজাইন করা থাকলে স্ট্রিং অনুসন্ধান বা তুলনা লাইব্রেরি ফাংশন কলের পরিবর্তে একটি দেশীয় অপারেশন হতে পারে))

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


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

1
আমি সবেমাত্র "ভন নিউমান ভাষা" শব্দটি জুড়ে এসেছি ( en.wikedia.org/wiki/Von_Nemann_programming_languages )। এটি হ'ল সি কী।
পিটার কর্ডেস

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

6

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

সি হ'ল বীজগণিত কি পাটিগণিত হয় তা একত্রিত করা।

সি সমাবেশের বেসিকগুলি (প্রসেসরের ভাষা) encapsulates। সম্ভবত "সি দ্বারা সরবরাহিত ডেটা টাইপ এবং নিয়ন্ত্রণ কাঠামো বেশিরভাগ কম্পিউটারের দ্বারা সরাসরি সমর্থিত" এর চেয়ে সম্ভবত সত্যবাদী বক্তব্য


5

বিভ্রান্তিকর তুলনা থেকে সাবধান থাকুন

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

অন্যদিকে, বেশিরভাগ আধুনিক ভাষা ডেডিকেটেড রানটাইম পরিবেশের ভিতরে চলে যা আবর্জনা সংগ্রহের মতো সুবিধা সরবরাহ করে।
নেট সি কে

5

কোনও ডেটা টাইপ বা নিয়ন্ত্রণ কাঠামোর উদাহরণ রয়েছে যা সরাসরি কম্পিউটার দ্বারা সমর্থিত নয়?

সমস্ত মৌলিক ডেটা টাইপ এবং সি ভাষায় তাদের ক্রিয়াকলাপগুলি লুপিং ছাড়াই এক বা কয়েকটি মেশিন-ভাষা নির্দেশাবলীর মাধ্যমে প্রয়োগ করা যেতে পারে - এগুলি সরাসরি (কার্যত প্রতিটি) সিপিইউ দ্বারা সমর্থিত।

বেশ কয়েকটি জনপ্রিয় ডেটা টাইপ এবং তাদের ক্রিয়াকলাপের জন্য কয়েক ডজন মেশিন-ভাষা নির্দেশাবলীর প্রয়োজন হয় বা কিছু রানটাইম লুপের পুনরাবৃত্তি প্রয়োজন হয় বা উভয়ই।

অনেক ভাষায় এ জাতীয় ধরণের এবং তাদের ক্রিয়াকলাপগুলির জন্য বিশেষ সংক্ষেপিত বাক্য গঠন থাকে - সাধারণত সি তে এই জাতীয় ডেটা প্রকারগুলি ব্যবহার করতে অনেক বেশি কোড টাইপ করা প্রয়োজন।

এই জাতীয় ডেটা ধরণের এবং অপারেশনগুলির মধ্যে রয়েছে:

  • সালিসি-দৈর্ঘ্যের পাঠ্য স্ট্রিং ম্যানিপুলেশন - কনটেন্টেশন, সাবস্ট্রিং, কোনও পরিবর্তনশীলকে একটি নতুন স্ট্রিং নির্ধারণ করে অন্য কিছু স্ট্রিং ইত্যাদি দিয়ে শুরু করা (ইত্যাদি) ('s = "হ্যালো ওয়ার্ল্ড!"; এস = (এস + এস) [2: -2] পাইথনে)
  • সেট
  • নেস্টেড ভার্চুয়াল ডেস্ট্রাক্টর সহ বস্তুগুলি যেমন সি ++ এবং অন্যান্য প্রতিটি অবজেক্ট-ভিত্তিক প্রোগ্রামিং ভাষার ক্ষেত্রে
  • 2 ডি ম্যাট্রিক্স গুণ এবং বিভাগ; রৈখিক সিস্টেমগুলি সমাধান করা হচ্ছে ("সি = বি / এ; এক্স = এ \ বি" ম্যাটল্যাব এবং অনেকগুলি অ্যারে প্রোগ্রামিং ল্যাঙ্গুয়েজে)
  • নিয়মিত অভিব্যক্তি
  • পরিবর্তনশীল-দৈর্ঘ্যের অ্যারেগুলি - বিশেষত, অ্যারের শেষে একটি আইটেম সংযুক্ত করা হয়, যার জন্য (কখনও কখনও) আরও মেমরি বরাদ্দ করা প্রয়োজন requires
  • ভেরিয়েবলের মান পড়া যা রানটাইমের সময় টাইপ পরিবর্তন করে - কখনও কখনও এটি একটি ফ্লোট হয়, অন্য সময় এটি স্ট্রিং থাকে
  • সহযোগী অ্যারে (প্রায়শই "মানচিত্র" বা "অভিধান" বলা হয়)
  • তালিকা
  • অনুপাত ("(+ 1/3 2/7)" লিস্পে "13/21" দেয় )
  • স্বেচ্ছাচারিতা-নির্ভুলতা পাটিগণিত (প্রায়শই "bignums" নামে পরিচিত)
  • মুদ্রণযোগ্য উপস্থাপনায় ডেটা রূপান্তর করা (জাভাস্ক্রিপ্টে ".Tostring" পদ্ধতি)
  • স্যাচুরটিং স্থির-পয়েন্ট নম্বর (প্রায়শই এমবেড করা সি প্রোগ্রামগুলিতে ব্যবহৃত হয়)
  • রান সময়ে টাইপ করা একটি স্ট্রিংকে মূল্যায়ন করা যেন এটি একটি এক্সপ্রেশন (অনেক প্রোগ্রামিং ভাষায় "eval ()")।

এই সমস্ত ক্রিয়াকলাপের জন্য কয়েক ডজন মেশিন-ভাষা নির্দেশাবলীর প্রয়োজন বা প্রায় প্রতিটি প্রসেসরে কিছু রানটাইম লুপ পুনরায় করা প্রয়োজন।

কয়েকটি জনপ্রিয় নিয়ন্ত্রণ কাঠামোগুলির জন্যও কয়েক ডজন মেশিন-ভাষা নির্দেশাবলী বা লুপিংয়ের প্রয়োজন:

  • বন্ধ
  • continuations
  • ব্যতিক্রম
  • অলস মূল্যায়ন

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

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

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


আপনার লিস্পের বাস্তবায়ন যদি (+ 1/3 2/7) 3/21 হিসাবে মূল্যায়ন করে তবে আমার মনে হয় আপনার অবশ্যই একটি সৃজনশীল বাস্তবায়ন থাকতে হবে ...
রবার্টবি

4

অন্তর্নির্মিত ডেটা প্রকারগুলি কী কী C? তারা ভালো জিনিস হয় int, char, * int, float, অ্যারে ইত্যাদি ... এই ধরনের তথ্য CPU- র বোঝা করছে। সিপিইউ জানে কীভাবে অ্যারেগুলির সাথে কাজ করতে হয়, কীভাবে পয়েন্টারকে ডিফারেন্স করতে হয় এবং কীভাবে পয়েন্টার, পূর্ণসংখ্যা এবং ভাসমান পয়েন্ট সংখ্যাগুলিতে পাটিগণিত সম্পাদন করতে হয়।

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


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

@ এসএমএলটার হ্যাঁ, তবে আইওস্ট্রিম ইত্যাদির মতো স্ট্যান্ডার্ড লাইব্রেরি ক্লাসের আসল পদ্ধতিগুলি সরাসরি সংকলক দ্বারা সমর্থিত না হয়ে লাইব্রেরির ফাংশন। যাইহোক, উচ্চ স্তরের ভাষাগুলি তারা সম্ভবত এটির তুলনা করছিল সি ++ নয়, তবে ফোরট্রান এবং পিএল / আইয়ের মতো সমসাময়িক ভাষা ছিল।
র্যান্ডম 832

1
ভার্চুয়াল সদস্য ফাংশন সহ সি ++ ক্লাসগুলি কেবল স্ট্রাস্টে একটি অফসেটের চেয়ে অনেক বেশি অনুবাদ করে।
পিটার কর্ডেস

4

এটি কম্পিউটারের উপর নির্ভর করে। পিডিপি -11-তে, যেখানে সি আবিষ্কার হয়েছিল, longখুব কম সমর্থন করা হয়েছিল (এমন একটি alচ্ছিক অ্যাড-অন মডিউল ছিল যা আপনি কিনতে পারেন যা কিছু সমর্থন করে, তবে সমস্ত কিছু নয়, 32-বিট ক্রিয়াকলাপ)। মূল আইবিএম পিসি সহ যে কোনও 16-বিট সিস্টেমে বিভিন্ন ডিগ্রির ক্ষেত্রে এটি একই। এবং তেমনিভাবে 32-বিট মেশিনে বা 32-বিট প্রোগ্রামগুলিতে 64-বিট ক্রিয়াকলাপের জন্য, যদিও কে অ্যান্ড আর বইয়ের সময় সি ভাষার কোনও 64-বিট অপারেশন ছিল না। এবং অবশ্যই ৮০ এবং 90 এর দশকে অনেকগুলি সিস্টেম রয়েছে [386 এবং কিছু 486 প্রসেসর সহ] এবং এমনকী কিছু এমবেডেড সিস্টেমও আজ সরাসরি ভাসমান পয়েন্ট গণিত ( floatবা double) সমর্থন করে না ।

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

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

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


3

বিবৃতিটির সহজ অর্থ হ'ল সিতে থাকা ডেটা এবং নিয়ন্ত্রণ কাঠামোগুলি মেশিন-ভিত্তিক।

এখানে দুটি বিষয় বিবেচনা করতে হবে। একটি হ'ল সি ভাষার একটি সংজ্ঞা থাকে (আইএসও স্ট্যান্ডার্ড) যা কীভাবে ডাটা টাইপগুলি সংজ্ঞায়িত করা যায় সেটিতে অক্ষাংশের অনুমতি দেয়। এর অর্থ সি ভাষার প্রয়োগগুলি মেশিনের জন্য উপযুক্ত । সি সংকলকটির ডেটা টাইপগুলি মেশিনে যা উপলব্ধ তা মেলে যা সংকলক লক্ষ্য করে, কারণ ভাষাটির জন্য এটির অক্ষাংশ রয়েছে। যদি কোনও মেশিনে ৩ b বিটের মতো একটি অস্বাভাবিক শব্দের আকার থাকে তবে টাইপ করুন intবা longএটি অনুসারে তৈরি করা যেতে পারে। এমন প্রোগ্রাম যা ধরে intনিলে ঠিক 32 টি বিটস ভেঙে যায়।

দ্বিতীয়ত, এই ধরনের বহনযোগ্যতার সমস্যার কারণে, দ্বিতীয় প্রভাব রয়েছে। একরকম, কে অ্যান্ড আর-তে বিবৃতিটি এক ধরণের স্ব-পরিপূর্নত ভবিষ্যদ্বাণীতে পরিণত হয়েছে বা সম্ভবত বিপরীতে। এটি বলতে গেলে, নতুন প্রসেসরের বাস্তবায়নকারীগণ সি কমপিলারগুলিকে সমর্থন করার জন্য প্রগা need় প্রয়োজন সম্পর্কে সচেতন এবং তারা জানেন যে "সি প্রসেসরটি 80386 এর মত দেখতে প্রতিটি প্রসেসরের মতো দেখায়" প্রচুর সি কোড রয়েছে। আর্কিটেকচারগুলি সি এর সাথে মাথায় রেখে তৈরি করা হয়েছে: এবং কেবল সিটিকেই নয়, সি সি বহনযোগ্যতা সম্পর্কেও সাধারণ ভুল ধারণা রয়েছে ceptions আপনি কেবল 9 বিট বাইট বা সাধারণ উদ্দেশ্যে যা কিছু ব্যবহার করতে পারেন তা দিয়ে কোনও মেশিন প্রবর্তন করতে পারবেন না। প্রোগ্রাম যে ধরণের যে অনুমানcharঠিক 8 বিট বিস্তৃত হবে। কেবল পোর্টেবিলিটি বিশেষজ্ঞদের দ্বারা লিখিত কিছু প্রোগ্রাম কাজ করতে থাকবে: সম্ভবত যুক্তিসঙ্গত প্রচেষ্টা সহ একটি সরঞ্জামচেন, কার্নেল, ব্যবহারকারীর স্থান এবং দরকারী অ্যাপ্লিকেশনগুলির সাথে একটি সম্পূর্ণ সিস্টেম একসাথে টানতে যথেষ্ট নয়। অন্য কথায়, সি টাইপগুলি হার্ডওয়্যার থেকে যা পাওয়া যায় তার মতো দেখাচ্ছে কারণ হার্ডওয়্যারটি অন্য কোনও হার্ডওয়্যারের মতো দেখতে তৈরি করা হয়েছিল যার জন্য অনেকগুলি ননপোর্টেবল সি প্রোগ্রাম লেখা হয়েছিল।

কোনও ডেটা টাইপ বা নিয়ন্ত্রণ কাঠামোর উদাহরণ রয়েছে যা সরাসরি কম্পিউটার দ্বারা সমর্থিত নয়?

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

নিয়ন্ত্রণ কাঠামো বেশিরভাগ মেশিনের ভাষায় সরাসরি সমর্থিত নয়: প্রথম শ্রেণির ধারাবাহিকতা; coroutine / থ্রেড; জেনারেটরের; ব্যতিক্রম হ্যান্ডলিং.

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

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

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

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


2

বিষয় যেমন

  • প্রায় সমস্ত কার্যকরী ভাষায় ব্যবহৃত তালিকাগুলি

  • ব্যতিক্রমসমূহ

  • সহযোগী অ্যারে (মানচিত্র) - যেমন পিএইচপি এবং পার্ল অন্তর্ভুক্ত।

  • আবর্জনা সংগ্রহ

  • ডেটা টাইপ / নিয়ন্ত্রণ কাঠামো অনেক ভাষায় অন্তর্ভুক্ত, তবে সরাসরি সিপিইউ দ্বারা সমর্থিত নয়।


2

প্রসেসরের নির্দেশ সেটটিতে দক্ষতার সাথে ম্যাপিং হিসাবে সরাসরি সমর্থন করা উচিত।

  • পূর্ণসংখ্যার ধরণের জন্য সরাসরি সমর্থন হ'ল নিয়ম, দীর্ঘ (বর্ধিত গাণিতিক রুটিনের প্রয়োজন হতে পারে) এবং সংক্ষিপ্ত আকারগুলি (মাস্কিংয়ের প্রয়োজন হতে পারে) ব্যতীত rule

  • ভাসমান-পয়েন্ট ধরণের জন্য সরাসরি সহায়তার জন্য একটি এফপিইউ উপলব্ধ থাকে।

  • বিট ক্ষেত্রগুলির জন্য সরাসরি সমর্থন ব্যতিক্রম।

  • স্ট্রাক্টস এবং অ্যারেগুলির জন্য ঠিকানা গণনা প্রয়োজন, কিছুটা সরাসরি সমর্থিত।

  • পয়েন্টারগুলি সর্বদা প্রত্যক্ষভাবে পরোক্ষ ঠিকানার মাধ্যমে সমর্থিত হয়।

  • Goo / if / while / for / do সরাসরি শর্তহীন / শর্তাধীন শাখা দ্বারা সমর্থিত।

  • একটি জাম্প টেবিল প্রযোজ্য হলে স্যুইচ সরাসরি সমর্থিত হতে পারে।

  • স্ট্যাক বৈশিষ্ট্যগুলির মাধ্যমে ফাংশন কলগুলি সরাসরি সমর্থিত।

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