برنامه نویسی در زندگی روزمره

برنامه نویسی رایانه (اختصاری برنامه نویسی) فرایند طراحی و ساخت یک برنامه کامپیوتری قابل اجرا برای دستیابی به یک نتیجه محاسباتی خاص است.
برنامه نویسی شامل کارهایی از قبیل: آنالیز، تولید الگوریتمها، پروفایل دقیق الگوریتمها و مصرف منابع و اجرای الگوریتمها به
زبان برنامه نویسی انتخاب شده (معمولاً به عنوان رمزگذاری است). کد منبع برنامه به یک یا چند زبان نوشته شدهاست که برای برنامه
نویسان قابل درک است و نه کد ماشین، که مستقیماً توسط واحد پردازش مرکزی اجرا میشود. هدف از برنامه نویسی یافتن دنباله ای از دستورالعملها
است که باعث میشود عملکرد یک کار (که میتواند به عنوان یک سیستم عامل پیچیده باشد) به صورت خودکار انجام شود، اغلب برای حل یک مشکل معین؛
بنابراین، برنامه نویسی ماهرانه نیاز به تخصص در چندین موضوع مختلف، از جمله دانش در مورد دامنه برنامه، الگوریتمهای تخصصی و منطق رسمی دارد.
وظایف همراه و مرتبط با برنامه نویسی عبارتند از: تست، اشکال زدایی، نگهداری کد منبع، اجرای سیستمهای ساخت (build system) و
مدیریت مصنوعات مشتق شده مانند کد ماشین برنامههای رایانه ای. اینها ممکن است بخشی از فرایند برنامه نویسی در نظر گرفته شود،
اما غالباً اصطلاح توسعه نرمافزار برای این فرایند بزرگتر با اصطلاح برنامه نویسی، پیادهسازی یا کدگذاری برای نوشتن واقعی کد استفاده میشود.
مهندسی نرمافزار تکنیکهای مهندسی را با شیوههای توسعه نرمافزار ترکیب میکند. مهندسی معکوس فرایند مخالف است.
یک هکر هر متخصص کامپیوتر ماهر است که از دانش فنی خود برای غلبه بر یک مشکل استفاده میکند، اما همچنین میتواند به معنای یک هکر امنیتی به زبان مشترک باشد.
تاریخچه
دستگاههای قابل برنامهریزی قرن هاست که وجود دارند. در اوایل قرن نهم میلادی، یک ترتیب سنج موسیقی قابل برنامهریزی توسط برادران فارسی
بانو موسی اختراع شد که یک دستگاه پخش خودکار فلوت را در کتاب دستگاههای مبتکر توصیف کرد. در سال ۱۲۰۶، مهندس کوردالجزاری یک
دستگاه درام قابل برنامهریزی را اختراع کرد که در آن میتوان از اتوماتیک مکانیکی موسیقی برای پخش ریتمهای مختلف و الگوهای طبل،
از طریق میخها و کامپها استفاده کرد. در سال ۱۸۰۱، با تغییر دادن برنامه «ژاکارد»، بافندگی ژاکارد میتواند بافتهای کاملاً متفاوتی تولید کند –
مجموعه ای از کارتهای کارتن با سوراخهایی که در آنها وجود دارد.
الگوریتمهای رمزگشایی و تحلیل رمز کد نیز قرنها وجود داشتهاست. در قرن نهم میلادی، ریاضیدان عرب آل کندی، الگوریتم رمزنگاری
را برای رمزگشایی کد رمزگذاری شده، در «دستنوشته در رمزگشایی پیامهای رمزنگاری» شرح داد. او اولین توصیف رمزپزشکی را با استفاده
از آنالیز فراوانی، اولین الگوریتم رمزگشایی کد ارائه داد.
اولین برنامه رایانه ای بهطور کلی به سال ۱۸۴۳ مربوط میشود، هنگامی که Ada Lovelace، ریاضیدان، الگوریتمی را برای محاسبه دنباله
ای از اعداد Bernoulli منتشر کرد، که قرار است توسط موتور تحلیلی چارلز بابیج انجام شود.
در دهه ۱۸۸۰ هرمان هالریت مفهوم ذخیره دادهها را به صورت قابل خواندن با دستگاه اختراع کرد. بعداً یک کنترل پنل (افزونه) به Tabulator Type 190 خود
که به آن اضافه شده بود اجازه داد که برای مشاغل مختلف برنامهریزی شود و تا اواخر دهه ۱۹۴۰ تجهیزات ضبط واحدی مانند IBM 602 و
IBM 604 توسط پنلهای کنترل به روش مشابهی برنامهریزی شدند. اولین کامپیوترهای الکترونیکی با این حال، با مفهوم رایانههای
در ادامه …
برنامه ذخیره شده معرفی شده در سال ۱۹۴۹، هر دو برنامه و دادهها به همان شیوه در حافظه کامپیوتر ذخیره و دستکاری شدند.
کد ماشین زبان برنامههای اولیه بود که در مجموعه دستورالعملهای دستگاه خاص، غالباً به صورت دودویی نوشته شدهاست.
به زودی زبانهای مونتاژ ایجاد شد که به برنامهنویس اجازه میدهد تا دستورالعملها را در قالب متن مشخص کند (به عنوان مثال، ADD X، TOTAL)،
با اختصار برای هر کد عملیات و نامهای معنی دار برای مشخص کردن آدرسها. اما، از آنجا که یک زبان مونتاژ چیزی بیش از یک نشان دیگر
برای یک زبان ماشین نیست، هر دو ماشین با مجموعههای مختلف دستورالعمل نیز دارای زبانهای مونتاژ متفاوت هستند.
زبانهای سطح بالا روند تهیه یک برنامه را سادهتر و قابل فهم تر و محدودتر به سختافزار زیرین میکردند. FORTRAN، اولین زبان سطح
پرکاربرد برای اجرای عملی، در سال ۱۹۵۷ منتشر شد و بسیاری از زبانهای دیگر به زودی توسعه یافتند – به ویژه، COBOL با هدف پردازش دادههای تجاری و لیپ برای تحقیقات رایانه.
برنامهها بیشتر با استفاده از کارتهای پانچ شده یا نوار کاغذی وارد میشدند. برنامه عصر رایانه را در عصر کارت پانچ ببینید. در اواخر دهه ۱۹۶۰،
دستگاههای ذخیرهسازی داده و پایانههای رایانه به اندازه کافی ارزان شدند که میتوان برنامهها را با تایپ کردن مستقیم به رایانهها ایجاد کرد.
ویرایشگرهای متن (خود برنامهها) ساخته شدهاند که اجازه میدهد تغییرات و اصلاحات بسیار آسانتر از کارتهای سوراخ شده انجام شود.
برنامه نویسی مدرن
کیفیت مورد نیاز
هر روشی که برای برنامه نویسی به کار برود، برنامه نهایی باید دارای تعدادی مشخصات پایه باشد. مشخصات زیر تعدادی از مهمترین آنها هستند.
- قابلیت اطمینان: این که چقدر نتایج یک برنامه درست باشند، به صحت طراحی الگوریتم و به حداقل رساندن اشتباهات برنامه نویسی مربوط میشود. اشتباهات برنامه نویسی شامل اشکالاتی مثل اشکال در مدیریت منابع (مثل سرریز شدن بافر یا وضعیت رقابتی) و اشکالات منطقی (مثل تقسیم بر صفر یا خطاهای off-by-one).
- استحکام: این که یک برنامه چگونه اشکالاتی (نه باگها) را که ممکن است پیش بیایند، پیشبینی کردهاست. این شامل حالتهایی مانند دریافت اطلاعات نادرست، نامناسب یا غلط میشود؛ همچنین کمبود منابعی مانند حافظه، سرویسهای سیستم عامل یا اتصال به شبکه و سایر اشکالات مانند خطای کاربر یا اشکالات قطع برق نیز در این دسته قرار میگیرند.
- کاربرد پذیری: ارگونومی یک برنامه: آسانی استفاده از برنامه برای شخصی که میخواهد از آن برای کار در نظر گرفته شدهاستفاده کند یا گاهی برای کارهای پیشبینی نشده آن را به کار برد. این مورد میتواند به تنهایی و علیرغم تمام موارد دیگر باعث موفقیت یا شکست شود. طیف وسیعی از عناصر متنی، تصویری و گاهی سختافزاری وجود دارند که میتوانند باعث ارتقای وضوح، درک، پیوستگی، کامل بودن واسط کاربری برنامه شوند.
- قابلیت حمل: طیف سختافزارها و سیستم عاملهایی که کد منبع برنامه را بتوان روی آنها با مترجم یا مفسر اجرا کرد. این قابلیت بستگی به تفاوت در تسهیلاتی دارد که سیستمهای مختلف از نظر منابع سختافزاری و سیستم عاملها برای برنامه نویسی ارائه میکنند. همچنین رفتار پیشبینی شده سختافزارها و سیستمهای عامل، و در دسترس بودن مترجمها (و منابع کتابخانهای) اختصاصی در آن سیستمها برای کد منبع موجود نیز مهم است.
در ادامه …
- گهداشت پذیری: این که سازندگان و ارتقا دهندگان فعلی برنامه یا افراد دیگری در آینده بتوانند به راحتی ارتقاها یا تغییراتی در برنامه انجام دهند تا خطاها و حفرههای امنیتی را رفع کنند یا بتوانند آن را برای محیط جدیدی تطبیق دهند. در این مورد تلاش مناسب اولیه در ایجاد برنامه است که نقش عمدهای بازی میکند. این خاصیت ممکن است تأثیر خیلی زیادی روی کاربر نهایی برنامه نداشته باشد ولی در بلند مدت برای سرنوشت یک برنامه خیلی مهم است.
- کارایی / عملکرد :اندازهگیری منابع سیستمی مورد نیاز برای یک برنامه (زمان پردازنده، فضای حافظه، وسایل کند مثل دیسکها، پهنای باند شبکه و موارد دیگری مثل تعامل با کاربر): هر چقدر کمتر، بهتر. این خاصیت همچنین شامل مدیریت صحیح منابع مانند پاک کردن فایلهای موقت و از بین بردن نشتیهای حافظه نیز میشود.
خوانایی کد منبع
در برنامهریزی رایانه، خوانایی عبارت است از این که خواننده متن کد منبع بتواند هدف، جریان برنامه و عملکرد کد منبع را متوجه شود.
این موضوع در مجموعه نیازهای کیفیتی شامل موارد قابلیت انتقال، کاربرد پذیری و نگهداشت پذیری میشود.
خوانایی خیلی مهم است به این علت که برنامه نویسان بیشترین وقتشان را به جای این که صرف نوشتن کد جدید بکنند، در زمینه درک و
تغییر کد منبع موجود میکنند. کدهای ناخوانا معمولاً به خطا، نارسایی و کدهای تکراری ختم میشوند. یک تحقیق نشان داد که تغییرات جزئی و
سادهای برای خوانایی برنامه میتواند منجر به این شود که کد نهایی نوشته شده کوتاهتر شود و همچنین زمان فهم آن بهطور قابل توجهی کاهش یابد.
پیروی از یک سبک برنامه نویسی منسجم معمولاً به خوانایی کمک میکند؛ اگر چه خوانایی چیزی بیش از فقط سبک برنامه نویسی است.
عوامل زیادی که معمولاً دخالتی در توانایی رایانه برای ترجمه مناسب و اجرای بهتر برنامه ندارند، به خوانایی کمک میکنند. بعضی از این عوامل اینها هستند:
- بلوک بندی متفاوت (فاصله سفید)
- یادآورها
- تکهتکه کردن نوشتههای طولانی
- قواعد نامگذاری برای اشیا (مثل متغیرها، کلاسها، روالها و غیره)
جنبههای دیداری برای این کار (مثل تورفتگی، شکستن خطوط، علامتگذاری رنگی و مانند اینها) معمولاً به وسیله ویرایشگر کد منبع
فراهم میشود، اما جنبههای محتوایی بازتابی از استعداد و تواناییهای برنامهنویس است.
زبانهای برنامه نویسی دیداری متعددی با این منظور توسعه داده شدهاند تا بتوانند از روشهای غیر سنتی برای ارائه کد و تصویر استفاده کنند.
محیطهای یکپارچه توسعه نرمافزار (IDEها) میخواهند تا تمام این گونه کمکها را به شکل یکپارچه ارائه کنند. تکنیکهایی برای بازسازی کد میتواند خوانایی را افزایش دهد.
پیچیدگی الگوریتمی
محیطهای دانشگاهی و همچنین مهندسین فعال در برنامه نویسی هر دو عمیقاً به دنبال کشف و تکمیل الگوریتمهای کارآمد تر برای گروه
مشکلات مشخص شده هستند. برای نیل به این هدف الگوریتمها در ترتیبهایی طبقهبندی میشوند که به عنوان نماد O بزرگ خوانده میشوند.
این طبقهبندی نشانگر استفاده الگوریتم از منابع، مثل زمان اجرا یا انباشت حافظه در ازای اندازه یک داده وارده است.
برنامه نویسان حرفهای با گسترهای از الگوریتمهای خوب سازمان یافته آشنایی دارند و پیچیدگیهای مخصوص آنها را میدانند و
در نتیجه از این دانستهها برای انتخاب الگوریتمهای مناسب برای شرایط مورد نظر خود، استفاده میکنند.
الگوریتمهای شطرنج به عنوان نمونه
“برنامه نویسی رایانه برای بازی شطرنج” مقاله ای در سال ۱۹۵۰ بود که یک الگوریتم “minimax” را که بخشی از تاریخ پیچیدگی الگوریتمی استارزیابی میکند.
دوره ای در مورد IBM’s Deep Blue (کامپیوتر شطرنج) بخشی از برنامه درسی علوم کامپیوتر در دانشگاه استنفورد است.
کاربرد الگوریتم و روندنما در برنامه نویسی
یکی از مهمترین پیشنیازهای برنامه نویسی اطلاع داشتن از نحوهٔ حل مسئله و الگوریتمهای برنامه نویسی است، الگوریتمها به صورت خاص نحوهٔ
حل و منطق زبان برنامه نویسی را بیان میکنند، نمای تصویری الگوریتم را روندنما مینامند، پس از نوشتن یک الگوریتم کامل برنامه نویسی
میتوان اقدام به رسم روندنما کرد تا نمود بصری الگوریتم به خوبی نمایان گردد.
روشها
قدم اول در فرایند توسعه بیشتر نرمافزارها به شکل معمول شامل بررسی نیازمندیها، سپس آزمایش برای تشخیص الگوی متغیرها،
اجرا و سپس حذف خرابیها (اشکال زدایی) است. راههای مختلفی برای رسیدن به هر کدام از این وظایف وجود دارند. یک راه پرطرفدار برای تحلیل
نیازمندیها تحلیل مورد کاربردی است. بسیاری از برنامه نویسان از شکل توسعه چابک نرمافزاری استفاده میکنند؛ در این روش مراحل
مختلف توسعه نرمافزار به شکل چرخههای کوتاه با هم ترکیب میشوند بهطوریکه هر کدام از این چرخهها فقط چند هفته طول بکشند.
این در مقابل روش معمول است که ممکن است چند سال زمان ببرد. روشهای خیلی زیادی برای روند توسعه برنامهها وجود دارند.
محبوبترین زبان در برنامه نویسی
تعیین اینکه محبوبترین زبان برنامه نویسی مدرن کدام است کار بسیار مشکلی است. بعضی از زبانها در کاربردهای خاصی محبوب است و
بعضی دیگر مرتباً در نوشتن کاربردهای گوناگون استفاده میشود. روشهای اندازهگیری محبوبیت زبان شامل موارد زیر میباشد:
شمردن تعداد آگهیهای اشتغال و توجه به یک زبان، تعداد کتابهای آموزشی فروخته شده در مورد یک زبان، تخمین تعداد خطوط کد
نوشته شده در یک زبان؛ که میتوان با استفاده سوابق کاری ایجاد شده با نرمافزارهای برنامه نویسی، زبان برنامه ویژوال بیسیک را جز محبوبترین زبان یاد کرد.
اشکال زدایی
اشکال زدایی وظیفه بسیار مهمی در فرایند توسعه نرمافزار میباشد، زیرا یک برنامه غلط میتواند پیامدهای مهمی برای کاربر خود داشته باشد.
بعضی از زبانها بیشتر در معرض برخی اشتباهات میباشند، به خاطر خصوصیاتشان نیاز به بررسی بیشتر کامپایلر نسبت به زبانهای دیگر ندارند.
روششناسی
اولین قدم در اکثر فرآیندهای رسمی توسعه نرمافزار، تجزیه و تحلیل الزامات است، و پس از آن آزمایش برای تعیین مدلسازی ارزش،
پیادهسازی و حذف نقص (اشکال زدایی) انجام میشود. برای هر یک از این کارها رویکردهای مختلفی وجود دارد.
یکی از رویکردهای محبوب برای تجزیه و تحلیل الزامات، استفاده از آنالیز Case است. بسیاری از برنامه نویسان از اشکال توسعه
نرمافزار Agile استفاده میکنند که مراحل مختلف توسعه نرمافزار رسمی در چرخههای کوتاه که چند هفته به طول میانجامند در کنار هم قرار گرفتهاند.
رویکردهای زیادی برای فرایند توسعه نرمافزار وجود دارد.
تکنیکهای محبوب سازی مدلسازی شامل تحلیل و طراحی شی گرا (OOAD) و معماری مدل محور (MDA) است.
زبان مدلسازی متحد (UML) علامتی است که برای OOAD و MDA استفاده میشود.
تکنیک مشابهی که برای طراحی بانک اطلاعاتی مورد استفاده قرار میگیرد، مدلسازی رابطه-رابطه (Entity-Modelation) (مدلسازی ER) است.
تکنیکهای اجرای شامل زبانهای ضروری (شی گرا یا رویه ای)، زبانهای کاربردی و زبانهای منطقی است.
اندازهگیری میزان استفاده از زبان
تعیین اینکه محبوبترین زبانهای برنامه نویسی مدرن چیست، بسیار دشوار است. روشهای سنجش محبوبیت زبان برنامه نویسی عبارتند از:
شمارش تعداد آگهیهای شغلی که به آن زبان اشاره میکنند، تعداد کتابهای فروخته شده و دورههای آموزش زبان (این اهمیت بیش از
حد زبانهای جدید را بالاتر میبرد) و تخمین تعداد خطوط موجود کد نوشته شده به زبان (این کمترین تعداد کاربران زبانهای تجاری مانند COBOL را دست کم میگیرد).
برخی از زبانها برای انواع خاصی از برنامهها بسیار محبوب هستند، در حالی که برخی از زبانها بهطور مرتب برای نوشتن انواع
مختلف برنامهها مورد استفاده قرار میگیرند. به عنوان مثال، COBOL هنوز هم در مراکز دادههای شرکتی غالباً در رایانههای اصلی بزرگ،
Fortran در برنامههای مهندسی، زبانهای اسکریپت در توسعه وب و C در نرمافزارهای تعبیه شده قوی است. بسیاری از برنامهها
از ترکیبی از چندین زبان در ساخت و استفاده خود استفاده میکنند. زبانهای جدید عموماً در حدود نحو یک زبان قبلی طراحی شدهاند
که قابلیتهای جدیدی نیز به آن اضافه شدهاست (به عنوان مثال ++C جهتیابی به شی را به C اضافه میکند، و جاوا مدیریت حافظه و
بایت کد را به C ++ اضافه میکند، اما در نتیجه بازده و توانایی کم را از دست میدهد. دستکاری ساده)
اشکال زدایی
اشکال زدایی کار بسیار مهمی در فرایند توسعه نرمافزار است زیرا نقص در یک برنامه میتواند عواقب قابل توجهی برای کاربران آن داشته باشد.
بعضی از زبانها بیشتر مستعد ابتلا به برخی از خطاها هستند زیرا مشخصات آنها به کامپایلرها نیاز ندارد تا به همان اندازه سایر زبانها بررسی کنند.
استفاده از ابزار تجزیه و تحلیل کد استاتیک میتواند به تشخیص برخی از مشکلات احتمالی کمک کند.
بهطور معمول اولین مرحله برای اشکال زدایی تلاش برای تولید مثل مشکل است. این میتواند یک کار غیر مهم باشد،
به عنوان مثال با فرآیندهای موازی یا برخی از اشکالات نرمافزاری غیرمعمول. همچنین، شرایط خاص کاربر و تاریخچه استفاده میتواند تولید مشکل را دشوار کند.
پس از تولید مجدد اشکال، ممکن است ورودی برنامه ساده شود تا اشکال زدایی آسانتر شود. به عنوان مثال، یک اشکال در کامپایلر میتواند هنگام عبور
در ادامه …
از فایل منبع بزرگ خراب شود. با این حال، پس از سادهسازی مورد آزمایشی، فقط چند خط از پرونده منبع اصلی میتواند برای تکثیر همان تصادف کافی باشد.
چنین سادهسازی میتواند به صورت دستی و با استفاده از روش تقسیم و تسخیر انجام شود. برنامهنویس سعی خواهد کرد که
برخی از قسمتهای تست اصلی را حذف کند و بررسی کند که آیا این مشکل هنوز وجود دارد یا خیر. هنگام اشکال زدایی مشکل در یک
رابط کاربری گرافیکی، برنامهنویس میتواند سعی کند برخی از تعاملهای کاربر را از توضیحات اصلی مسئله جست و جو کند
و بررسی کند که آیا اقدامات دیگر برای ظاهر اشکالات وجود دارد یا خیر.
اشکال زدایی اغلب با IDEهایی مانند Eclipse , Visual Studio , Xcode , Kdevelop , NetBeans و Code :: Blocks انجام میشود.
از اشکال زداییهای مستقل مانند GDB نیز استفاده میشوند و اینها معمولاً کمتر از یک محیط بصری استفاده میکنند، معمولاً با استفاده
از یک خط فرمان. برخی از ویرایشگرهای متنی مانند Emacs به GDB اجازه میدهند تا از طریق آنها فراخوانی شود تا محیط بصری را فراهم کند.
پارادایمها
مقاله اصلی: پارادایم برنامه نویسی
زبانهای برنامه نویسی گوناگون براساس قابلیتهای در نظر گرفته شده از شیوهٔ خطهای مختلف استفاده میکنند. موارد ریزتری مانند
چگونگی برخورد با نیازهای پشت پردهٔ ماشین مانند مدیریت حافظه و مدیریت زباله نیز در زبانهای مختلف متفاوت است. علاوه بر اینها،
مفاهیمی متفاوت از (اجرای) یک برنامه تصور شدهاند که پارادایم یا الگو نام دارند.
زبانهای برنامه نویسی
مقاله اصلی: زبان برنامه نویسی
زبانهای مختلف برنامه نویسی وجود دارند که هر کدام از آنها سبکهای خاصی را پشتیبانی میکنند. (به نام پارادایمهای برنامه نویسی).
انتخاب زبان مورد استفاده مورد توجه بسیاری از مباحث از قبیل خط مشی شرکت، مناسب بودن در انجام کار،
در دسترس بودن بستههای شخص ثالث یا ترجیح شخصی است. در حالت ایدهآل، زبان برنامه نویسی که برای کار مورد نظر مناسب تر باشد انتخاب میشود.
تجارت از این ایدهآل شامل یافتن برنامه نویسان به اندازه کافی است که زبان را برای ایجاد یک تیم میشناسند، در دسترس بودن
کامپایلرها برای آن زبان و کارایی که برنامههای آنها را با یک زبان خاص اجرا میکنند. زبانها طیف تقریبی را از «سطح پایین» تا «سطح بالا» تشکیل میدهند.
زبانهای «سطح پایین» بهطور معمول بیشتر دستگاه محور و سریعتر اجرا میشوند، و به زبان ماشین نزدیکتر هستند در حالی که زبانهای «سطح بالا»
در ادامه …
انتزاعی تر و آسانتر برای استفاده هستند اما سرعت کمتری دارند. معمولاً کدگذاری به زبانهای «سطح بالا» از زبانهای «سطح پایین» سادهتر است.
آلن داونی در کتاب ” چگونه به شکل یک استاد رایانه فکر کنیم ” مینویسد:
جزئیات در زبانهای برنامه نویسی مختلف متفاوت به نظر میرسند ولی تعدادی از ساختارهای اساسی در همه زبانهای برنامه نویسی یکسان هستند:
- ورودی: دادهها را از صفحه کلید، یک فایل یا وسایل دیگر فراهم میکند.
- خروجی: اطلاعات را روی صفحه تصویر نشان میدهد، به یک فایل میفرستد یا به دستگاههای دیگری انتقال میدهد.
- محاسبات: اعمال محاسباتی اساسی مثل جمع و ضرب را انجام میدهد.
- حالتهای شرطی: شرطهای مشخصی را کنترل میکند و بر اساس آن رشته مناسبی از عبارات را اجرا میکند.
- حلقه: بعضی اعمال را به شکل تکراری انجام میدهد، معمولاً با استفاده از تعدادی از متغیرها این کار انجام میشود.
بسیاری از زبانهای برنامه نویسی مکانیسمهایی را برای تماس با توابع ارائه شده توسط کتابخانههای مشترک فراهم میکنند.
مشروط بر اینکه توابع موجود در یک کتابخانه از کنوانسیونهای زمان اجرا مناسب پیروی کنند (مثلاً روش گذراندن آرگومانها)،
ممکن است این توابع به هر زبان دیگری نوشته شود.