Сравнение на езиците за програмиране по отношение на скоростта

Езиците за програмиране се използват от разработчиците за записване на специфични набори от инструкции за микропроцесори, изпълняващи специфични задачи. Съществуват много видове езици. Двигателят, създаден от пионера в областта на компютрите Чарлз Бабидж, става предшественик на съвременните личен компютри, или по-точно Логика на компютъра. За да може програмистът да избере правилните инструкции за писане на програма, е необходимо правилно сравнение на езиците за програмиране. Тази статия е за това!

Произход на езиците за програмиране

Произход на езиците за програмиране

През 1942 г. се ражда езикът ENIAC, когато идеята за компютър обхваща научния свят. Това беше 30-тонно чудовище, което съдържаше над 20 000 вакуумни лампи и заемаше площ от 167 квадратни метра. Програмирането беше също толкова тромаво. След като изчисленията бяха направени, бяха необходими седмици за разшифроване на ENIAC, процесът на възстановяване на данни от твърдия диск изобщо не съществуваше. "Шифърът" беше един, така че нямаше нужда да сравняваме езици за програмиране.

През 1945 г. д-р Джон фон Нойман, работейки по усъвършенстването му, открива, че добавянето и запазването на конверторния код към програмирането значително намалява времето за обработка, така че се ражда новата област EDVAC, което означава електронен дискретно-променлив автоматичен компютър. За разлика от ENIAC, EDVAC използва двоичен код вместо десетичен код - поредица от нули и единици на перфокарти, подавани към машината. Десетичният код е първото поколение, а двоичният код - второто. Разработчиците вече разполагат с официален основа за сравняване на езици за програмиране. Както и избор.

Скоро е разработен първият елементарен език за програмиране. Краткият код за условно прехвърляне на контрол е изобретен през 1949 г. За разлика от машинния код, в краткия код се използват логически оператори като "if", "then", за да се дефинират команди, които са подобни на логическите твърдения в математиката, например ако червеното е "THEN stop" или "IF 0", тогава умножете по две.

"Compiler" е роден през 1952 г. FORTRAN е първият от третото поколение езици за програмиране, създаден през 1957 г., последван от LISP, Algol през 1958 г. и COBOL през 1959 г. Езиците за програмиране от трето поколение използват действителни английски думи или синтаксис, които компилаторите превеждат в двоичен или машинен код. Което беше доста удобно. Сравнението на езиците за програмиране през този период дава предимство на Algol или COBOL, в зависимост от техническата мощ на машината.

Алгол или "шифър" алгоритъмите отстъпват място на BNF Pascal през 1968 г. Всяко изчисление може да се извърши само с определена последователност от кодове или функции. Следващите езици са подобрили ефективността на кодирането на програми чрез използване на обектно-ориентирано програмиране, както и методите и синтаксиса за писане на скриптове, създаване на високоструктурирани джаджи на C+, Perl и Java Visual Basic. Вече имаше няколко "шифри". През този период разработчиците са имали много критерии за сравняване на езиците за програмиране.

Видове програми за кодиране

Видове програми за кодиране

Съществуват три вида ясно разграничени езици: машинни езици, езици от ниско ниво и езици от високо ниво.

Софтуерни езикови задачи:

  1. Машинен език, който компютърът разбира директно чрез прилагане на двоичен код, т.е. 0 и 1.
  2. Езиците от ниско ниво са много по-лесни за използване от машинните езици, но до голяма степен се основават на машинните езици на компютрите.
  3. Езиците за програмиране от високо ниво са по-лесни за изучаване, тъй като прилагат думи или команди от естествен език, обикновено английски, например най-известният BASIC.

Видовете езици от високо ниво, в зависимост от гледната точка на функционирането на програмите и философията на тяхното създаване, се разделят на

  1. Imperative, Cobol, Pascal, C и Ada.
  2. Декларативен, Lisp и Prolog.
  3. Обектно ориентирани, Smalltalk и C ++.
  4. Ориентирани към проблемите, конкретни езици за управление.
  5. Естествен език за програмиране, нови видове, които се стремят да доближат проектирането и конструирането до езика на хората. Улеснете използването му.

