و این تبدیل حتی اگر x تهی، تعریف نشده، برنامه نویسی بلوکی آرایه یا رشته ای از حروف باشد موفق می شود. چنین تبدیل های ضمنی اغلب مفید هستند، اما می توانند خطاهای برنامه نویسی را پنهان کنند. قوی و ایستا در حال حاضر به طور کلی مفاهیم متعامد در نظر گرفته می شوند، اما استفاده در ادبیات متفاوت است. برخی از اصطلاح قوی تایپ شده را به معنای تایپ قوی، ایستا، یا حتی گیج کننده تر، به معنای تایپ ساده استاتیک استفاده می کنند برنامه نویسی بلوکی . بنابراین C را هم با شدت تایپ و هم به صورت ضعیف، تایپ ایستا می نامند.[74][75][76]
ممکن است برای برخی از برنامه نویسان حرفه ای عجیب به نظر برسد که C می تواند "ضعیف و ایستا تایپ شود". با این حال، استفاده از اشارهگر عمومی، نشانگر void*، اجازه میدهد تا نشانگرها را به سایر اشارهگرها بدون نیاز به ارسال صریح ارسال کنید. این بسیار شبیه به ریختن آرایه ای از بایت ها به هر نوع برنامه نویسی بلوکی داده در C بدون استفاده از ریخته گری واضح است، مانند (int) یا (char).
کتابخانه استاندارد و سیستم زمان اجرا
مقاله اصلی: کتابخانه استاندارد
اکثر زبان های برنامه نویسی دارای یک کتابخانه هسته مرتبط هستند (که گاهی اوقات به عنوان "کتابخانه استاندارد" شناخته می شود، به خصوص اگر به عنوان بخشی از استاندارد زبان منتشر شده باشد)، که به طور معمول توسط همه پیاده سازی های زبان در دسترس است. کتابخانههای اصلی معمولاً شامل تعاریفی برای برنامه نویسی بلوکی الگوریتمهای رایج، ساختارهای داده و مکانیسمهایی برای ورودی و خروجی هستند.
خط بین زبان و کتابخانه اصلی آن از زبانی به زبان دیگر متفاوت است. در برخی موارد، طراحان زبان ممکن است کتابخانه را به عنوان یک موجودیت مجزا از زبان در نظر بگیرند. با این حال، کتابخانه اصلی یک زبان اغلب به عنوان بخشی از زبان توسط کاربران آن در نظر گرفته میشود، و برخی از مشخصات زبان حتی برنامه نویسی بلوکی مستلزم آن است که این کتابخانه در همه پیادهسازیها در دسترس باشد. در واقع، برخی از زبانها به گونهای طراحی شدهاند که معانی برخی ساختارهای نحوی را حتی نمیتوان بدون مراجعه به کتابخانه اصلی توصیف کرد. به عنوان مثال، در جاوا، یک string literal به عنوان نمونه ای از کلاس java.lang.String تعریف می شود. به طور مشابه، در Smalltalk، یک عبارت تابع ناشناس (یک "بلوک") نمونه ای از کلاس BlockContext کتابخانه را می سازد. برعکس، Scheme شامل چندین زیرمجموعه منسجم است که برای ساخت بقیه زبان به عنوان ماکروهای کتابخانه کافی است، و بنابراین طراحان زبان حتی به برنامه نویسی بلوکی خود زحمت نمیدهند بگویند کدام بخش از زبان باید به عنوان ساختار زبان پیادهسازی شود و کدام بخش باید به عنوان بخش پیادهسازی شود. از یک کتابخانه
همزمانی
همچنین ببینید: محاسبات همزمان
در محاسبات، چندین دستورالعمل را می توان به طور همزمان اجرا کرد. بسیاری از زبان های برنامه نویسی از همزمانی در سطح دستورالعمل و زیربرنامه پشتیبانی می کنند.[77] در قرن بیست و یکم، قدرت پردازش اضافی در رایانهها به طور فزایندهای ناشی از استفاده از پردازندههای اضافی بود، که برنامهنویسان را ملزم به طراحی نرمافزاری میکند که از چندین پردازنده به طور همزمان برای دستیابی به عملکرد بهتر استفاده میکند.[78] زبان های تفسیر شده مانند Python و Ruby از استفاده همزمان از چندین پردازنده پشتیبانی نمی کنند.[79] سایر زبانهای برنامهنویسی برنامه نویسی بلوکی از مدیریت دادههای به اشتراک گذاشته شده بین رشتههای مختلف با کنترل ترتیب اجرای دستورالعملهای کلیدی از طریق استفاده از سمافورها، کنترل دسترسی به دادههای مشترک از طریق مانیتور، یا فعال کردن ارسال پیام بین رشتهها پشتیبانی میکنند.[80]
رسیدگی به استثنا
مقاله اصلی: رسیدگی به استثنا
بسیاری از زبانهای برنامهنویسی شامل کنترلکنندههای استثنا هستند، برنامه نویسی بلوکی بخشی از کد که توسط خطاهای زمان اجرا ایجاد میشود و میتواند به دو روش اصلی با آنها مقابله کند:[81]
خاتمه: خاموش شدن و واگذاری کنترل به سیستم عامل. آموزش برنامه نویسی کودکان و نوجوانان این گزینه ساده ترین در نظر گرفته می شود.
Resumption: از سرگیری برنامه در نزدیکی جایی که استثنا رخ داده است. این می تواند باعث تکرار استثنا شود، مگر اینکه کنترل کننده استثنا بتواند مقادیر را برای جلوگیری از تکرار استثنا تغییر دهد.
برخی از زبان های برنامه نویسی از اختصاص یک بلوک کد برای اجرا بدون توجه به اینکه آیا قبل از رسیدن به کد استثنا رخ می دهد یا خیر، پشتیبانی می کنند. به این می گویند نهایی سازی.[82]
بین افزایش توانایی در رسیدگی به استثناها و کاهش عملکرد، تعادلی وجود دارد.[83] برای مثال، حتی اگر خطاهای شاخص آرایه رایج هستند[84] C آنها را به دلایل عملکرد بررسی نمی کند.[83] اگرچه برنامه نویسی بلوکی برنامه نویسان می توانند کد بنویسند تا استثناهای تعریف شده توسط کاربر را بگیرند، این می تواند یک برنامه را به هم ریخت. کتابخانه های استاندارد در برخی از زبان ها، مانند C، از مقادیر بازگشتی خود برای نشان دادن یک استثنا استفاده می کنند.[85] برخی از زبانها و کامپایلرهای آنها این امکان را دارند که قابلیت رسیدگی به خطا را به طور موقت یا دائم خاموش و روشن کنند.[86]
طراحی و پیاده سازی
مقاله اصلی: طراحی و پیاده سازی زبان برنامه نویسی
زبانهای برنامهنویسی ویژگیهایی را با زبانهای طبیعی به اشتراک برنامه نویسی بلوکی میگذارند که مربوط به هدفشان بهعنوان وسیلهای برای ارتباط است، شکل نحوی جدا از معنایی آن، و نشان دادن خانوادههای زبانی زبانهای مرتبط که یکی از دیگری منشعب میشوند.[87][88] اما بهعنوان سازههای مصنوعی، از جهات اساسی Block programming با زبانهایی که از طریق استفاده تکامل یافتهاند نیز متفاوت هستند. یک تفاوت قابل توجه این است که یک برنامه
و این تبدیل حتی اگر x تهی، تعریف نشده، برنامه نویسی بلوکی آرایه یا رشته ای از حروف باشد موفق می شود. چنین تبدیل های ضمنی اغلب مفید هستند، اما می توانند خطاهای برنامه نویسی را پنهان کنند. قوی و ایستا در حال حاضر به طور کلی مفاهیم متعامد در نظر گرفته می شوند، اما استفاده در ادبیات متفاوت است. برخی از اصطلاح قوی تایپ شده را به معنای تایپ قوی، ایستا، یا حتی گیج کننده تر، به معنای تایپ ساده استاتیک استفاده می کنند برنامه نویسی بلوکی . بنابراین C را هم با شدت تایپ و هم به صورت ضعیف، تایپ ایستا می نامند.[74][75][76]
ممکن است برای برخی از برنامه نویسان حرفه ای عجیب به نظر برسد که C می تواند "ضعیف و ایستا تایپ شود". با این حال، استفاده از اشارهگر عمومی، نشانگر void*، اجازه میدهد تا نشانگرها را به سایر اشارهگرها بدون نیاز به ارسال صریح ارسال کنید. این بسیار شبیه به ریختن آرایه ای از بایت ها به هر نوع برنامه نویسی بلوکی داده در C بدون استفاده از ریخته گری واضح است، مانند (int) یا (char).
کتابخانه استاندارد و سیستم زمان اجرا
مقاله اصلی: کتابخانه استاندارد
اکثر زبان های برنامه نویسی دارای یک کتابخانه هسته مرتبط هستند (که گاهی اوقات به عنوان "کتابخانه استاندارد" شناخته می شود، به خصوص اگر به عنوان بخشی از استاندارد زبان منتشر شده باشد)، که به طور معمول توسط همه پیاده سازی های زبان در دسترس است. کتابخانههای اصلی معمولاً شامل تعاریفی برای برنامه نویسی بلوکی الگوریتمهای رایج، ساختارهای داده و مکانیسمهایی برای ورودی و خروجی هستند.
خط بین زبان و کتابخانه اصلی آن از زبانی به زبان دیگر متفاوت است. در برخی موارد، طراحان زبان ممکن است کتابخانه را به عنوان یک موجودیت مجزا از زبان در نظر بگیرند. با این حال، کتابخانه اصلی یک زبان اغلب به عنوان بخشی از زبان توسط کاربران آن در نظر گرفته میشود، و برخی از مشخصات زبان حتی برنامه نویسی بلوکی مستلزم آن است که این کتابخانه در همه پیادهسازیها در دسترس باشد. در واقع، برخی از زبانها به گونهای طراحی شدهاند که معانی برخی ساختارهای نحوی را حتی نمیتوان بدون مراجعه به کتابخانه اصلی توصیف کرد. به عنوان مثال، در جاوا، یک string literal به عنوان نمونه ای از کلاس java.lang.String تعریف می شود. به طور مشابه، در Smalltalk، یک عبارت تابع ناشناس (یک "بلوک") نمونه ای از کلاس BlockContext کتابخانه را می سازد. برعکس، Scheme شامل چندین زیرمجموعه منسجم است که برای ساخت بقیه زبان به عنوان ماکروهای کتابخانه کافی است، و بنابراین طراحان زبان حتی به برنامه نویسی بلوکی خود زحمت نمیدهند بگویند کدام بخش از زبان باید به عنوان ساختار زبان پیادهسازی شود و کدام بخش باید به عنوان بخش پیادهسازی شود. از یک کتابخانه
همزمانی
همچنین ببینید: محاسبات همزمان
در محاسبات، چندین دستورالعمل را می توان به طور همزمان اجرا کرد. بسیاری از زبان های برنامه نویسی از همزمانی در سطح دستورالعمل و زیربرنامه پشتیبانی می کنند.[77] در قرن بیست و یکم، قدرت پردازش اضافی در رایانهها به طور فزایندهای ناشی از استفاده از پردازندههای اضافی بود، که برنامهنویسان را ملزم به طراحی نرمافزاری میکند که از چندین پردازنده به طور همزمان برای دستیابی به عملکرد بهتر استفاده میکند.[78] زبان های تفسیر شده مانند Python و Ruby از استفاده همزمان از چندین پردازنده پشتیبانی نمی کنند.[79] سایر زبانهای برنامهنویسی برنامه نویسی بلوکی از مدیریت دادههای به اشتراک گذاشته شده بین رشتههای مختلف با کنترل ترتیب اجرای دستورالعملهای کلیدی از طریق استفاده از سمافورها، کنترل دسترسی به دادههای مشترک از طریق مانیتور، یا فعال کردن ارسال پیام بین رشتهها پشتیبانی میکنند.[80]
رسیدگی به استثنا
مقاله اصلی: رسیدگی به استثنا
بسیاری از زبانهای برنامهنویسی شامل کنترلکنندههای استثنا هستند، برنامه نویسی بلوکی بخشی از کد که توسط خطاهای زمان اجرا ایجاد میشود و میتواند به دو روش اصلی با آنها مقابله کند:[81]
خاتمه: خاموش شدن و واگذاری کنترل به سیستم عامل. آموزش برنامه نویسی کودکان و نوجوانان این گزینه ساده ترین در نظر گرفته می شود.
Resumption: از سرگیری برنامه در نزدیکی جایی که استثنا رخ داده است. این می تواند باعث تکرار استثنا شود، مگر اینکه کنترل کننده استثنا بتواند مقادیر را برای جلوگیری از تکرار استثنا تغییر دهد.
برخی از زبان های برنامه نویسی از اختصاص یک بلوک کد برای اجرا بدون توجه به اینکه آیا قبل از رسیدن به کد استثنا رخ می دهد یا خیر، پشتیبانی می کنند. به این می گویند نهایی سازی.[82]
بین افزایش توانایی در رسیدگی به استثناها و کاهش عملکرد، تعادلی وجود دارد.[83] برای مثال، حتی اگر خطاهای شاخص آرایه رایج هستند[84] C آنها را به دلایل عملکرد بررسی نمی کند.[83] اگرچه برنامه نویسی بلوکی برنامه نویسان می توانند کد بنویسند تا استثناهای تعریف شده توسط کاربر را بگیرند، این می تواند یک برنامه را به هم ریخت. کتابخانه های استاندارد در برخی از زبان ها، مانند C، از مقادیر بازگشتی خود برای نشان دادن یک استثنا استفاده می کنند.[85] برخی از زبانها و کامپایلرهای آنها این امکان را دارند که قابلیت رسیدگی به خطا را به طور موقت یا دائم خاموش و روشن کنند.[86]
طراحی و پیاده سازی
مقاله اصلی: طراحی و پیاده سازی زبان برنامه نویسی
زبانهای برنامهنویسی ویژگیهایی را با زبانهای طبیعی به اشتراک برنامه نویسی بلوکی میگذارند که مربوط به هدفشان بهعنوان وسیلهای برای ارتباط است، شکل نحوی جدا از معنایی آن، و نشان دادن خانوادههای زبانی زبانهای مرتبط که یکی از دیگری منشعب میشوند.[87][88] اما بهعنوان سازههای مصنوعی، از جهات اساسی Block programming با زبانهایی که از طریق استفاده تکامل یافتهاند نیز متفاوت هستند. یک تفاوت قابل توجه این است که یک برنامه