July 21, 2013

C ද , JAVA ද වැඩිය හොඳ ??...!!




      එදා programming language පාඩම කියෙව්වනේ??? ඔන්න එහෙනම් පොරොන්දු උන විදියටම අද මන් කියල දෙන්න යන්නේ මන් බද කාට පුරා අපේ සෙට් එකෙන් ගුටි කන පාඩම...!!!
C     vs      JAVA

හරි එහෙනම් පාඩම පටන්ගමු. ඊට කලින් මන් කලින් දවසේ කිව්වා ඒවායේ පොඩි සාරාංශයක් කියන්නම්.මොකද එක අද ඕනේ වෙනවා 


රූප සටහන දැක්කම පාඩම මතක් වෙනවනේ ??? මිනිස්සු මුලින්ම හැදුවේ machine code කියන programming language එක ඊළගට එකම ටික modify කරලා හදාගත්ත assembly programming language එක, ඊළගට ඉතිහාසය උඩි යටිකුරු කරලා හැදුව human readable නැත්තම් මිනිස්සුන්ට තේරෙන භාෂාවෙන් code ගහන්න පුළුවන් High level language එක.

අද ඉදන් අපි කතා කරන්නේ මේ high level language එක ගැන. high level language එකේ ඇතිඋන languages ගොඩක් තියනවා ඒ අතරේ වැදගත්තම 2ක් තමා C කියන programming language එකයි Pascal කියන programming language එකයි.

                       C කියන programming language එක එක හැදුවේ Dennis Ritchie. ඒ 1972 දී. ඒවගේමයි pascal programming language එක හැදුවේ 1970දි Niklaus Wirth විසින් මේ භාෂා 2ක ගොඩක් සමානයි ඒවගේමයි 2කම ඒකාලේ හැටියට ගොඩක් හොඳ language 2ක්. එත් මේ 2ක අතරේ තිව්නා ලොකු වෙනසක් ඒ තමා, c කියන්නේ system programming type එකේ language එකක්එත් pascal කියන්නේ object oriented type එකේ මුලික අවදියේ programming language එකක්.  අන්න ඒ නිසා මේ 2කෙම තියන හොද දේවල් එකතු කරලා මිනිස්සු හැදුව C++ මේක system programming සහ object oriented programming කියන type 2කෙම අභාෂය ලබාගත්ත කවලම් මැල්ලුමක්. එත් මේ කවලම් මැල්ලුම කොයිතරම් හොඳට මිනිස්සුන්ට හිතට ඇල්ලුවද කිව්වොත් තවමත් මිනිස්සු C++ කියන language එක යොදාගන්නවා code කරන්න


         ඒ කොහොම උනත් මිනිස්සුන්ට ටික කලක් යනකොට අලුත් වෙනසක් ඕනේ උනා. අන්න ඒ වෙනස ඇතිකරේ James Gosline. ඒ 1995 දී JAVA කියන සම්පුර්ණයෙන්ම object oriented සංකල්පය මතම නිර්මාණය උන programming language එක නිර්මාණය කරලා. එදා ඉදන් අද වෙනකම් JAVA කියන භාෂාව මිනිස්සු භාවිත කරනවා code කරන්න. මොකද java කියන්න code කරන්න ගොඩක් පහසු language  එකක් අන්න එකයි ගොඩක අය JAVA යොදාගෙන program හදන්න පෙලබිලා ඉන්නේ.java වල මේ තත්වයත් එක්ක James Gosline, JAVA වල පැවැත්ම ඉස්සරහට ගෙනියන්න හැදුව Sun-microsystem කියන ආයතනය. පස්සේ කලෙකදී එක ORACLE සමගම විසින් මිලදී අරන් දැන් අපි හැමෝම අසාවෙන් code කරන java වල අයිතිකාරයා තමා ORACLE ආයතනය. අද වෙනකොට JAVA කොයිතරම් ජනප්‍රියද කිව්වොත් java SE,EE ,ME විදියට progrm අවශ්‍ය වන හැම තැනකටම program හදන්න පුළුවන් විදියට edition 3ක් ලබාදීලා තියනවා. අන්න ඒ නිසයි අපේ machine එකේ program හදන්න , වෙබ් site පිටු හදන්න විතරක් නෙමෙයි අපේ 4න් 1ක ඇතුලටත් java වලට රිංගගන්න පුළුවන් වෙලා තියනවා.

              java ඒ තරම් ලොකු ජනප්‍රියත්වයක් ලබගන්නකොට C++නුත් නිකම් ඉදියේ නෑ. 2001දේ C# කියල තවත් අලුත් programming language එකක් එලි දැක්වුණා. මේ C# කියන language එක සම්පුර්ණයෙන්ම වගේ system programming සංකල්පය මත නිර්මාණය උන එකක්.



               C++ , C# කියන programming language වලට වඩා JAVA කියන භාෂාව මිනිස්සු අතරට ගියපු එකට ප්‍රදානම හේතුව උනේ platform dependancy කියන එක. කට අරුණ නේ.............????

