Historia języków programowania - History of programming languages

Historia języków programowania przęseł z dokumentacją wczesnych komputerów mechanicznych do nowoczesnych narzędzi do rozwoju oprogramowania. Wczesne języki programowania były wysoce wyspecjalizowane, opierały się na notacji matematycznej i podobnie niejasnej składni. Przez cały XX wiek badania nad teorią kompilatorów doprowadziły do ​​stworzenia języków programowania wysokiego poziomu, które wykorzystują bardziej dostępną składnię do komunikowania instrukcji.

Pierwszym językiem programowania wysokiego poziomu był Plankalkül , stworzony przez Konrada Zuse w latach 1942-1945. Pierwszy język wysokiego poziomu z powiązanym kompilatorem został stworzony przez Corrado Böhma w 1951 r. na potrzeby jego pracy doktorskiej. Pierwszym komercyjnie dostępnym językiem był FORTRAN (FORMULA TRANSLATION), opracowany w 1956 r. (pierwszy podręcznik pojawił się w 1956 r., ale po raz pierwszy opracowany w 1954 r.) przez zespół kierowany przez Johna Backusa w IBM .

Wczesna historia

W latach 1842-1849 Ada Lovelace przetłumaczyła pamiętnik włoskiego matematyka Luigiego Menabrea o najnowszej proponowanej maszynie Charlesa Babbage'a: Maszynie Analitycznej ; uzupełniła pamiętnik notatkami, które szczegółowo określały metodę obliczania liczb Bernoulliego za pomocą silnika, uznawanego przez większość historyków za pierwszy opublikowany program komputerowy na świecie.

Pierwsze kody komputerowe specjalizowały się w ich zastosowaniach: np. Alonzo Church był w stanie wyrazić rachunek lambda w sposób schematyczny, a maszyna Turinga była abstrakcją działania maszyny znakującej taśmę.

Jacquard Looms i silnik różnicowy Charlesa Babbage'a miały proste języki do opisywania działań, które te maszyny powinny wykonywać, dlatego byli twórcami pierwszego języka programowania.

Pierwsze języki programowania

W latach dwudziestych powstały pierwsze rozpoznawalnie nowoczesne komputery zasilane elektrycznie. Ograniczona prędkość i pojemność pamięci zmusiły programistów do pisania ręcznie dostrojonych programów w języku asemblerowym . W końcu zdano sobie sprawę, że programowanie w asemblerze wymaga dużego wysiłku intelektualnego.

Wczesną propozycją języka programowania wysokiego poziomu był Plankalkül , opracowany przez Konrada Zuse dla jego komputera Z1 w latach 1963-1975, ale nie zaimplementowany w tym czasie.

Pierwsze funkcjonujące języki programowania przeznaczone do przekazywania instrukcji komputerowi zostały napisane na początku lat pięćdziesiątych. John Mauchly „s Code Krótki , zaproponowany w 1949 roku, był jednym z pierwszych języków wysokiego poziomu, jaki kiedykolwiek powstał na komputer elektroniczny . W przeciwieństwie do kodu maszynowego instrukcje Short Code reprezentowały wyrażenia matematyczne w zrozumiałej formie. Jednak program musiał być tłumaczony na kod maszynowy za każdym razem, gdy był uruchamiany, co sprawiało, że proces był znacznie wolniejszy niż uruchomienie równoważnego kodu maszynowego.

Na początku lat pięćdziesiątych Alick Glennie opracował Autocode , prawdopodobnie pierwszy skompilowany język programowania, na Uniwersytecie w Manchesterze . W 1954 roku RA Brooker opracował dla Mark 1 drugą iterację języka, znaną jako „Mark 1 Autocode” . Brooker opracował również autokod dla Ferranti Mercury w latach 50. XX wieku we współpracy z Uniwersytetem w Manchesterze. Wersja dla EDSAC 2 została opracowana przez Douglasa Hartree z University of Cambridge Mathematical Laboratory w 1961 roku. Znany jako EDSAC 2 Autocode, był prostym rozwinięciem Mercury Autocode dostosowanym do lokalnych warunków i znanym z optymalizacji kodu wynikowego i języka źródłowego diagnostyka, która była w tym czasie zaawansowana. Współczesny, ale odrębny wątek rozwoju, Atlas Autocode został opracowany dla maszyny Atlas 1 Uniwersytetu w Manchesterze .

