സി (പ്രോഗ്രാമിങ് ഭാഷ)

പ്രോഗ്രാമിങ് ഭാഷ
(സി എന്ന താളിൽ നിന്നും തിരിച്ചുവിട്ടതു പ്രകാരം)

ഒരു രീതി-അധിഷ്ഠിത(procedure-oriented), പൊതു ഉപയോഗ (general purpose) പ്രോഗ്രാമിങ് ഭാഷയാണ് സി (C Programming Language). 1972 - ൽ ബെൽ‌‌ലാബിലെ ഡെന്നിസ് റിച്ചിയാണ്‌ സി വികസിപ്പിച്ചെടുത്തത്. അദ്ദേഹം തന്നെ വികസിപ്പിച്ച യുണിക്സ് ഓപ്പറേറ്റിങ് സിസ്റ്റത്തിൽ ഉപയോഗിക്കാനായിരുന്നു സി നിർമ്മിക്കപ്പെട്ടത്. സിയുടെ വികസന കാലം മുതലിങ്ങോട്ട് ഒരുപാട് പ്രോഗ്രാമിങ് ഭാഷകളെ സ്വാധീനിക്കാൻ ഇതിനായിട്ടുണ്ട്. ഏറ്റവും ജനപ്രീതി നേടിയ പ്രോഗ്രാമിങ് ഭാഷ എന്ന സ്ഥാനവും സി നേടിയെടുത്തു.[അവലംബം ആവശ്യമാണ്] ഇന്നും സിസ്റ്റം, ആപ്ലിക്കേഷൻ പ്രോഗ്രാമിങ് രംഗത്ത് സി ഉപയോഗിക്കപ്പെട്ടുവരുന്നു. ഡിസൈൻ പ്രകാരം, സാധാരണ മെഷീൻ നിർദ്ദേശങ്ങളിലേക്ക് കാര്യക്ഷമമായി മാപ്പ് ചെയ്യുന്ന നിർമ്മാണങ്ങൾ സി നൽകുന്നു. അസംബ്ലി ഭാഷയിൽ മുമ്പ് കോഡ് ചെയ്ത ആപ്ലിക്കേഷനുകളിൽ സി ഉപയോഗിച്ചു വരുന്നു. അത്തരം ആപ്ലിക്കേഷനുകളിൽ ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളും കമ്പ്യൂട്ടർ ആർക്കിടെക്ചറുകൾക്കായുള്ള വിവിധ ആപ്ലിക്കേഷൻ സോഫ്‌റ്റ്‌വെയറുകളും ഉൾപ്പെടുന്നു, അവ സൂപ്പർ കമ്പ്യൂട്ടറുകൾ മുതൽ പിഎൽസികൾ, എംബഡഡ് സിസ്റ്റങ്ങൾ വരെയുള്ളവയിൽ സിയുടെ ഉപയോഗം കണ്ടെത്താൻ സാധിക്കും.

സി
The C Programming Language logo.svg
ശൈലി:Multi-paradigm: imperative (procedural), structured
പുറത്തുവന്ന വർഷം:1972; 49 years ago (1972)[1]
രൂപകൽപ്പന ചെയ്തത്:Dennis Ritchie
വികസിപ്പിച്ചത്:Dennis Ritchie & Bell Labs (creators); ANSI X3J11 (ANSI C); ISO/IEC JTC1/SC22/WG14 (ISO C)
ഡാറ്റാടൈപ്പ് ചിട്ട:Static, weak, manifest, nominal
പ്രധാന രൂപങ്ങൾ:K&R C, GCC, Clang, Intel C, C++Builder, Microsoft Visual C++, Watcom C
വകഭേദങ്ങൾ:Cyclone, Unified Parallel C, Split-C, Cilk, C*
സ്വാധീനിക്കപ്പെട്ടത്:B (BCPL, CPL), ALGOL 68,[2] assembly, PL/I, FORTRAN
സ്വാധീനിച്ചത്:Numerous: AMPL, AWK, csh, C++, C--, C#, Objective-C, D, Go, Java, JavaScript, Julia, Limbo, LPC, Perl, PHP, Pike, Processing, Python, Rust, Seed7, Vala, Verilog (HDL),[3] Nim, Zig
വെബ് വിലാസം:www.iso.org/standard/74528.html
www.open-std.org/jtc1/sc22/wg14/
സി എന്ന വാക്കാൽ വിവക്ഷിക്കാവുന്ന ഒന്നിലധികം കാര്യങ്ങളുണ്ട്. അവയെക്കുറിച്ചറിയാൻ സി (വിവക്ഷകൾ) എന്ന താൾ കാണുക. സി (വിവക്ഷകൾ)