Друга класификация на високо ниво отчита развитието на компютрите и се използва като критерий за сравняване на езиците за програмиране:

  1. Първото поколение е Machine и Assembler.
  2. Второ поколение - първите високопроизводителни езици за програмиране FORTRAN, COBOL.
  3. Трето поколение - това са езици за програмиране с висока степен на императивност, но много по-използвани и актуални днес: ALGOL 8, PL/I, PASCAL, MODULA.
  4. Четвърто поколение - в приложенията за управление на бази данни: NATURAL, SQL.
  5. Пето поколение - за Изкуствен интелект и обработка на естествен език: LISP, PROLOG.

Критерии за сравнение. Принцип

Критерии за сравнение

Сравняването на уеб езици за програмиране никога не е било проста и обективна задача. Обикновено се разглеждат десет критерия за оценка.

Списък на критериите:

  1. Изразителност - простота на езика за изразяване на алгоритми.
  2. Точност на определението - последователност и липса на двусмислие.
  3. Типове данни и структури.
  4. Модулност - възможност за самостоятелно разработване на компоненти.
  5. Инструменти за въвеждане/извеждане - поддържат взаимодействие с околна среда.
  6. Преносимост.
  7. Ефективност и производителност за сравняване на производителността на езиците за програмиране.
  8. Педагогика - лекота на учене и преподаване.
  9. Обща приложимост - приложимост, използваемост.
  10. Стандартизация.

Този списък се използва за сравнение в много широк спектър от LISP до COBOL и ALGOL и служи като отправна точка за резултатите.

Висока експресивност

Висока експресивност

Езикът C винаги е бил много изразителен и потенциално много икономичен, като се има предвид малкият брой ключови думи и силата на някои оператори. Сега обаче е необходимо да се поддържат по-сложни структури, където Изпълнението на C става несигурно.

Сравняването на синтаксиса на езиците за програмиране е от голямо значение за разработчиците. Например C ++ представлява качествен скок спрямо C, като предоставя нови полезни функции в различни контексти. Например претоварването на оператори дава на езика голяма изразителност при реализирането на научни и математически приложения; синтаксисът на класовете и обектите позволява удобно манипулиране на различни структури от данни и операции. Шаблоните могат да се разглеждат като макроси на прекомпилатора, но с много повече функции. Но всичко това не е освободено от грешки, причинени главно от поддържането на съвместимост със C във фазите на свързване и изпълнение.

В обобщение, C ++ е по-изразителен от C за средни и големи приложения, което може да се очаква, тъй като е проектиран да покрива повече проблеми, използвайки "множество парадигми". Сравнение на езиците за програмиране C и Java Delphi.

Силно изразителен

От своя страна, последният използва синтаксис, много сходен с този на C ++, въпреки че изключва някои от по-тъмните му характеристики. В частност премахването на указателите не я направи по-изразителна, но беше много по-безопасна.

Аспекти за разработчици

Аспекти за разработчици

Езикът C отдавна се смята за добър пример за последователен и недвусмислен език, особено от съвременниците му. Създателите признават някои недостатъци на нотацията. Основният проблем беше големият брой аспекти, предлагани на разработчика, сред които се открояваха размерът и типовете данни. Например в компилаторите за персонални компютри от 80-те години на миналия век наборът от типове "int" е между -32768 и 32767, което е ясно отражение на 16-битовите процесори. Сега е прието да се приемат 32 бита за цели числа, така че диапазонът често варира от -2147483648 до 2147483647. Очевидно това създава сериозни проблеми с преносимостта на езика.

Тези недостатъци, за съжаление, са напълно наследени от C ++ и в момента няма ясно решение за тях. Езикът Java е създаден от самото начало, за да се премахнат неяснотите и зависимостите на изпълнителя и неговите помощни класове, така че в момента е най-добрият от популярните езици.

Типове данни и структури

Езикът C предоставя механизми, които понастоящем се считат за рудиментарни за структурирани типове данни. Масивите позволяват задаване на хомогенни колекции с фиксирана дължина по време на компилиране и са много тясно свързани с манипулирането на указатели. Забележителен недостатък е липсата на типове данни за представяне на низове, които не се поддържат от символни масиви.