හරි මොකක්ද මේ programming language වල platform dependancy කියන්නේ?????

අපි එක එක්කෙනා භාවිතා කරන O/S නැත්තම් operating system එකිනෙකට වෙනස්. මන් windows භාවිතා කරනකොට තව කෙනෙක් Linux භාවිතා කරාවි තව කෙනෙක් macOS , තවත් කෙනෙක් Ubuntu නැත්තම් fedora කියල එකී මෙකි නොකී O/S භාවිත කරනවනේ... දැන් මන් මගේ ගාව තියන windows machine එකේ ඉදන් මොකක් හරි program එකක් හදල මගේ යාලුවෙක්ට දෙනවා

“ මචන් මන් software එකක් හැදුව..! බලපං මගේ වැඩ කොහොමද කියල”

යාලුවත් ඉතින්              “ කෝ දියන් බලන්න”

 කියල ගෙදර අරන් ගෙහින් දාලා බලනවා... ටික වෙලාවකින් මට call එකක් එනවා
 “ අඩෝ මොකක්ද බන් මේ මගුල වැඩ කරන්නේ නැනේ ... “ කියල

මොකක්ද මේ උනේ....???????
එතකොට මන් යාලුවගෙන් අහනවා “ උබේ O/S එක මොකක්ද කියල “ බලනකොට ඌ ගව තියෙන්නේ Ubuntu O/S එක දාපු machine එකක්. 