തത്ത്വംതിരുത്തുക

സി സിസ്റ്റം നിർമ്മിക്കാനായി ഉപയോഗിക്കുന്ന ഒരു രീതി-അധിഷ്ഠിത പ്രോഗ്രാമിംഗ് ഭാഷയാണ്‌. താരതമ്യേന ലളിതമായ ഒരു കമ്പൈലർ ഉപയോഗിച്ച് സമാഹരിക്കുക (compiling), മെമ്മറിയിലേക്ക് താഴ്ന്ന തലത്തിലുള്ള പ്രവേശനം (low level access) ലഭ്യമാക്കുക, മെഷീൻ ഇൻസ്റ്റ്റക്ഷനുകളിലേക്ക് സമർത്ഥമായി സമ്മേളിക്കുവാൻ പറ്റിയ ഭാഷാഘടകങ്ങൾ (language constructs), ഏറ്റവും കുറച്ചു റൺ-സമയ പിന്തുണ (run-time support)- ഇവയാണ്‌ സിയുടെ രൂപകല്പനയിലെ ലക്ഷ്യങ്ങൾ. അതുകൊണ്ട് തന്നെ അസെംബ്ലി ഭാഷയ്ക്ക് പകരമായി പല സാഹചര്യങ്ങളിലും സി ഉപയോഗിക്കാം.

ഒരു യന്ത്ര-സ്വതന്ത്ര പ്രോഗ്രാമിംഗ് ഭാഷ (machine-independent) കൂടിയാണ്‌ സി. നന്നായി എഴുതിയ ഒരു സി പ്രോഗ്രാമിനെ വളരെ കുറച്ചു മാറ്റങളോടെയോ മാറ്റങ്ങൾ ഇല്ലാതെ തന്നെയുമോ പല കമ്പ്യൂട്ടർ പ്ലാറ്റ്ഫോമുകളിലും ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളിലും സമാഹരിക്കാൻ (compile) സാധിക്കും.

സവിശേഷതകൾതിരുത്തുക

സിയുടെ പൂർവ്വികന്മാരെ അപേക്ഷിച്ച് ശക്തവും ലളിതവുമായ സിന്റാക്സാണ് ഇതിന്റെ ഏറ്റവും വലിയ സവിശേഷത. ഏതാണ്ട്‌ മുപ്പതോളം മാത്രം വരുന്ന നിർദ്ദേശ വാക്കുകൾ (Keywords) ഉപയോഗിച്ചാണ് സിയിൽ പ്രോഗ്രാമുകൾ എഴുതുന്നത്. ഈ പ്രോഗ്രാമുകൾ യന്ത്രഭാഷയിലേക്ക് (Machine Language) മാറ്റുമ്പോൾ സി ഏറ്റവും കുറവ് യന്ത്രഭാഷാ നിർദ്ദേശങ്ങളേ ഉപയോഗിക്കുന്നുള്ളു. ഇതിന്റെ ഫലമായി നിർമ്മിക്കപ്പെടുന്ന പ്രോഗ്രാമിന് വേഗത കൂടുതലായിരിക്കും.

കമ്പ്യൂട്ടർ പ്രോഗ്രാമിന്റെ അടിസ്ഥാന ഘടകങ്ങളിലൊന്നായ ഡേറ്റാ സ്ട്രൿചറുകൾനിർമ്മിക്കുവാനും ഉപ‌യോഗിക്കുവാനും ഈ ഭാഷയിൽ എളുപ്പത്തിൽ സാധിക്കും. കമ്പ്യൂട്ടർ മെമ്മറിയുടെ ഏറ്റവും ഫലവത്തായ ഉപയോഗവും സിയുടെ സവിശേഷതയാണ്.

