Historia języków programowania - History of programming languages
Historia informatyki |
---|
Sprzęt komputerowy |
Oprogramowanie |
Informatyka |
Nowoczesne koncepcje |
Według kraju |
Kalendarium obliczeń |
Słowniczek informatyki |
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 .
Niektóre godne uwagi języki, które powstały w tym okresie to:
|
Ustalenie podstawowych paradygmatów
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:
- Speakeasy , opracowany w 1964 roku w Argonne National Laboratory (ANL) przez Stanleya Cohena , jestpakietem numerycznymOOPS (system programowania zorientowanego obiektowo , podobnie jak późniejsze MATLAB , IDL i Mathematica ). Speakeasy ma przejrzystąskładnię fundamentu Fortran . Po raz pierwszy dotyczył wydajnych obliczeń fizycznych w ANL, został zmodyfikowany do użytku badawczego (jako „Modeleasy”) dla Zarządu Rezerwy Federalnej na początku lat 70., a następnie został udostępniony komercyjnie; Speakeasy i Modeleasy są nadal w użyciu.
- Simula , wynaleziona pod koniec lat 60. przez Nygaarda i Dahla jako nadzbiór Algola 60, była pierwszym językiem zaprojektowanym do obsługi programowania obiektowego .
- C , wczesnyjęzyk programowania systemów , został opracowany przez Dennisa Ritchie i Kena Thompsona w Bell Labs w latach 1969-1973.
- Smalltalk (połowa lat 70.) dostarczył kompletnego projektu języka zorientowanego obiektowo.
- Prolog , zaprojektowany w 1972 roku przez Colmerauera , Roussela i Kowalskiego , był pierwszym logicznym językiem programowania .
- ML zbudował polimorficzny system typów (wynaleziony przez Robina Milnera w 1973 r.) na bazie Lispu, będąc pionierem statycznych języków programowania funkcjonalnego .
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:
Lata 80.: konsolidacja, moduły, wydajność
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
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:
- Zwiększenie wsparcia dla programowania funkcyjnego w językach głównego nurtu używanych komercyjnie, w tym programowanie czysto funkcjonalne w celu ułatwienia wnioskowania i zrównoleglenia kodu (zarówno na poziomie mikro, jak i makro)
- Konstrukcje do obsługi programowania współbieżnego i rozproszonego .
- Mechanizmy dodawania do języka weryfikacji bezpieczeństwa i niezawodności : rozszerzone sprawdzanie statyczne, typowanie zależne , kontrola przepływu informacji, statyczne bezpieczeństwo wątków .
- Alternatywne mechanizmy komposowalności i modularności: domieszki , cechy , typeklasy , delegaty , aspekty .
- Tworzenie oprogramowania zorientowanego na komponenty.
-
Metaprogramowanie , refleksja lub dostęp do abstrakcyjnego drzewa składni
- AOP lub programowanie zorientowane na aspekty umożliwiające programistom wstawianie kodu w innym module lub klasie w „punktach łączenia”
- Języki specyficzne dla domeny i generowanie kodu
- Zwiększone zainteresowanie dystrybucją i mobilnością.
- Integracja z bazami danych, w tym XML i relacyjnymi bazami danych .
- Open source jako filozofia rozwoju języków, w tym GNU Compiler Collection i języków takich jak PHP , Python , Ruby i Scala .
- Większe zainteresowanie wizualnymi językami programowania, takimi jak Scratch , LabVIEW i PWCT
- Masowo równoległe języki do kodowania procesorów graficznych na 2000 procesorów GPU i macierzy superkomputerów, w tym OpenCL
- Wczesne badania nad (jeszcze niemożliwymi do wdrożenia) językami programowania obliczeń kwantowych
- Wczesne badania nad zastosowaniem technik sztucznej inteligencji do generowania kodu, np. przy użyciu GPT-3
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
Kilka kluczowych osób, które pomogły rozwinąć języki programowania:
- Alan Cooper , twórca Visual Basic .
- Alan Kay , pionier prac nad programowaniem obiektowym i twórca Smalltalk .
- Anders Hejlsberg , twórca Turbo Pascal , Delphi , C# i TypeScript .
- Arthur Whitney , twórca A+ , k i q .
- Bertrand Meyer , wynalazca Eiffla .
- Bjarne Stroustrup , twórca C++ .
- Brendan Eich , twórca JavaScript .
- Brian Kernighan , współautor pierwszej książki o języku programowania C wraz z Dennisem Ritchie , współautor języków programowania AWK i AMPL .
- Chuck Moore , wynalazca Forth , pierwszego konkatenacyjnego języka programowania i znanego nazwiska w projektowaniu mikroprocesorów maszyn stosowych.
- Chris Lattner , twórca Swift i LLVM .
- Cleve Moler , twórca MATLAB .
- Dennis Ritchie , wynalazca C . System operacyjny Unix, system operacyjny Plan 9.
- Douglas McIlroy miał wpływ i zaprojektował takie języki jak SNOBOL , TRAC , PL/I , ALTRAN , TMG i C++ .
- Grace Hopper , która jako pierwsza użyła terminu kompilator i programista FLOW-MATIC , wpłynęła na rozwój COBOL . Spopularyzowano niezależne od maszyn języki programowania i termin „ debugowanie ”.
- Guido van Rossum , twórca Pythona .
- James Gosling , główny programista Javy i jej prekursora, Oak .
- Jean Ichbiah , główny projektant Ady , Ada 83 .
- Jean-Yves Girard , współtwórca polimorficznego rachunku lambda (System F).
- Jeff Bezanson , główny projektant i jeden z głównych twórców Julii .
- Jeffrey Snover , wynalazca PowerShell .
- Joe Armstrong , twórca Erlanga .
- John Backus , wynalazca Fortran i współpracował przy projektowaniu ALGOL 58 i ALGOL 60 .
- John C. Reynolds , współtwórca polimorficznego rachunku lambda (System F).
- John McCarthy , wynalazca LISP .
- John von Neumann , twórca koncepcji systemu operacyjnego .
- Graydon Hoare , wynalazca Rust .
- Ken Thompson , wynalazca B , Go , Inferno (system operacyjny) i współautor systemu operacyjnego Unix .
- Kenneth E. Iverson , twórca APL i współtwórca J wraz z Rogerem Hui .
- Konrad Zuse zaprojektował pierwszy język programowania wysokiego poziomu , Plankalkül (który wpłynął na ALGOL 58 ).
- Kristen Nygaard , pionier programowania obiektowego, współtwórca Simula .
- Larry Wall , twórca języka programowania Perl (patrz Perl i Raku ).
- Martin Odersky , twórca Scali , a wcześniej współautor projektu Javy .
- Martin Richards rozwinął BCPL język programowania, protoplastów B i C języków.
- Nathaniel Rochester , wynalazca pierwszego asemblera (IBM 701).
- Niklaus Wirth , wynalazca Pascala , Moduli i Oberona .
- Ole-Johan Dahl , pionier programowania obiektowego, współtwórca Simula .
- Rasmus Lerdorf , twórca PHP .
- Rich Hickey , twórca Clojure .
- Jean Paoli , współtwórca XML
- Robert Gentleman , współtwórca R .
- Robert Griesemer , współtwórca Go .
- Robin Milner , twórca ML i współudział w wnioskowaniu o typach polimorficznych Hindleya-Milnera .
- Rob Pike , współtwórca Go , Inferno (system operacyjny) i Plan 9 (system operacyjny ) współautor systemu operacyjnego.
- Ross Ihaka , współtwórca R .
- Stanley Cohen , wynalazca Speakeasy , który został stworzony za pomocą systemu programowania obiektowego OOPS, pierwszej instancji w 1964 roku.
- Stephen Wolfram , twórca Mathematica .
- Brad Cox , współtwórca Objective-C .
- Walter Bright , twórca D .
- Yukihiro Matsumoto , twórca Ruby .
- Ryan Dahl , twórca node.js .
Zobacz też
Bibliografia
- ^ Hopper (1978) s. 16.
- ^ Knut, Donald E .; Pardo, Luis Trabb. „Wczesny rozwój języków programowania”. Encyklopedia Informatyki i Technologii . Marcela Dekkera. 7 : 419–493.
- ^ Praca doktorska Corrado Böhma
- ^ 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
- ^ 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)
- ^ Sebesta, WS (2006). Koncepcje języków programowania . P. 44. Numer ISBN 978-0-321-33025-3.
- ^ „Umiera twórca Fortrana, John Backus – Tech i gadżety – NBC News” . Wiadomości NBC. 2007-03-20 . Źródło 2010-04-25 .
- ^ „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 .
- ^ 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 .
- ^ Eugene Loh (18 czerwca 2010). „Idealny język programowania HPC” . Kolejka . Stowarzyszenie Maszyn Komputerowych. 8 (6).
- ^ „HPL - Przenośna implementacja wysokowydajnego testu Linpack dla komputerów z pamięcią rozproszoną” . Źródło 2015-02-21 .
- ^ Hopper (1978) s. 16.
- ^ Sammet (1969) s. 316
- ^ Sammet (1978) s. 204.
-
^ 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.
- ^ 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 .
- ^ TIOBE (25 maja 2018). "TIOBE Index, Top 100 języków programowania według TIOBE Index" . www.tiobe.com . TIOBE_indeks .
- ^ „GitHub Octoverse 2018” . Zarchiwizowane od oryginału 22.03.2019.
- ^ 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.