W 1954 FORTRAN został wynaleziony w IBM przez zespół kierowany przez Johna Backusa ; był to pierwszy szeroko stosowany język programowania ogólnego przeznaczenia wysokiego poziomu, który miał funkcjonalną implementację, a nie tylko projekt na papierze. Kiedy FORTRAN został wprowadzony po raz pierwszy, był postrzegany ze sceptycyzmem z powodu błędów, opóźnień w rozwoju i porównawczej wydajności "ręcznie zakodowanych" programów napisanych w asemblerze. Jednak na szybko rozwijającym się rynku sprzętu; język w końcu stał się znany ze swojej skuteczności. Jest to nadal popularny język do obliczeń o wysokiej wydajności i jest używany w programach, które porównują i oceniają najszybsze superkomputery na świecie .

Inny wczesny język programowania został opracowany przez Grace Hopper w USA, nazwany FLOW-MATIC . Został opracowany dla UNIVAC I w Remington Rand w okresie od 1955 do 1959. Hopper odkrył, że klienci przetwarzający dane biznesowe nie czują się komfortowo z zapisem matematycznym, i na początku 1955 roku wraz ze swoim zespołem napisała specyfikację dla angielskiego języka programowania i wdrożyła prototyp. Kompilator FLOW-MATIC stał się publicznie dostępny na początku 1958 r. i był zasadniczo gotowy w 1959 r. Flow-Matic miał duży wpływ na projekt COBOL-a , ponieważ tylko on i jego bezpośredni potomek AIMACO były w tym czasie w użyciu.

Inne języki, które są nadal używane, to LISP (1958), wynaleziony przez Johna McCarthy'ego i COBOL (1959), stworzony przez Komitet Krótkiego Zasięgu. Kolejnym kamieniem milowym w późnych latach pięćdziesiątych było opublikowanie przez komitet amerykańskich i europejskich informatyków „nowego języka algorytmów”; ALGOL 60 Raport (dalej " ALGO rithmic L anguage"). Raport ten skonsolidował wiele pomysłów krążących w tamtym czasie i zawierał trzy kluczowe innowacje językowe:

  • zagnieżdżona struktura bloków: sekwencje kodu i skojarzone deklaracje mogą być grupowane w bloki bez konieczności przekształcania ich w oddzielne, jawnie nazwane procedury;
  • zakres leksykalny : blok może mieć własne zmienne prywatne, procedury i funkcje, niewidoczne dla kodu poza tym blokiem, czyli ukrywanie informacji .

Kolejną innowacją, związaną z tym, był sposób opisu języka:

  • matematycznie dokładna notacja, forma Backus-Naur (BNF), została użyta do opisania składni języka. Prawie wszystkie kolejne języki programowania wykorzystywały wariant BNF do opisania bezkontekstowej części swojej składni.

Algol 60 był szczególnie wpływowy w projektowaniu późniejszych języków, z których niektóre wkrótce stały się bardziej popularne. W Burroughs dużych systemów zaprojektowano tak, by zostać zaprogramowany w rozszerzonym podzbioru Algol.

Kluczowe idee Algola były kontynuowane, tworząc ALGOL 68 :

  • składnia i semantyka stały się jeszcze bardziej ortogonalne, z anonimowymi procedurami, rekurencyjnym systemem typowania z funkcjami wyższego rzędu itp.;
  • formalnie zdefiniowano nie tylko część bezkontekstową, ale także pełną składnię i semantykę języka, w terminach gramatyki Van Wijngaardena , formalizmu zaprojektowanego specjalnie do tego celu.

Wiele rzadko używanych funkcji językowych Algola 68 (na przykład bloki współbieżne i równoległe) oraz złożony system skrótów składniowych i automatycznej koercji typu sprawiły, że stał się niepopularny wśród realizatorów i zyskał reputację trudnego . Niklaus Wirth faktycznie wyszedł z komitetu projektowego, aby stworzyć prostszy język Pascal .

Fortran

Niektóre godne uwagi języki, które powstały w tym okresie to:

Ustalenie podstawowych paradygmatów

Schemat

Okres od późnych lat 60. do późnych lat 70. przyniósł wielki rozkwit języków programowania. Większość obecnie używanych paradygmatów językowych została wynaleziona w tym okresie:

Każdy z tych języków zrodził całą rodzinę potomków, a większość współczesnych języków ma przynajmniej jednego z nich w swoim przodku.

Lata sześćdziesiąte i siedemdziesiąte były również świadkiem poważnej debaty na temat zalet „ programowania strukturalnego ”, które zasadniczo oznaczało programowanie bez użycia „ goto ”. Znaczna część programistów uważała, że ​​nawet w językach, które zapewniają „goto”, używanie go z wyjątkiem rzadkich sytuacji jest złym stylem programowania . Debata ta była ściśle związana z projektowaniem języka: niektóre języki w ogóle nie zawierały „goto”, co zmuszało programistę lub nauczyciela do programowania strukturalnego.