സി ഒരു പോർട്ടബിൾ ഭാഷയാണ്. അതായത്, സിയുടെ തനത് നിർദ്ദേശക്കൂട്ടങ്ങൾ ഉപയോഗിച്ച് എഴുതിയ ഒരു പ്രോഗ്രാം മറ്റു പ്ലാറ്റ്ഫോമുകളിലേക്ക് എളുപ്പത്തിൽ മാറ്റാൻ സാധിക്കും (ഉദാഹരണത്തിന്, വിൻ‌ഡോസ് ഓപ്പറേറ്റിങ് സിസ്റ്റത്തിൽ നിന്നും യൂണിക്സിലേക്കും തിരിച്ചും). ഇതിന് മാറ്റുവാനുദ്ദേശിക്കുന്ന പ്ലാറ്റ്ഫോമിന് അനുയോജ്യമായ കംപൈലർ പ്രോഗ്രാമുകൾ ആവശ്യമാണ്. ഇന്ന് ഏതാണ്ടെല്ലാ പ്ലാറ്റ്ഫോമിലും ഉപയോഗ്യമായ സി കംപൈലർ പ്രോഗ്രാമുകൾ നിർമ്മിക്കപ്പെട്ടിട്ടുണ്ട്.

  • നെസ്റ്റിങ് (ഒന്നിന്റെ ഉള്ളിൽ മറ്റൊന്നിനെ‌‌ ഉൾ‍പ്പെടുത്തുക അനുവദിക്കാത്ത function നിർവചനങ്ങൾ.
  • പകുതി ദുർബലമായ തരംതിരിക്കൽ (weak typing). ഉദാഹരണത്തിന്‌ ക്യാരക്ട്രർ variables integers ആയും ഉപയോഗിക്കാം.
  • തരംതിരിച്ച (typed) പോയിന്ററുകളെ യന്ത്ര വിലാസങ്ങളിലേക്ക് മാറ്റുന്നതിനായി താഴ്ന്ന തലത്തിലുള്ള മെമ്മറി പ്രവേശനം
  • പോയിന്റർ കണക്കു പ്രകാരം നിർവചിച്ചിരിക്കുന്ന അറെ (array) ഇൻഡ്ക്സുകൾ
  • മാക്രൊ നിർവചനത്തിനു വേണ്ടി പ്രിപ്രോസസ്സർ, സോഴ്സ് കോഡ് ഉൾപ്പെടുത്താനുള്ള സൗകര്യം, നിബന്ധനകൾക്ക് വിധേയമായിട്ടുള്ള സമാഹരണം(conditional compilation)
  • 30 കീവേഡുകൾ

ചരിത്രംതിരുത്തുക

ആദ്യകാല ചരിത്രംതിരുത്തുക

1969-1972 കാലഘട്ടത്തിലാണ് സിയുടെ നിർമ്മാണത്തിന് തുടക്കമിട്ടത്. സിയുടെ നിർമ്മാണഘട്ടത്തിൽ അക്കാലത്തുണ്ടായിരുന്ന ‘ബി’ എന്ന പേരിലറിയപ്പെട്ടിരുന്ന മറ്റൊരു പ്രോഗ്രാമിങ് ഭാഷ നിർണ്ണായക സ്വാധീനം ചെലുത്തിയിട്ടുണ്ട്. ഇതിനാലാണത്രെ താൻ നിർമ്മിച്ച പുതിയ ഭാഷയ്ക്ക് ‘സി’ എന്ന പേരിടാൻ ഡെന്നിസ് റിച്ചിയ്ക്ക് പ്രചോദനമായത്. ഇംഗ്ലീഷ് അക്ഷരമാലയിൽ ‘ബി’ കഴിഞ്ഞ്‌ ‘സി’ ആണല്ലൊ വരുന്നത്.

യുണിക്സ് ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റത്തിന്റെ നിർമ്മാണവുമായി സിയുടെ തുടക്കത്തിന്‌ ബന്ധമുണ്ട്. യുണിക്സ് യഥാർത്ഥത്തിൽ പിഡിപി-7 കമ്പ്യൂട്ടരിനു വേണ്ടി കെൻ തോംസണും ഡെന്നിസ് റിച്ചിയും ചേർന്ന് അസെംബ്ലി ഭാഷയിൽ വികസിപ്പിച്ചെടുത്തതാണ്‌. അത് പിഡിപി-11ലേക്ക് പോർട്ട് ചെയ്യാനായി ബി ഉപയോഗിച്ചപ്പോൾ, ബിയുടെ പല പരിമിതികളും അവർ മനസ്സിലാക്കി. ഇത് സിയുടെ ആദ്യകാല വികസനത്തിന്‌ വഴിതെളിച്ചു.

1973 ആയപ്പോഴേക്കും യുണിക്സ് കെർണൽ മുഴുവനായി സിയിൽ മാറ്റി എഴുതപ്പെട്ടിരുന്നു. അങ്ങനെ അസെംബ്ലി ഭാഷയിലല്ലാതെ എഴുതപ്പെടുന്ന ആദ്യ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റ്ങ്ങളിൽ ഒന്നായി യുണിക്സ് മാറി.

ആൻ‌സി സി (ANSI C)തിരുത്തുക

സി ഭാഷ ഒട്ടേറെ തവണ പരിഷ്കരിക്കപ്പെട്ടിട്ടുണ്ട്‌. 1970 അവസാനമായപ്പോഴേക്കും മൈക്രോ‌കമ്പ്യൂട്ടറുകളിലെ പ്രോഗ്രാമിംഗ് ഭാഷ എന്ന നിലയിൽ ബേസിക്(BASIC) ഭാഷയെ സി കടത്തി വെട്ടിയിരുന്നു. 1980-കളിൽ IBM കമ്പനി തങ്ങളുടെ ആവശ്യങ്ങൾക്കായി സി ഭാഷയെ തിരഞ്ഞെടുത്തു. സിയുടെ വർദ്ധിച്ചു വരുന്ന ഉപയോഗം കണക്കിലെടുത്ത് 1983-ൽ സി ഭാഷയെ ഏകീകരിക്കുക എന്ന ലൿഷ്യത്തോടെ അമേരിക്കൻ നാഷനൽ സ്റ്റാൻ‌ഡേർഡ്‌സ് ഇൻസ്റ്റിറ്റ്യൂട്ട് ഒരു കമ്മിറ്റി രൂപവൽക്കരിച്ചു. ഈ കമ്മിറ്റി ഏകീകരിച്ച സി ഭാഷയുടെ പതിപ്പാണ് ആൻ‌സി സി (ANSI C) എന്ന പേരിലറിയപ്പെടുന്നത്.

ഘടനതിരുത്തുക

കീ വേർഡുകൾതിരുത്തുക

സി പ്രോഗ്രാമ്മിങ് ഭാഷയിൽ 32 കീ വേർഡുകൾ ഉണ്ട്.

വിമർശനങ്ങൾതിരുത്തുക

ഇന്ന് കമ്പ്യൂട്ടർ രംഗത്തെ പ്രശ്ന നിർദ്ധാരണത്തിന് സി മതിയാവില്ലെന്നാണ് വിമർശകരുടെ ആരോപണം. തുടക്കത്തിൽ ഉപകാരപ്രദങ്ങളായ ഒട്ടേറെ സംരംഭങ്ങൾക്ക് വഴിതെളിച്ചെങ്കിലും സൂക്ഷിച്ച് ഉപയോഗിച്ചില്ലെങ്കിൽ അപകടകരമായ ഫലങ്ങൾ ഉണ്ടാവുക അല്ലെങ്കിൽ ഉദ്ദേശിച്ച ഫലം ലഭിക്കാതിരിക്കുക എന്നിവ സി ഉപയോഗിച്ച് എഴുതിയ പ്രോഗ്രാമുകൾ കൊണ്ട് ഉണ്ടാകാം എന്ന് വിമർശകർ ചൂണ്ടിക്കാട്ടുന്നു. സി ഒരു വസ്തുതാധിഷ്ഠിത കമ്പ്യൂട്ടർ പ്രോഗ്രാമിങ് ഭാഷയല്ല, അതിനാൽ അത്യധികം സങ്കീർണ്ണമായ പ്രോഗ്രാമുകൾ സിയിൽ നിർമ്മിച്ചെടുക്കുക ഏതാണ്ട്‌ അസാധ്യം തന്നെയാണെന്നാണ് വിമർശകരുടെ പക്ഷം.

മറ്റു കമ്പ്യൂട്ടർ ഭാഷകൾതിരുത്തുക

സി ഭാഷ സ്വാധീനം ചെലുത്തിയ മറ്റു കമ്പ്യൂട്ടർ ഭാഷകൾ ഇവയാണ്.

അവലംബംതിരുത്തുക

  1. Ritchie (1993): "Thompson had made a brief attempt to produce a system coded in an early version of C—before structures—in 1972, but gave up the effort."
  2. Ritchie (1993): "The scheme of type composition adopted by C owes considerable debt to Algol 68, although it did not, perhaps, emerge in a form that Algol's adherents would approve of."
  3. "Verilog HDL (and C)" (PDF). The Research School of Computer Science at the Australian National University. June 3, 2010. മൂലതാളിൽ (PDF) നിന്നും November 6, 2013-ന് ആർക്കൈവ് ചെയ്തത്. ശേഖരിച്ചത് August 19, 2013. 1980s: ; Verilog first introduced ; Verilog inspired by the C programming language
"https://ml.wikipedia.org/w/index.php?title=സി_(പ്രോഗ്രാമിങ്_ഭാഷ)&oldid=3695214" എന്ന താളിൽനിന്ന് ശേഖരിച്ചത്