Макар че този "минимализъм" допринася за подобряване на производителността по време на изпълнение или за оптимизация по време на компилиране, в много случаи е необходима поддръжка на по-сложни типове и свързани с тях операции като вектори, списъци, опашки и др. На практика има няколко библиотеки, които допълват тези аспекти, като например популярната Glib, но програмирането ѝ е по-трудно, тъй като не е вградена в езика. Следващият пример илюстрира създаването на динамичен масивен вектор.

Създаване на вектор за динамичен масив

Като цяло програмистът трябва да избягва тези видове реализации "от нулата". Следващият пример решава същия проблем с помощта на библиотеката Glib.

Типове данни и структури

От своя страна, C ++ предоставя средства за създаване на много мощни структури от данни, които са тясно интегрирани в езика. Разработчикът може да създава и свои собствени типове с различни свързани операции.

Модулност и нива на опаковане

Модулност и нива на опаковане

Първоначално този критерий се отнасяше до способността за разработване на независими компоненти, които в крайна сметка могат да си взаимодействат. В този смисъл езиците ви позволяват да разработвате функции, класове и пакети, всеки от които има свои собствени конвенции.

Що се отнася до "нивата на опаковане" на компонентите, на практика езикът C предоставя само две нива: видими компоненти във файла с изходния код и глобално видими компоненти като функции и променливи. В езика C ++ понятията "клас" и "пространство от имена" осигуряват две допълнителни нива на "опаковане", докато в Java еквивалентите отговарят на класове и "пакети". Критерият "вход-изход" определя възможността за последователен, случаен и индексиран достъп до файлове. Посочват се и системите за достъп до бази данни.

Достъп до системи за бази данни

Тъй като C е бил и остава един от най-популярните езици, използвани за разработване на средни и големи системи, всяко приложение, което предоставя програмен интерфейс, позволява достъп чрез езика C. Това на практика важи за всички най-популярни търговски и нетърговски бази данни, до които C има неограничен достъп, макар и да не са най-удобните.

От своя страна, програма, написана на C ++, обикновено може да използва API на C. Много системи за бази данни предоставят подобрен обектно-ориентиран интерфейс, достъпен на този език.

Създателите на Java, благодарение на предишния си опит, са стандартизирали обектно-ориентирания интерфейс за преносим достъп до всяка база данни. Този приложен програмен интерфейс се нарича Java Database Connectivity и поради голямата популярност на Java почти всички големи доставчици на бази данни са създали реализации на този интерфейс, което насърчава преносимостта по отношение на достъпността, като същевременно запазва несъвместимостите и разширенията на SQL.

В този смисъл Java въведе радикален, макар и предсказуем подход в разработването на език, който почти няма зависими от изпълнителя функции. Постигнатата преносимост е качествено по-добра от, какво е възможно получени с помощта на езика C/C ++ и изпълнявани автоматично от всеки разработчик. Така че, ако се изисква максимална преносимост при "ниска цена", изборът е Java.

Сравнение на производителността на езиците за програмиране

Сравняване на производителността на езиците за програмиране

Този аспект винаги е вълнувал разработчиците и продължава да бъде предмет на ожесточени дебати. Добре известно е, че почти всички компютри изпълняват програми чрез един или повече централни процесори (CPU), които съдържат така наречения "машинен език" или "машинен код", състоящ се от поредица от относително основни операции или операции на много "ниско ниво". Например запис на байтове в паметта, събиране на двойка числа, четене на байтове от външно устройство и други.

Когато се говори за ефективност/производителност, се има предвид най-вече сравнение на скоростта на езиците за програмиране, с които програмите могат да изпълняват различни задачи. Трябва да се вземат предвид и системните ресурси, необходими за изпълнението му.

Всички езици трябва да бъдат "преведени" в определен момент на "машинен език" за изпълняваните програми. Най-просто казано, този процес се нарича "компилиране" и както C, така и C+ следват този модел на "компилиране" в "машинен език" на процесора. По-специално, C има много прости структури от данни, които са директен превод на "машинен език". В много случаи тази простота прави програмата продуктивна.

Общност и стандартизация

