Jestem dość biegły w C / C ++ i potrafię poruszać się po różnych językach skryptowych (awk / sed / perl). Zacząłem używać Pythona o wiele więcej, ponieważ łączy on kilka fajnych aspektów C ++ z możliwościami skryptowymi awk / sed / perl.
Ale dlaczego jest tak wiele różnych języków programowania? Domyślam się, że wszystkie te języki potrafią robić to samo, więc dlaczego nie trzymać się jednego języka i używać go do programowania komputerów? W szczególności, czy jest jakiś powód, dla którego powinienem znać język funkcjonalny jako programista?
Niektóre powiązane lektury:
programming-languages
Suresh
źródło
źródło
Odpowiedzi:
Języki programowania ewoluują i są ulepszane z czasem (innowacje).
Ludzie biorą pomysły z różnych języków i łączą je w nowe języki. Niektóre funkcje są ulepszone (mechanizmy dziedziczenia, systemy typów), niektóre są dodawane (wyrzucanie elementów bezużytecznych, obsługa wyjątków), niektóre są usuwane (
goto
instrukcje, manipulacje wskaźnikami niskiego poziomu).Programiści zaczynają używać języka w określony sposób, który nie jest obsługiwany przez żadną konstrukcję języka. Projektanci języków identyfikują takie wzorce użytkowania i wprowadzają nowe abstrakcje / konstrukcje językowe, aby wspierać takie wzorce użytkowania. W języku asemblera nie było żadnych procedur. Brak klas w C. Brak obsługi wyjątków w (wczesnym) C ++. Brak bezpiecznego sposobu ładowania nowych modułów we wczesnych językach (łatwe w Javie). Brak wbudowanych wątków (łatwa w Javie).
Naukowcy zastanawiają się nad alternatywnymi sposobami wyrażania obliczeń. Doprowadziło to do powstania Lisp i funkcjonalnej gałęzi językowej drzewa językowego, Prolog i gałęzi programowania logiki, Erlanga i innych modeli programowania opartych na aktorach.
Z biegiem czasu projektanci / badacze języków zaczęli lepiej rozumieć wszystkie te konstrukcje i ich interakcje, a także projektować języki tak, aby zawierały wiele popularnych konstrukcji, wszystkie zaprojektowane tak, aby ze sobą współpracowały. W rezultacie powstają wspaniałe języki, takie jak Scala, który ma obiekty i klasy (wyrażone za pomocą cech zamiast pojedynczego lub wielokrotnego dziedziczenia), funkcjonalne funkcje programowania, algebraiczne typy danych ładnie zintegrowane z systemem klas i dopasowaniem wzorców oraz współbieżność oparta na aktorach.
Badacze, którzy wierzą w systemy typu statycznego, starają się poprawić swoją ekspresję, dopuszczając takie rzeczy, jak typowe klasy ogólne w Javie (i wszystkie cudowne rzeczy w Haskell), aby programista uzyskał więcej gwarancji przed uruchomieniem programu, że rzeczy nie będą poszło źle. Systemy typu statycznego często nakładają na programistę duże obciążenie (wpisywanie typów), więc badania poświęcono na zmniejszenie tego obciążenia. Języki takie jak Haskell i ML pozwalają programiście pomijać wszystkie adnotacje typu (chyba że robią coś trudnego). Scala pozwala programiście pomijać typy w obrębie całego zestawu metod, aby uprościć pracę programisty. Kompilator wyszukuje wszystkie brakujące typy i informuje programistę o możliwych błędach.
Wreszcie, niektóre języki są zaprojektowane do obsługi określonych domen. Przykłady obejmują SQL, R, Makefiles, język wprowadzania Graphviz, Mathmatica, LaTeX. Włączenie funkcjonalności tych języków do języków ogólnego przeznaczenia (bezpośrednio) byłoby dość kłopotliwe. Te języki oparte są na abstrakcjach specyficznych dla ich konkretnej dziedziny.
Bez ewolucji w projektowaniu języka programowania wszyscy nadal używalibyśmy języka asemblerowego lub C ++.
Jeśli chodzi o znajomość funkcjonalnego języka programowania : języki funkcjonalne pozwalają na różne obliczenia, często bardziej zwięzłe niż przy użyciu innych języków programowania. Zastanów się nad różnicą między C ++ a Pythonem i pomnóż ją przez 4. Mówiąc poważniej, jak już wspomniano w innej odpowiedzi, programowanie funkcjonalne daje inny sposób myślenia o problemach. Dotyczy to wszystkich innych paradygmatów; niektóre lepiej nadają się do niektórych problemów, a niektóre nie. Właśnie dlatego języki z wieloma paradygmatami stają się coraz bardziej popularne: możesz używać konstrukcji z innego paradygmatu, jeśli potrzebujesz, bez zmiany języka i, co trudniejsze, możesz łączyć paradygmaty w ramach jednego oprogramowania.
źródło
tldr: Nie ma języka srebrnej kuli.
Mam nadzieję, że mnie nie wytoczą, ale oto zdjęcie z jednej z prezentacji Stanforda.
Decydując się na wybór języka, możesz wybrać tylko 2 z tych 3 funkcji .
I dlatego ludzie są smutni i chcą wynaleźć superjęzyk, który obejmie wszystkie 3 z nich.
W rzeczywistości istnieje ogromna lista wymagań (niektóre z nich można zobaczyć w innych odpowiedziach), ale po prostu dodają one szczegóły do podstawowych funkcji. Ponadto istnieją powody historyczne i polityczne, aby preferować jeden język nad drugim.
Kombinacje takich czynników dają nowy język.
( I słyszałem, że każdy dobry programista powinien stworzyć swój własny język;) )
źródło
Świat jest pełen rzeczy, które mają wiele różnych odmian: edytory tekstu, samochody, projekty domów, napoje, cukierki, długopisy, łopaty itp. Przyczyny, dla których mamy tak wiele, można sprowadzić do kilku zasad:
Wejdź do dowolnego sklepu z artykułami biurowymi i spójrz na sekcję „przybory do pisania” - istnieją setki odmian długopisów. Wszystkie robią mniej więcej to samo: dostarczają atrament na powierzchnię do pisania. Ale każde pióro, które widzisz na wystawie, jest dostępne, ponieważ jest to jeden z trzech powyższych powodów.
Ewolucja piór będzie kontynuowana, ponieważ żaden produkt nie spełnia potrzeb każdego użytkownika. Niektóre długopisy są tanie i jednorazowe, inne są drogie i wykonane z materiałów wysokiej jakości; niektórzy używają żeli, niektórzy używają tuszu, niektórzy używają pigmentów; niektóre mają zakręcane czapki, niektóre wcale nie mają czapek; szerokie beczki, wąskie beczki, okrągłe beczki, kwadratowe beczki; krótki długi; czerwony, biały, czarny, niebieski. Itd itd.
Ale wystarczy o długopisach.
Nasze obecne niezliczone języki programowania sięgają pierwszych: numerycznych kodów maszyn dla wczesnych komputerów w latach 40. Prymitywne, trudne w użyciu i pracochłonne, aby wejść do komputera, ale zrobiły to. Niedługo potem programiści przypisali do kodów maszynowych słowa mnemoniczne (takie jak ADD, CALL, LOAD), co dało początek klasie języków zwanych „asemblerami”.
Różne architektury procesorów wymagały różnych kodów mnemonicznych, w zależności od specyficznych funkcji bazowych maszyn. Uwzględnienie tych różnic oznaczało wymyślenie różnych języków asemblera.
(Być może już teraz widzisz, dokąd to zmierza ...)
Programiści przyjrzeli się programom języków asemblera i zobaczyli wzorce: te same sekwencje instrukcji zostaną wykorzystane do utworzenia pętli, warunków, przypisania zmiennych, wywołań funkcji i tak dalej. Tak narodziły się proceduralne języki programowania. Języki te zawierały grupy instrukcji pod parasolem, takie jak „if”, „while”, „let” itp.
Z matematycznej analizy programowania komputerowego powstały języki funkcjonalne - zupełnie nowy sposób patrzenia na obliczenia. Nie lepiej, nie gorzej, po prostu inaczej.
A potem jest zorientowane obiektowo, statycznie, dynamicznie, późne wiązanie, wczesne wiązanie, niskie zużycie pamięci, wysokie użycie pamięci, możliwość równoległego, języki dla określonych zastosowań i tak dalej.
Ostatecznie mamy różne języki programowania, ponieważ chcemy różnych języków programowania. Każdy projektant języka ma własne pomysły na to, jak będzie wyglądał i działał ich język „marzeń”. Różnorodność to dobra rzecz.
źródło
Funkcjonalne języki programowania są zwykle oparte na innym (ale równoważnym pod względem mocy) modelu obliczeń: rachunek lambda . Istnieje kilka nietypowych (z użyciem języka Python) języków, takich jak LISP, Schemat (używany w powszechnie rozpoznawalnej książce / kursie o strukturze i interpretacji programów komputerowych ) oraz języki o typie statycznym, takie jak Haskell, ML, F #.
SICP jest tym, co skłoniło mnie do programowania funkcjonalnego, ale inni ludzie polecają ten artykuł Johna Hughesa i ten wywiad z nim.
Na przykład Microsoft wprowadza teraz programowanie funkcjonalne, które umieściło F # (ich język funkcjonalny dla .NET) w VS2010 i 11; zatrudniają również niektórych programistów Haskell w MSR, IIRC.
Zauważ, że istnieją również funkcjonalne języki programowania inne niż rachunek lambda, takie jak Refal , który opiera się na dopasowywaniu wzorców i przepisywaniu.
Ponieważ poziom abstrakcji w językach funkcjonalnych jest inny, Twoje podejście do rozwiązywania problemów zmienia się, gdy używasz funkcjonalnych technik programowania. Niektórzy twierdzą, że może to ogólnie uczynić cię lepszym programistą.
źródło
Tak. Ponieważ haskell zmienił mój sposób myślenia. To może zmienić sposób myślenia.
Historia: Kiedyś myślałem, że mogę nauczyć się dowolnego języka programowania w ciągu jednego dnia. Pewnego dnia założyłem Haskell. Za pół dnia skończyłem wszystko, co było przed monadami. Teraz minął rok od tamtego dnia i wciąż beznadziejnie utknąłem w Monadach.
Czytać:
Wiki o językach i myślach
Notacja jako narzędzie do przemyślenia Kennetha E. Iversion, wykład Turinga
Notacja jest narzędziem do myślenia. Potrzebujemy różnych dostosowanych do potrzeb notacji, aby wygodnie radzić sobie z różnymi myślami. Tworzymy więc nowe języki.
Również przeczytać . ;-)
źródło
Trudno znaleźć programistę, który w pewnym momencie nie byłby sfrustrowany ograniczeniami używanego języka i postanowił podrapać się. W ten sposób rodzi się nowy język - lub dialekt istniejącego.
Abadi i Cardelli w „A Theory of Objects” rozwijają całą rodzinę języków programowania od podstaw zorientowanych obiektowo. Dowodzą, że programowanie funkcjonalne jest szczególnym przypadkiem OO, ale nie odwrotnie.
Wymyślanie czegoś nowego jest zabawne, dlatego ludzie mają większe szanse na stworzenie innego języka niż na ulepszenie istniejącego. Oczywiście są opiekunowie języków, którzy nie przyjmują zmian w swojej wizji. Najlepszym przykładem jest przepaść między zwolennikami Common Lisp i Scheme.
źródło
Ponieważ inni już udzielili dobrych odpowiedzi na to pytanie, po prostu zacytuję Alana Perlisa.
Warto również przeczytać http://weblog.raganwald.com/2004/10/beware-of-turing-tar-pit.html .
źródło
Dlaczego na świecie jest tyle krajów? Czy nie byłoby łatwiej, gdybyśmy mieli 5 lub 6 supermocarstw, a nawet jedno uniwersalne królestwo Ziemi? Łatwo jest argumentować, dlaczego nie byłoby lepiej --- na początek konkurencja różnych krajów może prowadzić do postępu, a z punktu widzenia demokracji, praw człowieka itp. Wiele krajów może być lepszych niż jeden - - ale to nie wyjaśnia, dlaczego mamy wiele krajów. To wyjaśnia tylko, dlaczego wiele krajów byłoby lepszych .
Podobnie możesz zapytać, dlaczego tak wiele różnych ludzkich języków? Polski, arabski, mandaryński ... Czy nie byłoby łatwiej, gdyby istniał tylko jeden język? Można by się kłócić w obie strony, ale byłyby to powody, dla których byłoby lepiej, gdyby życie było w taki czy inny sposób. Nie tłumaczyłoby przyczyn tak wielu różnych języków ludzkich.
Chodzi o to, że na świecie jest wielu ludzi i wszyscy robimy wszystko, wszyscy mamy swoje opinie, wszyscy chcemy rządzić i mieć własny kraj lub język programowania, i często myślimy, że wiemy lepiej niż inni, a przynajmniej nie zawracaj sobie głowy zrozumieniem, co mają do zaoferowania inni.
Przeczytaj ten bardzo pouczający post na blogu: Dlaczego tak wiele frameworków sieciowych w języku Python? Najwyraźniej w Pythonie jest około 50 frameworków internetowych. To jest po prostu śmieszne; nie ma absolutnie żadnego rozsądnego uzasadnionego powodu. Ale autor postu odpowiada: istnieje wiele frameworków internetowych Python, ponieważ tak łatwo jest je stworzyć . Nie potrzebujesz racjonalnego powodu, że jest więcej frameworków Python lub więcej języków programowania. Ludzie będą tworzyć nowe, ponieważ nie wiedzą, co jest już dostępne, lub dlatego, że mają nadzieję, że mogą zarabiać pieniądze, lub po prostu dlatego, że tworzenie nowych rzeczy jest zabawne!
Pozwól mi opisać osobisty przykład. Około 10 lat temu pisałem trochę kodu C ++ dla fińskiej firmy. Wiesz, w Finlandii mają te ogromne ciężarówki, które, cóż, podróżują na duże odległości i dostarczają wiele rzeczy z jednego miejsca do drugiego. Jestem pewien, że w Ameryce są takie ciężarówki. Typowym problemem jest więc upewnienie się, że wszystkie 24 opony są w porządku. Oczywiście istnieje sprawdzona technologia: można monitorować ciśnienie i temperaturę, a drastyczne zmiany wskazują, że coś poszło nie tak. Oczywiście cała ta technologia jest zastrzeżona, opatentowana i ma wszystkie implikacje. (Pamiętaj: patenty mają promować innowację!) Ta fińska firma chciała wykryć stan opon po ... dźwięku. Pomysł polegał na zainstalowaniu mikrofonów w celu odsłuchu dźwięku dochodzącego ze wszystkich opon i wykonania jakiejś magii przetwarzania sygnałów na tych dźwiękach, aby sprawdzić, czy jedna z opon ma jakiś problem, a ja robiłem prototyp tego szaleństwa. (Mieli nawet dedykowane laboratorium do nagrywania dźwięków próbnych; kiedy przysłali mi imponujący zapis wideo z konkretnej okazji, kiedy udało im się eksplodować próbną oponę po poddaniu jej ciśnieniu 5 lub 10 ton i podgrzaniu jej do absurdalnej temperatury .) Oczywiście, znowu, nie było żadnego konkretnego racjonalnego powodu tego rozwoju, z wyjątkiem tego, że była fajna i niektórzy ludzie chcieli zarabiać pieniądze. Zrozum także, że istnieje wiele powodów, dla których ktoś zacząłby rozwijać nowy język programowania. Nie ma potrzeby ani nawet możliwości uczenia się ich wszystkich. (Mieli nawet dedykowane laboratorium do nagrywania dźwięków próbnych; kiedy przysłali mi imponujący zapis wideo z konkretnej okazji, kiedy udało im się eksplodować próbną oponę po poddaniu jej ciśnieniu 5 lub 10 ton i podgrzaniu jej do absurdalnej temperatury .) Oczywiście, znowu, nie było żadnego konkretnego racjonalnego powodu tego rozwoju, z wyjątkiem tego, że była fajna i niektórzy ludzie chcieli zarabiać pieniądze. Zrozum także, że istnieje wiele powodów, dla których ktoś zacząłby rozwijać nowy język programowania. Nie ma potrzeby ani nawet możliwości uczenia się ich wszystkich. (Mieli nawet dedykowane laboratorium do nagrywania dźwięków próbnych; kiedy przysłali mi imponujący zapis wideo z konkretnej okazji, kiedy udało im się eksplodować próbną oponę po poddaniu jej ciśnieniu 5 lub 10 ton i podgrzaniu jej do absurdalnej temperatury .) Oczywiście, znowu, nie było żadnego konkretnego racjonalnego powodu tego rozwoju, z wyjątkiem tego, że była fajna i niektórzy ludzie chcieli zarabiać pieniądze. Zrozum także, że istnieje wiele powodów, dla których ktoś zacząłby rozwijać nowy język programowania. Nie ma potrzeby ani nawet możliwości uczenia się ich wszystkich. kiedy przysłali mi imponujący zapis wideo z konkretnej okazji, kiedy udało im się eksplodować próbną oponę po poddaniu jej ciśnieniu 5 lub 10 ton i podgrzaniu jej do absurdalnej temperatury.) Oczywiście, znowu, nie było żadnej szczególnej racjonalności powód tego rozwoju, z wyjątkiem tego, że było fajnie i niektórzy ludzie chcieli zarabiać pieniądze. Zrozum także, że istnieje wiele powodów, dla których ktoś zacząłby rozwijać nowy język programowania. Nie ma potrzeby ani nawet możliwości uczenia się ich wszystkich. kiedy przysłali mi imponujący zapis wideo z konkretnej okazji, kiedy udało im się eksplodować próbną oponę po poddaniu jej ciśnieniu 5 lub 10 ton i podgrzaniu jej do absurdalnej temperatury.) Oczywiście, znowu, nie było żadnej szczególnej racjonalności powód tego rozwoju, z wyjątkiem tego, że było fajnie i niektórzy ludzie chcieli zarabiać pieniądze. Zrozum także, że istnieje wiele powodów, dla których ktoś zacząłby rozwijać nowy język programowania. Nie ma potrzeby ani nawet możliwości uczenia się ich wszystkich.
Oczywiście wszystko to obowiązuje tylko wtedy, gdy wierzysz w ewolucję. Jeśli wierzysz w jakąś formę inteligentnego projektu, że Bóg stworzył również wszystkie języki programowania, to musiałbyś znaleźć cel za tym tłumem. Być może Bóg chciał promować konkurencję między różnymi językami programowania, aby sztuka tworzenia oprogramowania osiągnęła najwyższy możliwy poziom.
Podsumowując, jest wiele osób, wiele krajów, wiele języków programowania. Taka jest natura życia! Bądźmy za to wdzięczni: oznacza to po prostu, że dziedzina programowania / informatyki jest bardzo żywa i kwitnie.
źródło
Dlaczego jest tyle różnych języków programowania?
Ponieważ trzeba dokonać wyboru:
Na szczęście dwie ostatnie są nieistotnymi dychotomiami, tzn. Obie opcje można umieścić w jednym języku programowania. Ale pierwsze trzy dychotomie dają 8 kombinacji. Nawet w idealnym świecie istniałoby co najmniej 8 języków programowania. Podczas drążenia w dół, w ramach poszczególnych paradygmatów pojawiałyby się dalsze, bardziej zróżnicowane opcje projektowania. Na przykład, jeśli ktoś zdecyduje się na oparty na klasach język o typie statycznym, istnieją różne sposoby projektowania systemu typów. Nie ma jeszcze kanonicznego sposobu na zrobienie tego. Jeśli zdecydujemy się na współbieżny język programowania, istnieją różne sposoby reprezentowania współbieżności: semafory, warunkowe regiony krytyczne, monitory, przekazywanie komunikatów (synchroniczne vs. asynchroniczne). W ramach synchronicznego przekazywania wiadomości
Część badań, które wykonujemy w teorii języków programowania, poświęcona jest rozwiązaniu tych dychotomii. Na przykład pracowałem nad rozwiązaniem dychotomii między programowaniem imperatywnym i funkcyjnym w artykule zatytułowanym „ Zadania dla języków aplikacji ”, a nasza metoda została teraz przyjęta przez Haskell, dzięki czemu jest to zarówno język funkcjonalny, jak i imperatywny. To nie znaczy, że dychotomia jest w pełni rozwiązana. Programista Haskell wciąż stoi przed wyborem, czy rozwiązać swój problem funkcjonalnie, czy koniecznie. Luca Cardelli pracował nad rozwiązaniem dychotomii pisania statycznego vs. dynamicznego. Paul Levy pracował nad rozwiązaniem dychotomii call-by-name vs. call-by-name . Nie wszystkie z tych wyników zostały jeszcze zaimplementowane w prawdziwych językach programowania.
Jeśli wszystkie te języki potrafią robić to samo, dlaczego nie trzymać się jednego języka i używać go do programowania komputerów?
Ponieważ dla programisty w prawdziwym świecie nie wystarczy po prostu coś zrobić. Ma również znaczenie, jak to się robi. Po prawidłowym wykonaniu domena problemu jest wiernie reprezentowana w programie, modułowość problemu zostaje zachowana, a programy stają się łatwe do zrozumienia, modyfikacji i utrzymania. Wszystkie te rzeczy wpływają na koszty opracowania i utrzymania programu. Wpływają również na niezawodność i bezpieczeństwo oprogramowania.
Na przykład wiele osób korzysta z programu o nazwie „ Quicken ” dla kont finansowych. Oryginalny program został opracowany w wewnętrznej wersji Visual Basic i był całkiem niezły. Trudno było jednak go przedłużyć i utrzymać. Z biegiem lat, gdy firma próbowała rozszerzyć go o nowe funkcje, program stawał się coraz bardziej niespokojny z milionami niezadowolonych klientów na całym świecie. Prawdopodobnie skorzystają na przeprojektowaniu oprogramowania w silnie typowym obiektowym języku programowania.
W szczególności, czy jest jakiś powód, dla którego powinienem znać język funkcjonalny jako programista?
Historycznie „programowanie funkcjonalne” zostało wymyślone przez Godela, Kleene i Churcha zgodnie ze standardową praktyką matematyczną, a „programowanie imperatywne” zostało wymyślone przez Turinga, aby uściślić pojęcie obliczeń mechanicznych. Przed Turingiem nie ma dowodów, że matematyka kiedykolwiek analizowała idee programowania imperatywnego. (Chociaż wszystkie tradycyjne algorytmy matematyczne zostały wyrażone w „imperatywnym stylu”, ich podstawowa treść była nadal funkcjonalna.) Zatem programowanie imperatywne jest bardzo nowe dla ludzkiej cywilizacji, a jego matematyka wciąż nie jest zbyt dobrze rozumiana. Najważniejszym powodem, dla którego każdy powinien znać programowanie funkcjonalne, jest zrozumienie, w jaki sposób programowanie może być matematyczne. (Nie przyznam, że programowanie imperatywne jest niematematyczne, w co chcielibyście uwierzyć funkcjonalni programiści. Zgadzam się jednak, że przy obecnym stanie wiedzy nie wiemy jeszcze, jak matematycznie programować imperatywnie. Wielu z nas pracuje właśnie nad tym problemem).
źródło
Możesz patrzeć na to jak na ewolucję.
Na początku komputery były programowane wyłącznie za pomocą kodów binarnych. Następnie wprowadzono mnemoniki i języki asemblera, w dużej mierze zależne od użytego procesora.
Po wprowadzeniu języków wyższego poziomu (poziom 3) (Pascal, C, ADA, Cobol), niektóre bardzo ogólne (jak C), niektóre bardziej odpowiednie do obsługi danych (Cobol), niektóre do obliczeń (Fortran).
Potem powstały języki 4. poziomu, takie jak języki logiczne (jak Prolog). Najbardziej ogólne języki to następcy języków trzeciego poziomu; niektóre z nich to Java, C #.
Widzimy także języki specyficzne dla Internetu / sieci, takie jak ASP.NET, PHP.
I języki dla konkretnej domeny (DSL), które w większości działają razem z ogólnym językiem.
Są też języki dla dzieci do nauki programowania, takie jak LOGO.
Również języki do szybkiego pisania kodu, takie jak Python, Ruby itp., Języki do obsługi XML (XSLT).
I prawdopodobnie zapomniałem wiele języków, a nawet kategorii języków.
źródło
inne odpowiedzi są dobre, dodają kilka nowych punktów widzenia. jak pisze DC, języki ewoluują tak jak prawdziwe ludzkie języki! i zapożyczają od siebie koncepcje i składnię jak prawdziwe ludzkie języki. innymi słowy, istnieje także dość realne studium etymologii języków komputerowych.
oznacza to również, że była to długa historia i harmonogram, który zaczął się około lat 30. XX wieku od rachunku lambda .
istnieje silna wzajemna zależność / synergia / symbioza między teorią a aplikacją z językami programowania. wymyślono nowe aplikacje, co prowadzi do nowych teorii i odwrotnie. język programowania jest pod wieloma względami pomostem między teorią a aplikacją .
ciekawym studium przypadku z historii jest Fortran. nie jest to dobrze znane, ale wcześniejsze wersje Fortran (głównie przed Fortran77) miały niejednoznaczną gramatykę . oznacza to, że to samo polecenie może być legalnie „interpretowane” / kompilowane na różne sposoby przez kompilator, ponieważ istniało wiele poprawnych „interpretacji” (to nie jest to samo techniczne pojęcie „interpretowanych” języków).
więc teoria gramatyki formalnej była rozwijana w czasie, gdy wynaleziono Fortran, i był to mały kryzys, gdy odkryto kwestię niejednoznaczności językowej. Składnia Fortana została przeformułowana, aby uniknąć tej dwuznaczności, a późniejsze języki miały większą wrażliwość na dwuznaczność gramatyczną w swoim projekcie. OOP jest również bardzo ważnym / najważniejszym przykładem koncepcji teoretycznej / postępu w językach programowania, który „wpływa” lub „faluje” na wiele istniejących języków, przekształcając je.
inne studia przypadków to wynalezienie nowych technologii. na przykład wynalazek relacyjnej bazy danych miał ogromny wpływ na języki komputerowe, np. z SQL i interfejsami języka komputerowego (np. java, „JDBC”). podobnie sieć WWW o jeszcze większym zasięgu. zdawało się, że wokół boomu dotcomów wybuchła języki , które w dużej mierze pokrywały się z wczesnym rozwojem WWW i można je porównać z eksplozjami ewolucyjnymi .
Wydaje się również, że istnieje tendencja do wzrostu liczby nowych języków programowania w połączeniu z ogromną wykładniczo rosnącą mocą przetwarzania prawa Mooresa, co niektórzy sądzą, że może zwalniać.
wydaje się, że obecne dalekosiężne trendy w językach programowania zmierzają w kierunku Big Data i Parallelization, np. z MapReduce . istnieje również aktualne zainteresowanie zamknięciami .
innym kluczowym aspektem języków jest to, że reprezentują one coraz wyższy poziom abstrakcji . bazują na abstrakcjach niższego poziomu, aby tworzyć abstrakcje wyższego poziomu (podobne do piramidy). w ten sposób postęp ewolucji języka komputerowego jest prawdopodobnie nieskończony i możemy być względnie pewni, że nowe ważne będą nadal wymyślane długo w przyszłości. jest to prawdopodobnie analogiczne do podobnej koncepcji w psychologii zwanej chunkingiem - ogólnie mówiąc, budując koncepcje mentalne wyższego poziomu z bloków niższego poziomu.
każdy, kto studiował wiele języków komputerowych, musi przyznać, że można zaobserwować mentalność stada, dzięki czemu niektóre ich aspekty okazują się przesadną modą, tj. nie są tak krytyczne, jak zalecane, a nawet wymierają z czasem (w użyciu)! niektóre z podstawowych pomysłów / zmian pozostają, ale (nadmierny) szum zanika. w tym sensie języki programowania również wchodzą i wychodzą z mody . moim zdaniem dwa przypadki z ostatniej dekady, które są rzeczywiście przydatne, ale zostały przesadzone:
w wielu głównych językach można zaobserwować coraz większe podobieństwo do siebie, tak że wszystkie mają tendencję do konwergencji w kierunku wdrażania wielu podobnych funkcji na swój własny sposób, tj. jak w przypadku wykresów porównawczych produktów, które „sprawdzają” wiele funkcji w siatce.
źródło
Nie były, to tylko chwyt marketingowy - jeśli sprawisz, że język będzie wyglądał jak „C”, to obniży to widoczną barierę wejścia.
Niektóre, które nie mają żadnego wpływu na C: SQL, Pascal, Delphi, FORTRAN, COBOL, Ada, PowerBuilder, HyperTalk, Lisp, Simula, FOCAL, BASIC, PL / I, Algol, Algol-68, SNOBOL, Modula, Visual BASIC, Opiekun, logo, Forth, DIBOL, Helix, AppleScript, Python, Erlang, Ruby, Pick, angielski, RPG, PL / SQL, ASP, Prolog, SmallTalk, Perl, bash, Wand BASIC, REXX, język wsadowy DOS.
Ci, którzy NAPRAWDĘ lubią C, ale mają z tym bardzo mało wspólnego: JavaScript, Java, C #, (prawdopodobnie) Objective-C.
To wszystko marketing, Java, C ++ i JavaScript wygląda trochę jak C, ale pod przykryciem trudno byłoby inaczej.
źródło