Езици за програмиране - Правене на игри - Статии за създаване на игри
От създаването на първите програмируеми машини човечеството вече е изобретило повече от две хиляди и половина езици за програмиране (виж списъка с езици за програмиране). Всяка година броят им се попълва с нови. Някои езици са известни само на малък брой собствени разработчици, други стават известни на милиони хора. Професионалните програмисти понякога използват в работата си повече от дузина различни езици за програмиране.
Създателите на езици интерпретират концепцията за език за програмиране по различен начин. Сред често срещаните места, признати от повечето разработчици, са следните:
Функция: език за програмиране е предназначен за писане на компютърни програми, които се използват за предаване на инструкции на компютър за извършване на определен изчислителен процес и организиране на управление на отделни устройства.
Цел: Езикът за програмиране се различава от естествените езици по това, че е проектиран да предава команди и данни от човек на компютър, докато естествените езици се използват за комуникация между хората. По принцип е възможно да се обобщи определението за „езици за програмиране“ - това е начин за предаване на команди, заповеди, ясен наръчник за действие; като има предвид, че човешките езици служат и за обмен на информация.
Изпълнение: езикът за програмиране може да използва специални конструкции за дефиниране и манипулиране на структури от данни и контрол на изчислителния процес.
Характеристики на езиците за програмиране
Всеки език за програмиране може да бъде представен като набор от формални спецификации, които определят неговия синтаксис и семантика
Тези спецификации обикновено включват описание:
Видове и структури от данни
Оперативна семантика (алгоритъм за изчисляване на езикови конструкции)
Семантични езикови конструкции
Примитивни библиотеки (напр. I/O инструкции)
Философия на целта и възможностите на езика
За много широко използвани програмни езици са създадени международни комитети по стандартизация, които редовно актуализират и публикуват спецификациите и официалните дефиниции на съответния език. В рамките на такива комитети продължава развитието и модернизацията на програмните езици и се разглеждат въпроси за разширяване или подпомагане на съществуващи и нови езикови конструкции.
Типове данни
Вътрешно всички данни в съвременните цифрови компютри се съхраняват просто като нули и единици (в двоичен формат). Данните, които представляват информация от реалния свят (имена, банкови сметки, измервания и т.н.), са двоични данни от ниско ниво, които програмните езици превеждат в тези концепции на високо ниво.
Структури на данни
Типовите системи на езици на високо ниво позволяват дефинирането на сложни, съставни типове, така наречените структури от данни. По правило структурните типове данни се формират като декартово произведение на базови (атомни) типове и предварително дефинирани композитни типове.
Основните структури от данни (списъци, опашки, хеш таблици, двоични дървета и двойки) често са представени със специален синтаксис на езици на високо ниво. Такива данни се структурират автоматично.
Оперативна семантика
За повечето езици алгоритъмът за изпълнение на програмата е строго определен. Формално този алгоритъм често се описва като автомат на състоянието.
Основна семантика или изчислителни модели:
императив
строг функционален
мързелив функционален
Съставени и интерпретирани езици
Езиците за програмиране са разделени на два класа - компилирани и интерпретирани.
Програма на компилиран език с помощта на специална програма за компилиране се преобразува (компилира) в набор от инструкции за даден тип процесор (машинен код) и след това се записва в изпълним файл, който може да се изпълнява като отделна програма. С други думи, компилаторът превежда програмата от език на високо ниво в език на ниско ниво, който процесорът може да разбере.
Ако програмата е написана на интерпретиран език, тогава интерпретаторът директно изпълнява (интерпретира) своя текст без предварителен превод. В този случай програмата остава на оригиналния език и не може да бъде стартирана без преводач. Можем да кажем, че компютърният процесор е интерпретатор на машинен код.
Накратко, компилаторът превежда програмата на машинен език наведнъж и изцяло, като по този начин създава отделна програма, а интерпретаторът превежда на машинен език точно по време на изпълнението на програмата.
Разделението на съставени и тълкувани езици е донякъде произволно. Така че, за всеки традиционно компилиран език, като Pascal, можете да напишете преводач. В допълнение, повечето съвременни „чисти“ интерпретатори не изпълняват директно езикови конструкции, а ги компилират в някакво междинно представяне на високо ниво (например с променливо пренасочване и макроразширяване).
Можете да създадете компилатор за всеки интерпретиран език - например интерпретираният от Lisp език може да бъде компилиран без никакви ограничения. Кодът, генериран по време на изпълнение, също може да бъде динамично компилиран по време на изпълнение.
По правило компилираните програми работят по-бързо и не изискват допълнителни програми, тъй като те вече са преведени на машинен език. В същото време всеки път, когато текстът на програмата се променя, той трябва да бъде прекомпилиран, което създава трудности по време на разработката. Освен това компилираната програма може да работи само на един и същ тип компютри и по правило под същата операционна система, за която е проектиран компилаторът. За да създадете изпълним файл за различен тип машина, е необходима нова компилация.
Интерпретираните езици имат някои специфични допълнителни функции (вж. По-горе), освен това програмите върху тях могат да се стартират веднага след модификацията, което улеснява разработката. Програмата за интерпретиран език често може да се изпълнява на различни видове машини и операционни системи без допълнителни усилия. Интерпретираните програми обаче работят значително по-бавно от компилираните програми; освен това те не могат да бъдат изпълнени без допълнителна програма за интерпретации.
Някои езици, като Java и C #, попадат между компилирани и интерпретирани езици. А именно, програмата не се компилира на машинен език, а в машинно независим код на ниско ниво, байт код. След това байтовият код се изпълнява от виртуалната машина. Интерпретацията обикновено се използва за изпълнение на байт код, въпреки че отделни части от него могат да бъдат преведени в машинен код директно по време на изпълнението на програмата, използвайки технологията Just-in-time compilation (JIT) за ускоряване на програмата. За Java байт кодът се изпълнява от Java Virtual Machine (JVM), за C # - Общ език за изпълнение.
Този подход в известен смисъл позволява да се използват предимствата както на интерпретатори, така и на компилатори. Трябва да споменем и оригиналния Forth език, който като че ли е едновременно интерпретиран и компилиран.
Използвани символи
Съвременните езици за програмиране са проектирани да използват ASCII, тоест наличието на всички ASCII графични символи е необходимо и достатъчно условие за писане на всякакви езикови конструкции. Контролните знаци ASCII се използват в ограничена степен: разрешени са само връщане на каретката CR, подаване на редове LF и хоризонтален раздел HT (понякога също вертикален раздел VT и прекъсване на страницата FF). Вижте също преносим набор от символи.
Ранните езици, датиращи от ерата на 6-битовите символи, са използвали по-ограничен набор. Например азбуката на Fortran съдържа 49 знака (включително интервал):
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - */()., $ ':
Забележително изключение е APL, който има много специални знаци.
Разширяването на набора от използвани символи се ограничава от факта, че много проекти за разработка на софтуер са международни. Би било много трудно да се работи с код, при който имената на някои променливи са написани с руски букви, други с арабски и трети с китайски символи.
Класове езици за програмиране:
Функционални
Наложително
Процесуално
Езици за програмиране на вектор
Аспектно ориентирани
Декларативна
Езици за динамично програмиране
Образователна
Описания на интерфейса
Прототипна
Обектно ориентиран
Рефлексивен
Логически езици за програмиране
Езици за паралелно програмиране
Сценарий или сценарий
Езотеричен