Aby zapewnić jeszcze szybsze czasy kompilacji, niektóre języki zostały skonstruowane dla " kompilatorów jednoprzebiegowych ", które oczekują, że najpierw zostaną zdefiniowane podrzędne procedury, tak jak w Pascal , gdzie główna procedura lub funkcja sterownika jest ostatnią sekcją listingu programu.

Niektóre godne uwagi języki, które powstały w tym okresie to:

  • 1967 – BCPL (poprzednik B)
  • 1968 – Logo
  • 1969 – B (poprzednik C)
  • 1970 – Pascal
  • 1970 – Czwarty
  • 1972 - C                                                   

Lata 80.: konsolidacja, moduły, wydajność

MATLAB
Erlang
Tcl

Lata osiemdziesiąte to lata względnej konsolidacji w językach imperatywnych . Zamiast wymyślać nowe paradygmaty, wszystkie te ruchy rozwinęły idee wymyślone w poprzedniej dekadzie. C++ łączy programowanie obiektowe i systemowe. Rząd Stanów Zjednoczonych ustandaryzował Ada , język programowania systemów przeznaczony do użytku przez wykonawców systemów obronnych. W Japonii i gdzie indziej ogromne sumy wydano na badanie tak zwanych języków programowania piątej generacji, które zawierały konstrukcje programowania logicznego. Społeczność języków funkcjonalnych przeszła na standaryzację ML i Lisp. Badania nad Mirandą , językiem funkcjonalnym z leniwą oceną , zaczęły się rozwijać w tej dekadzie.

Jednym z ważnych nowych trendów w projektowaniu języków był zwiększony nacisk na programowanie dla systemów o dużej skali poprzez użycie modułów lub jednostek organizacyjnych kodu o dużej skali. Modula , Ada i ML wszystkie opracowały godne uwagi systemy modułowe w latach 80-tych. Systemy modułowe były często powiązane z generycznymi konstrukcjami programowania ---generykami będącymi w istocie modułami parametrycznymi (zobacz także polimorfizm w programowaniu obiektowym ).

Chociaż nie pojawiły się nowe główne paradygmaty dla imperatywnych języków programowania, wielu badaczy rozszerzyło idee wcześniejszych języków i dostosowało je do nowych kontekstów. Na przykład języki systemów Argus i Emerald przystosowały programowanie obiektowe do systemów rozproszonych .

Lata 80. przyniosły również postęp w implementacji języka programowania. Ruch RISC w architekturze komputerowej postulował, że sprzęt powinien być projektowany dla kompilatorów, a nie dla programistów asemblera. Wspomagany przez ulepszenia szybkości procesora, które umożliwiły coraz bardziej agresywne techniki kompilacji, ruch RISC wywołał większe zainteresowanie technologią kompilacji dla języków wysokiego poziomu.

Technologia językowa była kontynuowana w tym kierunku aż do lat 90. XX wieku.

Niektóre godne uwagi języki, które powstały w tym okresie to:

Lata 90.: era Internetu

Haskell
Lua
PHP
Rebola

Szybki rozwój Internetu w połowie lat 90. był kolejnym ważnym wydarzeniem historycznym w językach programowania. Otwierając radykalnie nową platformę dla systemów komputerowych, Internet stworzył okazję do przyjęcia nowych języków. W szczególności język programowania JavaScript zyskał popularność dzięki wczesnej integracji z przeglądarką internetową Netscape Navigator. Różne inne języki skryptowe znalazły szerokie zastosowanie w tworzeniu dostosowanych aplikacji dla serwerów internetowych, takich jak PHP. Lata 90. nie przyniosły fundamentalnej nowości w językach imperatywnych , ale wiele rekombinacji i dojrzewania starych idei. Ta era rozpoczęła rozprzestrzenianie się języków funkcjonalnych . Wielką filozofią jazdy była produktywność programisty. Pojawiło się wiele języków "szybkiego tworzenia aplikacji" (RAD), które zwykle były dostarczane z IDE , garbage collection i były potomkami starszych języków. Wszystkie takie języki były zorientowane obiektowo . Należą do nich Object Pascal , Visual Basic i Java . Szczególnie dużo uwagi poświęcono Javie.

Bardziej radykalne i innowacyjne niż języki RAD były nowe języki skryptowe . Nie wywodziły się one bezpośrednio z innych języków i zawierały nowe składnie i bardziej liberalne włączanie funkcji. Wiele osób uważa te języki skryptowe za bardziej produktywne nawet niż języki RAD, ale często z powodu wyborów, które czynią małe programy prostszymi, a duże trudniejsze do napisania i utrzymania. Niemniej jednak języki skryptowe stały się najbardziej znanymi językami używanymi w sieci.