මේ ප්‍රශ්නේ ට තමා platform dependancy කියල කියන්නේ C++, C# කියන language වල තියන ප්‍රධානම අව්ල තමා මේ. අපි බලමු ඇයි මෙහෙම් උනේ කියල





                      මන් ගාව තියනවා windows O/S එක තියන machine එකක්. ඒ machine එකේ ඉදන් C++ කියන programming language එක භාවිතා කරලා calc කියල program එකක් ලියනවා. ( අපි C++, C# භාවිත කරලා program එකක් ලිව්වම එක text file එකක් නෙමෙයි program එකක් සදහා ලිව්ව එකක් කියල හදුනාගන්න දීපු file extention එක තමා “ .cpp “ ඒ නිසා අපි අපිට තේරෙන භාෂාවෙන් ලියපු මේ calc.cpp කියන file එකට කියනවා අපේ program එකේ source code file එක කියල)

ඊළගට අර මන් කිව්වනේ programming language එකත් එක්ක එනවා කියලා compilar කෙනෙක් උ මොකක්ද කරන්නේ අපි අපිට තේරෙන භාෂාවෙන් ලියපු source code file එක O/S එකේ ඉන්න C.I ( command interpretor) කියවගන්න පුළුවන් භාෂාවකට හරවලා හදනවා calc.exe කියන file එක

ඊළගට මන් කරන්නේ මන් ගව තියන calc.exe කියන file එක අරන් පොඩි පරීක්ෂණයක් කරනවා 




            හ්ම්ම්ම්ම්ම්ම්ම්.......!! අපි අර source code file එක compile කරපු machine එකේ තිවනේ windows O/S එක නිසා මේ windows machine එකෙත් අර calc.exe එක run උනා. එත් linux O/S එක තිවන machine එකේ run උනේ නෑ. ඒ කියන්නේ මෙතන හුටපටේ තියෙන්නේ O/S එක මත. එහෙම නේද???
ඔව් එක හරි. දැන් අපි බලමු ඇයි මෙහෙම් උනේ කියල.

මුලින්ම බලමු මේ program එක run වෙන විදිය





                   අපි C++, C# වගේ platform dependent language එකක් පාවිච්චිකරලා program එකක් ලියලා compile කරන කොට එයා ඒ source code file එක compile කරන්නේ O/S එක ඇතුලේ ඉන්න Cammand interpretor ට තේරුම්ගන්න පුළුවන් වෙන්න බව අපි දන්නවනේ. එත් එක එක O/S ඇතුලේ ඉන්න C.I. ල එකිනෙකට වෙනස්.  ඒ කිව්වේ හිතන්නකෝ මෙහෙම  C.I. ල හරියට භාෂා 2ක් දන්න translators ල වගේ එයාලා දන්නේ processor එකත් එක්ක කතාකරන භාෂාවයි තව එයාලගේ මව් භාෂාවයි. දැන් මන් windows  machine එකේ ඉදන් calc.cpp එක compile කරනකොට එක compile වෙන්නේ windows C.I. ගේ මව් භාෂාව උන english වලින්. ඒ නිසා දැන් අපේ calc.exe එක ලියල තියෙන්නේ english වලින් දැන් මන් මේක ගෙහින් දානවා linux machine එකකට linux C.I.  කොන්දේ බැදපු චීනෙක්. මන් ඌට මන් ලග english වලින් ලියල තියන calc.exe එක දීල මේක කියවල වැඩේ කරපන් කිව්වට ඌට ඒක කියවගන්න බෑනේ.... අන්න ඕක තමා හේතුව.

ඒ කියන්නේ අපි C++, C# පාවිච්චි කරලා program හදනවනම් windows වලට 1යි, linuxවලට එකයි,ubuntu වලට එකයි කියල program බර ගානක් හදන්න වෙනවා.... මල පැනල අයෙ මල පනිනවා නේද...????

මෙන්න මේක වලක්වන්න නියම සුත්තරයක් හැදුව James Gosline. ඒ තමා JAVA





කලින් වගේම මන් program එකක් ලියනවා එත් මේපාර ලියන්නේ java වලින් ( මේකේ source code file එකේ extention එක “ .java” එනිසා source code file එකේ නම “ calc.java”)
ඊළගට මන් එක compile කරනවා.ආ.!!!!!!!!!!!!!!! යකෝ ආවේ ගියපාර වගේ “. exe “ file එකක් නෙමෙයි       “ . class “ කියල file එකක්. කමක් නෑ මන් අයෙ අර යාලුවට කතා කරලා මගේ calc.class කියන file එක දෙනවා.

යාලුවත් ඉතින් දෙන්නම් උබට මේපාරත් හොඳ කින්ඩියක් කියල හිතන් ගෙදර ගෙහින් දාලා බලනවා.





ටික වෙලාවකින් call එකක් එනවා “ අඩේ බන් උබනම් සුපිරිම වැඩ කාරයෙක් බන් ....!!” හුරේ වැඩේ හරි. එකියන්නේ java වලට O/S එකෙන් බලපෑමක් නෑ. සුපිරිනේ?????? ඔව් java කියන්නේ platform independent programming language එකක්. කොහොමද එක උනේ???

අපි බලමු java program run වෙන විදිය





හරි දැන් අපිට තියනවා අපේ java source code file එක calc.java අපි දැන් එක compile කරනවා.... අපිට ලැබෙන්නේ වෙනද වගේ calc.exe එකක් එනෙයි calc.class කියල file එකක් ඇත්තම කිව්වොත් මේ calc.class කියා file එක කිසිම command interpreter කෙනෙක්ට කියවන්න බෑ. එහෙනම් අහවල් එකකටද මේක හැදුවේ???
command interpretor ට කියවන්න බැරි උනාට අපි java install කරනකොට අපිට එයාල තව program එකක් දෙනවා ඒ තමා JVM නැතම් java vertual machine. ( දැන් නම් මේක ගොඩක් O/S එක්කම එනවා. එනිසා java නොදැම්මත් java program run කරවගන්න අපිට පුළුවන්) අපි compile කරනකොට ඒ calc.class කියන file එක හැදෙන්නේ මේ JVM එකට කියවගන්න පුළුවන් භාෂාවකින්. ඒ භාෂාව තමයි byte code language එනිසා මේ calc.class file එකට අපි කියනවා byte code file. අපි දැන් මේ calc.class කියන file එක run කරනකොට වෙන්නේ මේ JVM එක අර අපේ .class file එකේ තියන instruction කියවල එකින් එක translate කරලා C.I. ට ලබා දෙනවා ( අපි මේකට කියනවා interprite කරනවා කියල) C.I. එව්වා processor එකට තේරෙන්න translate කරලා processor එකට යවනවා. මෙන්න මේ නිසා අපි java හදුන්වනකොට කියනවා java කියන්නේ compile & interpreted programming language එකක් කියල.
දැන් බලමු කොහොමද කියලා මේක platform independent වෙන්නේ කියල.
දැන් මන් compile කරලා හදාගත්තු calc.class file එක ලියල තියෙන්නේ byte code language කියන භෂාවෙන් ඒක ඕනෙම JVM එකකට කියවගන්න පුළුවන්. JVM එකටත් තේරෙන්නේ භාෂා 2යි 1ක් byte code අනික එයා install වෙන වෙලාවේ බලනවා C.I. ට පුළුවන් මොන භාෂාවද කියල. ඊළගට අන්න ඒ භාෂාව ඉගෙන ගන්නවා. දැන් අපේ JVM එකට පුළුවන් නේ අපේ calc.class file එකයි C.I. නුයි අතරේ translator විදියට වැඩකරන්න. ඉත්න් මන් මේ calc.class file එක මොන O/S එකක run කරන්න හැදුවත් ප්‍රශ්නයක් නෑ නේද???
අන්න ඒ විදියටයි JAVA කියන programming language එක platform independent උනේ...

හ්ම්ම්ම්ම්ම්ම්ම්....!!! ඔය කියපුවා එක්ක C ද java ද හොඳම කියල තීරණය කරන එක ඔයාලට බාරයි.

ඔන්න බාගෙන බලංටකෝ..................................................................................


අපි ඊළගට හමුවෙමු අපේ 1වෙනි JAVA CODING පාඩමත් එක්ක..........


July 19, 2013

C libraries සහ C standard library ගැන පොඩ්ඩක්...

මෙන්න මගේ පලවෙනි post එක ලියන්නයි යන්නෙ මං මේ blog එකේ කලින් ලියල නෑ මුලින්ම ඇවිත් ඉතින් වැඩි කතා නැතුව CSinhalen එකේ කාටත් ආයුබෝවන් කියලා C වලදී නැතුවම බැරි code කොටසක් ගැන කියන්නයි හැදුවෙ. ඔන්න මේ කියන්න යන්නෙ අපි C code එකක් ලිව්වොත් අනිවාර්යයෙන් උඩින් දාන්න වෙන #include එක ගැන.

දැන් කිව්ව code කොටස දැකල ඇතිනේ. අපි ඔය #include එකෙන් කරන වැඩේට ගැළපෙනම උදාහරණෙ තමයි java වල import statement එක. ඒකෙන් කරන්නෙ oracle හෝ sun predefined java packages and classes අපි වැඩ කරන file එකට ගෙන්වාගන්න එක. අපි C වලදීත් ඕක තමයි කරන්නෙ #include එකෙන්.


ඔන්න ඉතින් C කියන්නෙ අයිති කාරයෙක් නැති language එකක්. මේකට අයිතිකාරයෙක් වෙනුවට තියෙන්නෙ committee එකක්. ඒ committee එක තමයි C පිලිබඳ තීන්දු තීරණ ගන්න ඉන්නෙ. C ආපු ගමන්ම මේ committee එකත් ආවෙ නැති හින්දා කාලයක් C තිබුනේ C users ලා මත තමයි. එහෙම තිබුන නිසා එක එක users ලා තාම තමන්ට අවශ්‍ය විදියට library files හදාගෙන C වලට add කළා. Library එකක් කියන්නෙ programming language වලදී predefined code set එකක්. ඉතින් මෙහෙම add වෙන්න ගත්තම C වල size එක වැඩි වුණා. එකම දේ duplicate වුණා. C මහා ජරාවක් වුණා.
මෙතැනදී තමයි C committee එක හැදුනෙ. කවුරුහරි C ට ආදරේ කෙනෙක් හදන්න ඇති. ඒකෙන් වැඩක් නෑ, මේගොල්ලෝ තමයි ඊළඟට C වල තිබුන වැඩකට නැති ඒවා අයින් කරලා දාලා හොඳ, වැඩකට ඇති, internationally users ලට බෙදන්න පුළුවන් libraries ටිකක් C තුල ඉතුරුකර ගත්තෙ. අපි දැන් කලින් කිව්ව libraries මෙයාල විසින් තමා ලබාදීල තියෙන්නෙ. දැන් committee එකෙන් වැඩක් නෑ libraries ගැන බලමු.


අපි C විතරක් install කරාම අපිට ලැබෙන ප්‍රධානම එක තමයි C standard library කියන්නෙ. මේකේ තියෙන්නෙ standard operations and commands වලට අයිති වෙන දේවල් තමයි. C library එකක් ගත්තම ඒක ඇතුලේ header files තියෙනවා, නිකන් java packages ඇතුලේ classes තියෙනවා වගේ. අපි මේ header file එකේ නම තමයි include statement එකට ලබා දෙන්නෙ. එතකොට එයා standard library එකෙන් ඒ නම තියෙන file එකේ තියෙන instructions ලබා ගන්නවා.


අපි දැකල තියෙනවා C වලදී එක එක header file names, මෙන්න මේ වගේ...
stdio.h,  stdlib.h,  ctype.h,  string.h,  math.h,  time.h,  etc...

මෙන්න මේ විදියට තමයි අපි මේවා අපේ file එකට ගෙන්න ගන්නේ...
#include
අපි අපේ C code එක තුල ලියන statements අනුව අපිට include කරන්න වෙන libraries වෙනස් වෙනවා. මේවා code එකට include කර ගත්තම අපිට ඒකෙන් functions ලබා දෙනවා වැඩ කරන්න.ඒ කියන්නෙ ඉතින් අපිටම තමයි පහසුව. Functions විතරක්ම නෙමේ තියෙන්නෙ හොඳද තව macros and variables මේවා ඇතුලේ තියෙනවා, දැනට ඕන නෑ.

උදාහරණයක් විදියට ඔයා C code එකේ input and output විධාන දෙනවනම් ඒවා ගැන අපේ C file එකට කියාදෙන stdio.h (Standard input output) කියන header file එක include කරන්න ඕනි. ඒක නැතුව මෙයා දන්නේ නෑ කොහොමද ඒවා තනියම කරගන්නෙ කියලා. ඔයා ඔයාගේ C code එකේ printf(), scanf(), putchar(), gets(), fclose() වගේ ඒවා ඇතුලත් කරනවානම් stdio.h include නොකර කවදාවත් compile කරන්න බෑ. ඒ header එක නැතුව එයා ඒවා දන්නෙ නෑ.

එතකොට ඔයා string සම්බන්ධ code එකක් ලියනවනම් ඒ ගැන උදවු තියෙන්නෙ string.h එකේ, ඔයා pointers වලින් වැඩ ගනිද්දි convert කරන්න ඕනවෙන atoi(), atof(), strtod(), strtol() වගේ ඒවා තියෙන්නෙ stdlib.h file එකේ. දැන් ඉතින් C pointers ගැන දන්නෙ නැත්නම් අවුලක් කරගන්න එපා, ඒක තවත් ලොකු පාඩමක්. දැනට මේක බලාගමු.
math.h කියන්නෙ මමත් ආස කරන තව හොද header file එකක්. මේකේ ලබාදීල තියෙනවා ගොඩක් mathematical operations වලට functions. fmod(), sqrt(), log(), log10() වගේ functions ගොඩක් මේක ඇතුලේ තියෙනවා.

පහලින් තියෙනවා C standard library එකේ එක එක header files අපි include කරගන්න ඕන මොකටද කියලා. Functions වෙන වෙනම ගැන කිව්වොත් නම් මේ post එක හොදට තියෙයි. ඒක නිසා මම නවතින්න කලින් මේක දිගටම පහලට කියවන අයට functions ගැන උදව්වක් දෙනවා. හැබැයි ඉතින් මෙතන තියෙන්නෙ C standard library එකේ තියෙන ඔක්කොම headers නම් නෙමෙයි. වැදගත් වන ටිකක් විතරයි.


assert.h - Pragram එක තුල programmer සිදුකරන assumptions තහවුරු කරගැනීම කරන්නෙ මේකෙන් තමයි. මේක debugging වලට අදාලයි.
ctype.h - char පාවිච්චි කරනකොට මේක ඕනවෙනවා. මේ file එකේ තියෙන isupper(), toupper(), isalpha(), etc. වගේ functions වලින් char values check and format කරගන්න පුළුවන්.
errno.h - System errors හඳුනගෙන ඒවට අදාලව int එකක් return කරන්න මේකේ තියෙන macro වලට පුළුවන්.
float.h - Floating point values හා සම්බන්ධ functions and constants set එකක් මෙම header file එක තුල ඇතුලත් වෙනවා.
limits.h - Variable types වල limits, නැත්නම් variable properties සහිත macros මේ තුල define කරලා තියෙනවා.
locale.h - විවිධ date formats and currency ගැන මේකේ තමා විස්තර තියෙන්නෙ.
math.h - මෙහි mathematical funcions බොහොමයක් අඩංගුයි. විශේෂත්වය තමයි ඔක්කොම parameters and return types double වීම.
setjmp.h - Process එක්ක වැඩ කරද්දි භාවිතා වෙනවා.
signal.h - Execution signals සමග කටයුතු කිරීමට අවශ්‍යයි.
stdarg.h - නොදන්නා arguements ප්‍රමාණයක් ලබාදෙන ආකාරයට function ලිවීමේදී මෙය ඇතුලත් වනවා. (allows functions to accept an indefinite number of arguements) Java වල var args වගේ තමයි.
stdio.h - System input and output methods සමග වැඩ කරන්න මේක include වෙලා තියෙන්න ඕන.
stdlib.h - Random number generation, number conversion සඳහා අවශ්‍යයි.
string.h - String සමග වැඩ කරන්න මෙම library එකෙන් තමයි instructions ලබා දෙන්නෙ.
time.h - Date and time අවශ්‍ය වුනොත් system එකෙන් ඒවා ගන්න නම් මෙය ඕන වෙනවා.
stdbool.h - boolean type එකෙන් process එක control වන හැටි මෙය තුල අඩංගුයි. C වල boolean data type එකක් නැති උනත් ඒ හා සම්බන්ධ operations කරන්න පුළුවන්. උදාහරණයක් විදියට if/else C තුලදී වැඩ නෙ.
complex.h - සංකීර්ණ සංඛ්‍යා (complex numbers) handle කරන්න කියල දෙන්නෙ මෙයා.



ඔන්න ඉතින් ඔය වගේ headers ගොඩක් තියෙනවා. වෙනත් library එකක් සැලකුවොත් ඒකෙත් තව headers තියෙනවා. ඕව ඔක්කොම ඕන නෑ, හැබැයි basically ටිකක් මතක තියාගන්න නම් අනිවාර්යයෙන් ඕන. Netbeans, C-Free, CodeBlocks වගේ IDE එකක් භාවිතා කරනවානම් ඒවා coding කරන් යනකොට ඉබේම include කරලා දෙනවා. ඒත් compile error එකක් ආවම confuse වෙනවට වඩා ටිකක් මතක තියාගෙනම ඉන්න එක තමයි වාසි.


මම කියපු පොඩිම පොඩි උදව්ව විදියට මෙන්න මෙතන පහලින් දීල තියෙන ඒවට ගිහින්  C standard library එක ගැන කියවන්න. ඕන අවුලක් ආවොත් හරි තවදුරටත් දැනගන්න හිතුනොත් හරි ඒක google කරන්න. නැත්නම් comment එකක් දාලා යන්න. Admin board එකෙන් දැක්කම දන්න දෙයක් නම් කවදාවත් නොකිය ඉන්නෙ නෑ.

 http://www.tutorialspoint.com/c_standard_library/string_h.htm
 http://en.wikipedia.org/wiki/C_standard_library
 http://en.cppreference.com/w/c/header
 http://en.wikibooks.org/wiki/C_Programming/Standard_libraries




දැනට ඉවරයි, තව post එකකින් තමයි එන්න වෙන්නෙ. කියෙව්වට thanks, Cheers!
BV


image

About C

C is a good language for hardware based applications and is the base of the best selling Windows OS. And is a key subject to most of the university students.

image

About us

We are students from an institute of software engineering, Sri Lanka, and we aim to make this the best blogspot for C language. Thanks!