Защо има толкова много езици за програмиране?

Съществуват над 250 езика за програмиране. Някои от тях са широко използвани в света на бизнеса, като C ++, Java, JavaScript, Ruby и Python. Други са предимно академични, като Lisp. Но други са неясни и езотерични. Може би се питате: "Защо има толкова много езици за програмиране?"

Това много прилича на въпроса: "Защо има толкова много области на математиката? Имаме алгебра, защо се нуждаем от геометрия, смятане и механика на течности?" Всеки език за програмиране цели да реши конкретен проблем. Повече от един език може да бъде в състояние да реши същия проблем, но всеки ще го подходи по различен начин.

Ето някои от основните разлики в езиците за програмиране.

Четливост и поддръжка

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

За разлика от това, Perl е език, който позволява на програмиста да пише една и съща програма по много различни начини, но целта на програмата може да не е веднага ясна за друг читател. Такава програма може да бъде удобна за писане, но трудно за някой друг да разбира и редактира.

производителност

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

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

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

Една от основните ползи от интерпретираните езици е техният потенциал за интерактивно развитие. Тъй като цялата програма не трябва да бъде компилирана, преди да може да бъде изпълнена, кодът може да бъде стартиран интерактивно. Вие сте запознати с това, ако някога сте използвали командния ред на вашата операционна система: въведете команда и видите резултатите. Такъв интерфейс се нарича REPL или "read-eval-print-loop". REPL ви позволява да изпълнявате команди (или блокове от команди) поотделно и да преглеждате резултатите. Lisp, Perl, Python, NodeJS, Ruby и JavaScript са примери за интерпретирани езици, които могат да се изпълняват в REPL.

Интерактивните командни интерфейси, като командния ред на Windows и bash, също се квалифицират като интерпретирани езици. Програмите в тези "езици" се наричат ​​пакетни файлове или шел скриптове.

Специфични случаи на употреба

Често езиците са особено добри при писането на специфични видове програми. Например, NodeJS е предназначен за писане на еднопоточни приложения за мрежата. Неблокиращият файл I / O позволява на програмите да продължат да работят ("да не бъдат блокирани"), докато чакат за предаване на необходимите данни.

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

Лесна работа с прототипи

Някои езици позволяват бързо прототипиране: програмистът може да "просто започва да пише" и да изгражда компонент за компонент, докато програмата не се оформи напълно.

Например, уебсайтът Reddit първоначално е бил написан в Lisp. След като Reddit стартира, целият сайт е пренаписан в Python по много причини, както технически, така и логистични. Въпреки че рефакторизирането на целия код беше голямо начинание, собствениците на сайта не изразиха съжаление. В блог пост през 2005 г. те отбелязват, че Lisp им позволява да създадат нещо, без да знаят точно какво ще стане.

Налични библиотеки

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

Например, стандартните библиотеки С осигуряват високоефективни функции за много ниски системни операции. Perl предоставя много стабилни библиотеки, както и хранилище на модули, които да се изтеглят и използват във вашата програма. Python осигурява широк спектър от вградени функции и модули за почти всичко под слънцето. Clojure, език, подобен на Lisp, който работи на JVM, се възползва от способността му да изпълнява код от обширните съществуващи библиотеки от Java обекти и методи.

Сигурност

Не всички езици се поддават на писане на безопасен код. Програмният език C например е известен с това, че има характеристики (или липса на такива), които могат да доведат до опустошителни уязвимости, като например отместване на нулеви указатели. Други езици се опитват да разрешат тези проблеми с по-строги правила.

Например, някои езици поставят ограничения за това какви операции могат да се извършват на различни типове данни. Най-стриктните от тези езици понякога се наричат ​​"силно типизирани" и могат да предложат спокойствие на програмистите, които дават приоритет на сигурността и стабилността в разработката на софтуер. Примери за силно типизирани езици са Rust, Nim, Ocaml и Haskell.

Езиците могат също да поставят ограничения на "променливостта", способността на обект на данни да променя състоянието си. Вместо обекти, чиито стойности са презаписани, тези езици предпочитат "неизменни" обекти: стойности в паметта, които не могат да бъдат променяни без изрично изключение. Непроменяемите обекти са привлекли интерес, тъй като многоядрените процесори са станали широко разпространени, поради тяхната тенденция да насърчават "безопасността на нишките". В една безопасна за потока програма, повече от един процесор може да работи с един набор от данни с много по-малък риск от грешка. Езиците, които приоритизират неизменяемите обекти, включват Rust и Clojure.

Подкрепа от Общността

Когато пишете програма на нов език, тя помага да имате достъп до активна, страстна общност от разработчици, които активно използват и допринасят за работата на другите. Преди да изберете език за програмиране, научете повече за общността на този език. Някои езици имат вълнуваща, динамична, жизнена потребителска база, в която може да искате да бъдете част, а други езици може да имат малко или никаква общност.

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

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