Niektóre godne uwagi języki, które powstały w tym okresie to:

Obecne trendy

Ewolucja języka programowania trwa, zarówno w przemyśle, jak i w badaniach. Niektóre z najnowszych trendów obejmowały:

D Język programowania
Groovy
PowerShell
Rdza
Zadrapanie

Niektóre godne uwagi języki opracowane w tym okresie to:

Inne nowe języki programowania to Red , Crystal , Elm , Hack , Haxe , Zig , Reason i Ballerina .

Wybitni ludzie

Anders Hejlsberg
Yukihiro Matsumoto
Grace M. Hopper
Bjarne Stroustrup
Niklaus Wirth

Kilka kluczowych osób, które pomogły rozwinąć języki programowania:

Zobacz też

Bibliografia

  1. ^ Hopper (1978) s. 16.
  2. ^ Knut, Donald E .; Pardo, Luis Trabb. „Wczesny rozwój języków programowania”. Encyklopedia Informatyki i Technologii . Marcela Dekkera. 7 : 419–493.
  3. ^ Praca doktorska Corrado Böhma
  4. ^ J. Fuegi i J. Francis (październik-grudzień 2003), „Lovelace & Babbage i tworzenie „notatek 1843 „ Roczniki Historii Informatyki , 25 (4): 16-26, doi : 10,1109/ MAHC.2003.1253887
  5. ^ W 1998 i 2000 stworzono kompilatory języka jako ćwiczenie historyczne. Rojas, Raul i in. (2000). „Plankalkül: Pierwszy język programowania wysokiego poziomu i jego implementacja”. Institut frame Informatik, Freie Universität Berlin, Raport techniczny B-3/2000. (pełny tekst)
  6. ^ Sebesta, WS (2006). Koncepcje języków programowania . P. 44. Numer ISBN 978-0-321-33025-3.
  7. ^ „Umiera twórca Fortrana, John Backus – Tech i gadżety – NBC News” . Wiadomości NBC. 2007-03-20 . Źródło 2010-04-25 .
  8. ^ „CSC-302 99S: Klasa 02: Krótka historia języków programowania” . Matematyka.grin.edu. Zarchiwizowane z oryginału dnia 2010-07-15 . Źródło 2010-04-25 .
  9. ^ Padwa, David (luty 2000). „Kompilator FORTRAN I” (PDF) . Informatyka w nauce i inżynierii . 2 (1): 70–75. doi : 10.1109/5992.814661 . Źródło 7 listopada 2019 .
  10. ^ Eugene Loh (18 czerwca 2010). „Idealny język programowania HPC” . Kolejka . Stowarzyszenie Maszyn Komputerowych. 8 (6).
  11. ^ „HPL - Przenośna implementacja wysokowydajnego testu Linpack dla komputerów z pamięcią rozproszoną” . Źródło 2015-02-21 .
  12. ^ Hopper (1978) s. 16.
  13. ^ Sammet (1969) s. 316
  14. ^ Sammet (1978) s. 204.
  15. ^ Gordon, Michael JC (1996). „Od LCF do HOL: krótka historia” (PDF) . P. 3 . Źródło 2015-05-04 . Edinburgh LCF, w tym interpreter ML, został zaimplementowany w Lisp.
  16. ^ Manjoo, Farhad (29 lipca 2020 r.). „Skąd wiesz, że człowiek to napisał?” . New York Times . ISSN  0362-4331 . Źródło 4 sierpnia 2020 .
  17. ^ TIOBE (25 maja 2018). "TIOBE Index, Top 100 języków programowania według TIOBE Index" . www.tiobe.com . TIOBE_indeks .
  18. ^ „GitHub Octoverse 2018” . Zarchiwizowane od oryginału 22.03.2019.
  19. ^ Rojas, Raul; Hashagen, Ulf (2002). Pierwsze komputery: historia i architektura . MIT Naciśnij. P. 292. Numer ISBN 978-0262681377. Źródło 25 października 2013 .

Dalsza lektura

  • Rosen, Saul , (redaktor), Systemy i języki programowania , McGraw-Hill, 1967.
  • Sammet, Jean E. , Języki programowania: historia i podstawy , Prentice-Hall, 1969.
  • Sammet, Jean E. (lipiec 1972). „Języki programowania: historia i przyszłość”. Komunikaty ACM . 15 (7): 601-610. doi : 10.1145/361454.361485 . S2CID  2003242 .
  • Richard L. Wexelblat (red.): Historia języków programowania , Academic Press 1981.
  • Thomas J. Bergin i Richard G. Gibson (red.): Historia języków programowania , Addison Wesley, 1996.

Zewnętrzne linki