На практика C обикновено се използва за създаване на основни компоненти или компоненти от ниско ниво, напр. ядрото на много операционни системи, докато C++ и Java имат много по-широк обхват - всякакви търговски приложения. Java, до голяма степен благодарение на далновидността и публичността на Sun и различни доставчици на "сървъри за приложения", сега се използва широко в контекста на уеб сървъри, сървлети и JSP, често придружени от многостепенна архитектура.

C и C ++ са добри примери за стандартизирани успешни езици, което допринася за открита конкуренция между реализациите, без предразсъдъци за преносимост. За съжаление за тях не съществуват официални процеси на сертифициране и много разработчици просто пренебрегват определени характеристики, което създава очевидни недостатъци за програмистите, които искат да работят "по стандарт".

Отчасти поради тази причина Sun първоначално изключи възможността за използване на подобен механизъм за стандартизация на Java (език и библиотеки), но впоследствие се съгласи и го проследява (Java Community Program.) Освен това Sun предоставя сложни сертификационни тестове, за да могат разработчиците да потвърдят и публикуват своя ангажимент към стандартите.

Еволюция и надграждане

C и неговата "стандартна библиотека C99" все още очакват пълна актуализация на изпълнението. GNU GCC включва по-голямата част от необходимите функции и е един от най-стабилните налични езици.

C++ продължава своя път с нова актуализация на C+ 0x, фокусирана върху разработването на библиотеки, включително API за графичен интерфейс.От своя страна Java продължава да добавя допълнения и подобрения към основните библиотеки, както и към езика, на който е базирана, с ускорени темпове, като целта е да се създаде модерен и много функционален платформи за различни видове приложения.

Подкрепа за библиотеката

Като се има предвид дългосрочната последователност на приложението, както C, така и C+ разполагат с изключително широк набор от библиотеки за различни цели. Освен това по-голямата част от новите системи предоставят библиотеки, които позволяват взаимодействие с програми, написани на тези езици.

Единственият спорен аспект е, че много малко от тях са стандартизирани по същия начин като езика. От своя страна C ++ разполага с по-обширна библиотека, която включва "стандартната библиотека на C", както и известната библиотека за шаблони "STL", която имплементира различни структури от данни по общ начин и много алгоритми.

От самото начало Java провеждаше добра политика на стандартизиране на много библиотеки чрез класове и интерфейси за голям брой аспекти, които никога не са били разглеждани в C или C+, като графичен потребителски интерфейс, достъп до бази данни, уеб страници. Това обстоятелство съвсем не изключва използването на по-специализирани библиотеки на трети страни. Контекстът на стандартизираните библиотеки около Java е толкова широк, че "платформата Java" е обявена като набор от технологии, предназначени за различни видове приложения.

Най-добрите езици за програмиране 2018. Интерактивен

Най-добрите езици за програмиране 2018

Сравнение на производителността на езиците за програмиране за 2018 г. е достъпно онлайн на адрес Spectrum.ieee. Това приложение определя текущата популярност на десетки съществуващи. Можете да ги филтрирате, като изключите ненужните сектори. Оценките се създават чрез сравняване и обобщаване на 12 показателя от 10 източника. Тази година ще има още един източник за използване, тъй като сайтът на Dice закри API.

Набор за сравнение по подразбиране

Наборът за сравнение по подразбиране дава текущата оценка на IEEE Spectrum, но има предварително зададени опции за тези, които се интересуват повече от това да изберат нещо специално и да създадат своя собствена оценка. За да направите сравнение с данни от предходната година, кликнете върху "Добавяне на сравнение" и след това върху "Промяна на класацията", което ще сравни данните от 2014-2017 г. Това приложение първоначално е разработено в сътрудничество с журналиста по данни на IEEE Spectrum Ник Диакопулос.

Анализът на препълването на стека сравнява данните на IEEE Spectrum за най-актуалните "шифри" 2018. В таблицата за сравнение на езиците за програмиране Python заема почетното първо място. От последните данни за класирането става ясно, че това е един от най-универсалните езици и може да се използва в много различни области. Мнозина смятат, че това е език, който може да служи за почти всякакви цели.

Статии по темата