Защо няма универсален език за програмиране | IMG “IT ACADEMY“

Защо няма универсален език за програмиране? Прочетете мнението на няколко специалиста в тази област.

Андрю Макгрегър, инженер

Няколко езика могат да бъдат използвани за почти всяка цел и всички те се различават по сложност. Към тях се отнасят C ++, Haskell, Rust, Algol, Lisp или Scheme, Forth, PL / 1 и Assembler.

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

Причината, поради която избрах тези конкретни езици, е, че всички те могат да бъдат използвани за програмиране на холографското ядро ​​на OS, програми на системно ниво и потребителски ориентирани приложения, и знам със сигурност, че те са били използвани за писане на ядра, първоначални натоварвания или приложения на голо желязо. Работих с всичките шест езика.

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

Причината, поради която C и C ++ са толкова популярни, е, че те съществуват по-дълго от Haskell и Rust. В допълнение, C и C ++ са близо до златната среда между широчината на използване и допълнителната сложност на използване в сравнение с други възрастни езици от моя списък. Те вероятно са дори по-добри от Haskell.

Rust е твърде млад за да бъде повсеместен, но дайте му 20 години. Може би този език за програмиране е близо до превръщането му в универсален език, но най-практичен днес е С ++.

Елфеус Мадсен, математик и програмист

Мнозина отговориха на този въпрос, посочвайки като пример езици, подходящи за всякакви цели; C, Assembly и Machine Language са най-големите примери. Разбира се, от гледна точка на Тюринг, тези езици са завършени, но те не са толкова добри за изследователско програмиране или прототипи, така че те не са тествани за универсалност. Аз също обичам Python и Ruby, но на тези езици „близостта до желязото“ означава „прегледайте своята програма, намерете най-активните части от нея и пренапишете тези части на C“. Тези езици едва ли са универсални.

Универсалният език за програмиране трябва да достига високи и ниски нива: той трябва да използва максимално абстракциите, но когато се нуждаете от производителност, трябва да сте в състояние да достигнете необходимата дълбочина в хардуера и да манипулирате бита, ако е необходимо. Такива езици съществуват и аз ги наричам „трансцендентални“.

Някои от тези езици, като Common Lisp, Scheme и Smalltalk, започват като високо ниво, но имат механизми (вариращи от опционалното въвеждане и завършващи с ниско ниво на хардуерни команди, използващи вградения асемблер), които правят лесно постигането на ниски нива.

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

За да се създадат операционни системи от нулата, бяха използвани някои езици от по-високо ниво. „С“ е вездесъщ език, създаден във време, когато не е имало толкова много ресурси, но се е превърнал в средата между простота, ниско ниво и високо ниво и е станал много популярен, въпреки факта, че му липсва гъвкавост. Струваше ми се интересно, че само няколко езика, които ми бяха известни по едно и също време, бяха използвани за писане на операционни системи – Lisp, Forth и Smalltalk – те също са трансцендентални.

Така че, ако тези езици са способни на всичко, защо не ги използват повече хора? За съжаление причината е тяхната простота. За да го постигнат, те трябва да пожертват математически приоритет, което обърква мнозина. Lisp използва префикс нотация – (+ 1 2 3) и получава 6. Forth използва постфиксната нотация (+ 1 2 3) и получава 6. И Smalltalk оценява всичко от ляво на дясно, така че от (1 2 + 3 +) получава 9 (това е резултат от това как Smalltalk предава съобщения на обекти, числата са обекти и операциите са съобщения).

И въпреки че, повечето се струва странно, най-смешното е, че всъщност всичко не е толкова объркващо. Това е само въпрос на навик. Сравнете тези езици с всеки език, базиран на Algol (C, Pascal, PHP, Python и др.), който има йерархия от математически операции, които, парадоксално, имат фини различия от един език до друг. Всички тези правила са твърде многобройни и трудно запомнящи се. По-лесно е просто да поставите всичко в скоби, така че да не се налага да се притеснявате за странните правила за приоритет.

 

Уилям Шийн, доктор по компютърни науки и математика, Университет на Хюстън (1995)

Както отбелязват други потребители, C и семейство C са универсални езици. Те включват C, C++, Objective C, Objective C++ и Swift. Тук може да се добави Rust. Съвременните C и C ++ компилатори ви позволяват да пишете инлайн асемблиращ код. Не че това е страхотна идея. И те почти всички могат да си взаимодействат. C ++ може да използва C библиотеки, Swift библиотеки C и Objective C библиотеки.

Python, Ruby и Java могат да използват библиотеките C. Преводачите на JavaScript са написани на C. Така че взаимодействието е наистина активно. C и компанията са подходящи за постигане на сурова производителност. Ако трябва да напишете много кодове бързо, първите в редицата са JavaScript, Python и Ruby. Ако скоростта, сигурността и автоматичното събиране на боклука са важни за вас, опциите са C #, Java и Swift. , Ако трябваше да избера един език за програмиране за всички цели, щях да избера C ++.

 

Leave a Reply

Your email address will not be published. Required fields are marked *