اپ نویسی به صورت حرفه ای
برای مثال در گویش طبیعی، ممکن وجود ندارد به بعضی از جملات صحیح از دید گرامری، معنای خاصی اطلاق کرد یا این که ممکن میباشد پاراگراف غلط باشد:
«ایدههای بیرنگ سبز با خشم میخوابند.» از طراحی اپلیکیشن حیث دستوری خوش فرم میباشد اما معنای گزینه قبولی ندارد.
«جان یک مجرد متأهل میباشد.» از دید دستوری صحت دارد، اما معنایی را ذکر مینماید که نمیتواند صحیح باشد.
این تکّه کد در گویش C از لحاظ دستوری صحت دارد، البته کاری را انجام میدهد که از دید معنایی تمجید نشدهمیباشد. (چون p یک اشارهگر خالی میباشد، فعالیت p->im معنای خاصی ندارد و فعالیت p>>4* برای مقدارهای پیچیده بیمعنا میباشد.)
complex *p = NULL;
complex abs_p = sqrt(*p >> 4 + p->im);
امر موردنیاز برای معین کردن یک گویش اپنویسی می تواند با جایگاهش در «سلسله مراتب چامسکی» طبقهبندی خواهد شد. فرمان بیشتر لهجههای اپلیکیشننویسی میتواند توسط? یک گرامر نوع 2 مشخص و معلوم خواهد شد، برای مثال، گرامرهای جدا از متن.
معناشناسی ایستا
معناشناسی ایستا محدودیتهایی بر روی ساختار مجاز متن ها انتخاب مینماید که ذکر آنان در فرمول دستوری استاندارد اختلال یا این که ناممکن میباشد. مهم ترین این محدودیتها توسط سیستم نوعگذاری انجام می گردد. برخلاف اعتقاد و باور بعضا از نرمافزارنویسان محدودیتهای اعمال گردیده، اعمال نشدهاند بلکه در واقع ناشی از زیرساختهای آن گویش اپلیکیشننویسی میباشند تا سرعت پردازش را ارتقاء دهند و توان پردازش پردازنده را برای تایپکستینگهای خود کار گوناگون صرف نکنند. به کار گیری از طریق ایستا فقطً سرعت پردازشهایی را ارتقاء می دهد که در کسری از ثانیه به به حساب آوردن وسعت انبوهی از دادهها نیاز داراهستند. این مسئله بهبود پردازش به عنوان مثال خودش را در گرافیکهای سنگین بازیهای کامپیوتری نشان می دهد همینطور به عنوان مثال در سرورهای بکاند (پشتی) بانکداری با وسعت انبوهی از تثبیت تراکنشها که از گویش ایستای جاوا به کار گیری می گردد البته حتیدر مورد گرافیک جاوا به جهت به کارگیری از گاربیجکالکشن یا این که عدهآوری آشغال و اما به کارگیری از ماشین مجازی برای رئیس خاطر سرعت پردازشی ++C را ندارد از طرفی به کارگیری دات نت از گویش میانجی IL برای پشتیبانی از گویشهای مختلف مانند #C یا این که #F و کامپایل نکردن بی واسطه به باینری ماشینی منجر میشود که سرعت پردازش #C نیز از جاوا ذیلخیس باشد ولی تجهیزات بزرگتری را در قضیههای خاصی مانند طراحی وب سایت یا این که ایجاد نرم افزارهای مدلپردازشی روی سیستمادله را مهیا نماید اگرچه با صرف ترازو بیشتری از منابع خاطر و پردازشی یاور میباشد.
سیستم نوعگذاری
یک سیستم نوعگذاری معلوم مینماید که یک لهجه اپنویسی چه گونه مقادیر و لغت ها را در نوع (type) دستهبندی مینماید، چه طور می تواند آن نوعها را تغییر و تحول دهد و اخلاق و رفتار متقابل آنها به چه شکلمیباشد. این عمل عموماً توضیح داده ساختارهایی که می توانند در آن لهجه تولید شوند را دربرگیرنده میگردد. پباده سازی و مطالعه سیستمهای نوعگذاری توسط? ریاضی ها قراردادی را تئوری نوعگذاری می گویند.
لهجههای نوعگذاری گردیده و فارغ از نوعگذاری
یک لهجه نوعگذاری شده است درصورتیکه خصوصیات هر عملیات، نوع دادههای قابل انجام به وسیله آن را با نشان دادن نوعهایی که برای آن ها قابل انجام وجود ندارد، انتخاب نماید. به عنوان مثال، «این متن باطن گیومه قراردارد» یک فنمیباشد. در بیشتر گویشهای نرمافزارنویسی، تقسیم یک حرفه با یکی معنایی ندارد. در فیض بیشتر گویشهای نرمافزارنویسی امروزی ممکن میباشد اجرای این عملیات را به وسیله اپها رد نمایند. در بعضا لهجهها، لغات بیمفهوم ممکن میباشد هنگام ترجمه (compile) پیدا گردد (نظارتکنند? نوع ایستا)، و بوسیله کامپایلر رد خواهد شد، در حالی که در بقیه نرم افزارها، هنگام اجرا پیدا گردد. (ارزیابیکننده نوع دینامیک) که به استثنای در درحال حاضر اجرا منتج خواهد شد(runtime exception). شرایط خاص گویشهای نوع دار گویشهای تک نوع می باشند. بیشتر این گویشها اسکریپتی یا این که برند آپ می باشند، مانند rexx و SGML و تنها یک داده سیرتکامل داراهستند—غالباً حرفههای کاراکتری که هم برای دادههای عددی و هم برای دادههای سمبلی کاربرد داراهستند. در مقابل، یک لهجه سوای نوع گذاری، مثل اکثر لهجههای اسمبلی، این قابلیت و امکان را می دهد که هر عملیاتی روی هر دادهای صورت بپذیرد، که معمولاً دنبالهای از بیتها با ارتفاعهای گوناگون در حیث گرفته میگردند. گویشهای سطح بالا که بی نوع میباشند مشتمل بر لهجههای معمولی رایانهای و برخی از اشکال لهجههای نسل چهارم.
در کار، در حالیکه تعداد بسیار مقداری از بینش نظریه نوع، نوعگذاری گردیده تلقی میگردند (محاسبه کردن یا این که رد کردن کل عملیاتها)، بیشتر لهجههای مدرن رتبهای از نوعگذاری را آماده مینمایند. اکثری از گویشهای سازنده راهی را برای گذشتن یا این که موقوف کردن سیستم نوع آماده مینمایند.
نوعگذاری ایستا و پویا
در نوعگذاری ایستا مجموع لغات نوعهای خویش را پیش از اجرای نرم افزار انتخاب مینمایند (معمولاً در طول کامپایل). از جمله، 1 و (2+2) کلمات عددی میباشند؛ آنها نمیتوانند به تابعی که نیاز به یک حرفه دارااست داده شوند، یا این که در متغیری که تعریفوتمجید گردیده تا تاریخ را نگه داراست، ذخیره شوند.
لهجههای نوعگذاری گردیده ایستا میتوانند با مانیفست نوعگذاری شوند یا این که با به کارگیری از نوع استنباط شوند. در موقعیت نخستین، اپنویس بیشتر به طور صریحً نوعها را در موضعهای متنی مشخص و معلوم مینویسد (به عنوان مثال، در تمجید متغیرها). در وضعیت دوم، کامپایلر نوع لغات و تمجیدها را بر پایه ی متن استنباط مینماید. بیشتر لهجههای مسیر اساسی (mainstream) ایستا نوعگذاری گردیدهاند، مانند #C++ ،C و Java که با مانیفست نوعگذاری میگردند.
نوعگذاری توانمند و ضعیف
نوعگذاری ضعیف این قابلیت را تولید مینماید که با متغیری به مکان متغیری دیگر عکس العمل خواهد شد، به عنوان مثال خلق با یک حرفه تحت عنوان یکی. این خصوصیت گه گاه ممکن میباشد موءثر باشد، ولی ممکن میباشد سبب ساز تولید بعضی اشتباهات اپ خواهد شد که موقع کامپایل و حتی اجرا نهفته بمانند.
نوعگذاری توانا بازدارنده صورت دادن ایراد فوق میگردد. همت برای انجام عملیات روی نوع اشتباه متغیر سبب ساز به صورت دادن اشتباه میگردد. گویشهایی که نوعگذاری حاذق داراهستند غالباً با اسم «نوع-امن» یا این که امن شناخته میگردند. مجموع تعاریف جایگزین برای «ضعیف نوعگذاری گردیده» به گویشها اشاره مینماید، مانند C++ ،JavaScript و Perl که اذن تعداد متعددی تبدیل نوع داخلی را می دهند. در جاوااسکریپت، به عنوان مثال، عبارت 2*x به طور ضمنی x را به عدد تبدیل مینماید، و این تبدیل بردآمیز خواهد بود حتی درحالتی که x خالی، تعریف و تمجید نشده، یک آرایه، یا این که حرفهای از حروف باشد. چنین تبدیلهای ضمنی در بیشتر مورد ها مفیدند، البته خطاهای اپلیکیشننویسی را نهفته مینمایند.
کارکشته و ایستا اکنون عموماً دو مضمون متعامد فرض می شوند، البته به کار گیری در ادبیات تفاوت دارااست، بعضی عبارت «توانا نوعگذاری گردیده» را به فعالیت می برند و منظورشان توانمند، ایستایی نوعگذاری شده است، و یا این که، حتی سرگردانکنندهخیس، منظورشان به عبارتی ایستایی نوعگذاری شده است؛ بدین ترتیب C هم قدرتمند نوعگذاری گردیده و هم ضعیف و ایستایی نوعگذاری گردیده نامیده میگردد.
معناشناسی اجرا
زمانی که داده معلوم شد، ماشین می بایست هدایت گردد تا عملیاتها را روی داده انجام دهد. معناشناسی اجرا ی یک لهجه انتخاب مینماید که چهگونه و چه وقتی ساختارهای متفاوت یک گویش بایستی خلق اپ را تولید نمایند.
از جمله، معناشناسی ممکن میباشد استراتژی را که توسط آن کلمه ها محاسبه می شوند را تعریف و تمجید نماید یا این که حالتی را که ساختارهای کنترلی زیر قوانینی اوامر را اجرا مینمایند.
کتابخان? هسته
بیشتر گویشهای نرمافزارنویسی یک کتابخان? هسته دارای ربط داراهستند (بعضی وقتها \"کتابخان? استاندارد\" نامیده می شوند، مخصوصاً هنگامی که تحت عنوان قسمتی از یک لهجه استاندارد ارائه گردیده باشند)، که بهطور قراردادی به وسیله کل پیادهسازیهای گویش در دسترس قرار گرفته باشند. کتابخان? هسته معمولاً تمجید الگوریتمها، داده ساختارها و مکانیزمهای ورودی و خروجی پر کاربرد را در خویش دارااست. یوزرها یک لهجه، در بیشتر مورد ها با کتابخان? هسته تحت عنوان قسمتی از آن کردار مینمایند، اگرچه طراحان ممکن میباشد با آن به طور یک معنا منقطع اخلاق و رفتار کرده باشند. اکثری از خصوصیتهای گویش هستهای را معلوم مینمایند که بایستی در مجموع پیادهسازیها جانور باشند، و در گویشهای استاندارد گردیده این کتابخان? هسته ممکن میباشد نیاز باشد؛ براین اساس خط در میان گویش و کتابخان? هست? آن از زبانی به لهجه دیگر گوناگون میباشد. در واقع، برخی گویشها به سیرتکاملای تعریفوتمجید گردیدهاند که بعضی از ساختارهای دستوری فارغ از اشاره به کتابخانه هسته قابل به کار گیری نیستند. مثلا در جاوا، یک حرفه تحت عنوان مثالای از کلاس “java.lang.String” تعریف و تمجید شده است؛ به صورت شبیه، در سمال تاک (smalltalk) یک تابع بیاسم (یک \"بلاک\") مثالای از کلاس BlockContext کتابخانه میسازد. بهطور معکوس، Scheme دارنده یکسری زیرمجموعه دارای ربط برای ساختوساز بقیه ماکروهای لهجه می باشد، و در سود طراحان لهجه حتی این زحمت را نیز تحمل نمی کنند که بگویند کدام نصیب لهجه تحت عنوان ساختارهای گویش بایستی پیادهسازی شوند، و کدام یک تحت عنوان بخشی از کتابخانه.