Sformalizowane języki programowania. Języki programowania wysokiego poziomu. Rodzaje programowania Języki programowania to języki formalne stworzone specjalnie do komunikacji między człowiekiem a komputerem. Stosowane oprogramowanie komputerowe

W ciągu ostatnich 70 lat programowanie stało się rozległą dziedziną działalności człowieka, której wyniki w swoim praktycznym znaczeniu są dość porównywalne z najnowszymi wynikami z dziedziny fizyki jądrowej czy badań kosmicznych. Wyniki te są w dużej mierze związane z pojawieniem się i szybkim rozwojem języków algorytmicznych wysokiego poziomu.

Nowoczesne języki programowania wysokiego poziomu, takie jak Pascal, C, Ada, Java, C++, C# i inne, nadal są najpopularniejszym i najpotężniejszym narzędziem dla programistów zajmujących się tworzeniem zarówno oprogramowania systemowego, jak i aplikacji. Wraz z pojawieniem się nowych zadań i potrzeb funkcjonalność tych języków jest stale rozszerzana poprzez tworzenie coraz bardziej zaawansowanych wersji.

Kolejny kierunek rozwoju języków programowania związany jest z tworzeniem wyspecjalizowanych (problemowych) systemów i środowisk programistycznych dla użytkowników niebędących programistami (technologów, projektantów, ekonomistów itp.). Przykładami takich systemów i środowisk są CAD do różnych celów, systemy automatycznego uczenia, systemy nauczania na odległość, systemy eksperckie i modelujące w gospodarce itp. Przeznaczenie odpowiednich języków problemowych używanych w takich systemach często znajduje odzwierciedlenie w ich nazwach, na przykład: „Język opisu schematów urządzeń technologicznych”, „Język opisu scenariusza szkolenia”, „Język modelowania sytuacji” itp.

Zarówno języki programowania ogólnego przeznaczenia, jak i języki programowania specyficzne dla domeny mają jedną wspólną cechę – są

języki formalne. Co to jest język formalny? W najbardziej ogólnej formie na to pytanie można odpowiedzieć w następujący sposób: język - to dużo propozycji język formalny - jest to język, którego zdania budowane są według określonych reguł.

Zdania są zbudowane ze słów, a słowa z symboli (liter). Zbiór wszystkich dopuszczalnych znaków nazywa się alfabetycznie język. W językach programowania zdania zwykle odpowiadają operatorom (lub instrukcjom), a na klawiaturze komputera widzimy znaki alfabetu.

Zarówno języki naturalne, jak i języki programowania są zbiorami nieskończonymi. W jednym języku programowania można napisać nieograniczoną liczbę programów.

Jak ustalić reguły konstruowania zdań w języku formalnym? Odpowiadając na to pytanie, zaczniemy od dwóch ważnych pojęć: składnia oraz semantyka język.

Składnia język określa strukturę poprawnych zdań i słów, aw językach programowania między innymi dopuszczalne struktury tekstów programów.

Istnieją różne sposoby opisywania składni języków formalnych (drugi rozdział samouczka poświęcony jest sposobom jej opisywania). Najczęściej używane w językach programowania są forma backusu - Natura(BNF) i diagramy składniowe.

BNF został opracowany przez Backusa i po raz pierwszy został użyty do ścisłego opisu języka ALGOL-60 w 1963 roku. Ta forma jest używana zarówno do opisu struktury języka jako całości, jak i do opisu poszczególnych konstrukcji językowych (podzbiorów języka) i jego elementy - operatory, identyfikatory, wyrażenia, liczby itp.

Poniżej przedstawiono przykłady BNF, które definiują składnię dziesiętnych liczb całkowitych oraz składnię wyrażeń arytmetycznych zawierających operatory „+” i „*”.

Liczby dziesiętne BNF:

= 0|1|...|9

BNF wyrażeń arytmetycznych:

:= () a

W powyższych wyrażeniach a oznacza dowolny identyfikator i jest traktowany jako znak alfabetu, z którego zbudowane jest wyrażenie.

Po lewej stronie BNF w nawiasach ostrych zapisane są nazwy zdefiniowanych parametrów. kategorie syntaktyczne(pojęcia, jednostki), symbol „:=” oznacza „jest”, „to”, „jest zdefiniowany jako”, symbol „|” oznacza „lub”.

Prawa część BNF definiuje możliwe opcje konstruowania określonych wartości tych kategorii, w tym przypadku wartości liczb dziesiętnych i określonych wyrażeń arytmetycznych. BNF zawiera również alfabet znaków, z których składają się te wartości. Dla dziesiętnych liczb całkowitych alfabet jest zbiorem (+,-, 0, 1,..., 9), a dla wyrażeń jest to zbiór (a, *, +, (,)}.

Proces konstruowania znaczeń kategorii składniowej polega na wycofanie wartości te poprzez kolejne podstawienia prawych części zasad BNF na lewe. Poniżej przedstawiono wyprowadzenia liczby „-320” i wyrażenia "a+a*a" używając odpowiedniego BNF:

BNF są bardzo podobne do gramatyka formalna stosowane w teorii języków formalnych (niektórzy autorzy je identyfikują).

To właśnie pojawienie się BNF pobudziło szybki rozwój teorii języków formalnych i jej zastosowania do stosowanych problemów rozwoju języków programowania i projektowania tłumaczy.

Jeżeli w rozważanym BNF każda kategoria składniowa z lewej strony reguł jest oznaczona przez A, B oraz Z odpowiednio, a zamiast symbolu:= użyj -wtedy otrzymamy następujące formy:

Dla dziesiętnych liczb całkowitych:

A->B+B-B B^>CBC C->0 | 11... | 9

Dla wyrażeń arytmetycznych:

A^A+BB

B->B*SS

C^>(A)a

Tak się pisze regulamin gramatyka formalna. Symbole oznaczające kategorie składniowe, w tym przypadku PNE w gramatykach formalnych nazywamy symbole nieterminalne a znaki alfabetu to terminal.

W praktyce po uzyskaniu gramatyki języka programowania w „pierwszym przybliżeniu” konieczne jest zbadanie jego właściwości, aw niektórych przypadkach dokonanie pewnych przekształceń. Wynika to głównie z konieczności sprowadzenia gramatyki do postaci dogodnej do skonstruowania odpowiedniego tłumacza. W procesie dokonywania tych przekształceń z formalnego punktu widzenia nie ma znaczenia, jakie konkretne kategorie składniowe i symbole alfabetu BNF zawierają. Dlatego na tym etapie zwykle przechodzi się do gramatyki formalnej i stosuje odpowiednie metody teorii języków formalnych. Jednocześnie nie należy całkowicie utożsamiać BNF z gramatyką formalną. Definicja gramatyki w teorii języków formalnych jest bardziej ogólna. W szczególności można je wykorzystać do opisu zależności kontekstowe, których nie zawsze da się uniknąć w rozwoju języków programowania i których nie da się opisać za pomocą BNF.

Cechą charakterystyczną gramatyk języków programowania jest obecność w nich rekurencji. rekurencyjność oznacza, że ​​definicja jakiejś kategorii składniowej zawiera samą zdefiniowaną kategorię (jest to tzw. jawna rekurencja). Na przykład w rozważanym BNF definicje kategorii oraz zawierają same te kategorie po prawej stronie. rekursja - prawie nieunikniona właściwość gramatyk języków programowania, która umożliwia uczynienie ich nieskończonymi. Jednocześnie niektóre typy rekurencji, które zostaną omówione później, znacznie komplikują proces opracowywania odpowiednich tłumaczy.

Zatrzymajmy się krótko nad innym wspomnianym wyżej sposobem opisu składni języka za pomocą diagramów składniowych. Niektórzy autorzy, opisując standard językowy, preferują tę metodę ze względu na jej większą przejrzystość. Przykłady diagramów składni można znaleźć w wielu książkach o programowaniu (np. w ). Zauważ, że obie metody opisu - zarówno BNF, jak i diagramy składniowe są równoważne i zawsze możesz przełączyć się z jednej metody opisu na drugą.

Rozważ teraz koncepcję semantykę języka. Jeżeli składnia języka określa strukturę jego poprawnych zdań i tekstów, to semantyka określa poprawność ich znaczenia. Z kolei poprawność znaczenia zależy od znaczeń słów składających się na zdanie. Na przykład, jeśli w języku naturalnym składnia zdania jest zdefiniowana jako

następnie możesz zbudować zestaw zdań o różnych znaczeniach. Na przykład zdania „jazdy samochodem” i „samochód myśli” są poprawne składniowo. Jednak pierwsze zdanie ma poprawne znaczenie, o drugim można powiedzieć, że jest bez znaczenia. Semantyka określa więc zbiór znaczeń i dopuszczalnych odpowiedników między zdaniami (tekstami) a znaczeniami.

Ponadto semantyka języka zależy od właściwości obiektów opisanych w tym języku. Gdyby w rozpatrywanym przykładzie samochód był wyposażony w komputer z programami do obliczania optymalnych trybów i tras przejazdu, to zdanie drugie przestałoby wydawać się bez znaczenia.

Podobnie w językach programowania, składniowo dobrze sformułowany operator przypisania

będzie semantycznie niepoprawny, jeśli a wynosi 10,5 (a = 10,5), a b jest fałszywe (b = fałsz).

Formalny opis semantyki języków programowania okazał się zadaniem znacznie trudniejszym niż opis składni. Większość prac poświęconych zastosowaniu metod matematycznych w implementacji języków programowania obejmuje właśnie zagadnienia opisu składni i konstruowania metod parsowania. W tej dziedzinie rozwinęła się dość holistyczna teoria i metodologia. Jednocześnie semantyka języka i analiza semantyczna są nadal przedmiotem wielu badań.

Wiele aspektów semantyki języka programowania można opisać jako listę konwencji semantycznych, które mają charakter ogólny, nieformalny. Na przykład programiści znają takie konwencje, jak „każdy identyfikator w bloku jest deklarowany raz”, „zmienna musi być zdefiniowana, zanim będzie można jej użyć” itp.

Jako przykład udanego zastosowania teorii języków formalnych w dziedzinie semantyki i analizy semantycznej można przytoczyć aparat gramatyk translacyjnych atrybutów, który pozwala uwzględnić uzgodnienia semantyczne w opisie języka i kontrolować ich przestrzeganie podczas tłumaczenia programu.

Jeśli chodzi o prognozy dotyczące perspektyw dalszego rozwoju języków programowania, opinie są dość szerokie, aż po diametralnie przeciwstawne. Niektórzy autorzy uważają, że każdy z języków ma swoje własne cechy semantyczne, które czynią go wygodnym i atrakcyjnym dla określonego obszaru programowania (na przykład Prolog i Lisp koncentrują się na rozwiązywaniu problemów sztucznej inteligencji; Fortran jest najbardziej skuteczny w rozwiązywanie problemów obliczeniowych; Cobol - używany do obliczeń ekonomicznych itp.). Dlatego należy tworzyć wszystkie nowe języki, które mają określone funkcje lub okresowo aktualizować istniejące wersje, a nie próbować tworzyć języka uniwersalnego. Na poparcie tego punktu widzenia przytacza się argument, że wszystkie ambitne projekty stworzenia języka uniwersalnego nie powiodły się (wystarczy przypomnieć niespełnione nadzieje związane z rozwojem języków ADAiPL-1).

Inna część autorów uważa, że ​​od opublikowania standardów pierwszych języków programowania - Fortran, Algol itp. - w latach 60. W XX wieku nastąpiła „stabilizacja” języków w tym sensie, że konstrukcje językowe o podobnym przeznaczeniu w różnych językach mają praktycznie taką samą podstawę semantyczną, pomimo różnic w słownictwie i składni. Dlatego, gdy tylko uda się sformalizować tę wspólną bazę semantyczną, będzie można przystąpić do tworzenia języka uniwersalnego, który nie będzie już językiem programowania w tradycyjnym tego słowa znaczeniu, ale wykrojami struktur semantycznych. Program zostanie przedstawiony jako zestaw tych konstrukcji, a edytor tekstu ustąpi miejsca edytorowi struktury. Jako przykład częściowej implementacji tego podejścia podano środowiska programowania wizualnego, takie jak Delphi, C++ Builder itp.

Koniec

Początek

Powtarzać

Początek

Pseudokody

Pseudokod to system notacji i reguł zaprojektowany do jednolitego pisania algorytmów. Zajmuje pozycję pośrednią między językiem naturalnym a formalnym.

Z jednej strony jest zbliżony do zwykłego języka naturalnego, więc algorytmy można w nim pisać i czytać jak zwykły tekst. Z drugiej strony w pseudokodzie zastosowano pewne konstrukcje formalne i symbolikę matematyczną, co zbliża notację algorytmu do ogólnie przyjętej notacji matematycznej.

Pseudokod nie przyjmuje ścisłych zasad składniowych pisania poleceń charakterystycznych dla języków formalnych, co ułatwia pisanie algorytmu na etapie projektowania i umożliwia wykorzystanie szerszego zestawu poleceń przeznaczonych dla abstrakcyjnego executora. Jednak w pseudokodzie zwykle istnieją pewne konstrukcje, które są nieodłączne od języków formalnych, co ułatwia przejście od pisania w pseudokodzie do pisania algorytmu w języku formalnym. W szczególności w pseudokodzie, a także w językach formalnych, istnieją słowa pomocnicze, których znaczenie jest ustalone raz na zawsze. W tekście drukowanym są one pogrubione, a w tekście odręcznym podkreślone. Nie ma jednej ani formalnej definicji pseudokodu, więc możliwe są różne pseudokody, różniące się zestawem słów usługowych i podstawowymi (podstawowymi) strukturami. Jako przykład podajemy wpis na jednym z pseudokodów algorytmu:

algorytm algorytm Euklidesa;

PA pierwsza liczba nie jest równa drugiej

jeśli liczby są równe

następnie Zatrzymaj się wszystko;

Inaczej określić większą z dwóch liczb;

h Zamień większą liczbę na różnicę między większą i mniejszą liczbą

koniec;

weź pierwszą liczbę jako odpowiedź

Algorytm ten można napisać w prostszy sposób, ale właśnie taki zapis podano w celu zademonstrowania głównych możliwych konstrukcji pseudokodu. Ze względu na swoją specyfikę pseudokody, podobnie jak inne sposoby pisania algorytmów opisane powyżej, są zorientowane na człowieka.

Powyżej zauważono, że przy zapisywaniu algorytmu w formie werbalnej, w postaci diagramu lub pseudokodu dopuszcza się pewną dowolność przy wyświetlaniu poleceń. Jednocześnie taki zapis jest na tyle dokładny, że pozwala zrozumieć istotę sprawy i wykonać algorytm.

Jednak w praktyce jako wykonawców algorytmów wykorzystywane są automaty specjalne - komputery elektroniczne (komputery). Dlatego algorytm przeznaczony do wykonania na komputerze musi być napisany w języku „zrozumiałym” dla komputera. I tu na pierwszy plan wysuwa się potrzeba dokładnego zapisu poleceń, nie pozostawiającego miejsca na dowolną interpretację przez ich wykonawcę. Dlatego język pisania algorytmu musi być sformalizowany. Taki język nazywa się język programowania , a zapisem algorytmu w tym języku jest program dla komputer.


Język programowania jest językiem sformalizowanym, będącym połączeniem alfabetu, zasad pisania konstrukcji (składnia) oraz zasad interpretacji konstrukcji (semantyka).

Obecnie istnieje kilkaset języków programowania przeznaczonych do różnych obszarów zastosowań komputerów, czyli do różnych klas zadań rozwiązywanych za pomocą komputerów. Języki te są klasyfikowane według różnych poziomów, biorąc pod uwagę stopień zależności języka od konkretnego komputera.

Programowanie to cała nauka, która pozwala tworzyć programy komputerowe. Zawiera ogromną liczbę różnych operacji i algorytmów, które tworzą jeden język programowania. Co to jest i jakie są języki programowania? Artykuł zawiera odpowiedzi, a także przeglądową listę języków programowania.

Historię powstania i zmiany języków programowania należy badać wraz z historią rozwoju technologii komputerowej, ponieważ pojęcia te są ze sobą bezpośrednio powiązane. Bez języków programowania niemożliwe byłoby stworzenie jakiegokolwiek programu do obsługi komputera, co oznacza, że ​​tworzenie komputerów stałoby się bezsensownym zajęciem.

Pierwszy język maszynowy został wynaleziony w 1941 roku przez Konrada Zuse, który jest wynalazcą silnika analitycznego. Nieco później, w 1943 roku, Howard Aiken stworzył maszynę Mark-1, zdolną do odczytywania instrukcji na poziomie kodu maszynowego.

W latach pięćdziesiątych istniało aktywne zapotrzebowanie na tworzenie oprogramowania, a język maszynowy nie był w stanie wytrzymać dużej ilości kodu, dlatego stworzono nowy sposób komunikacji z komputerami. „Assembler” to pierwszy język mnemoniczny, który zastąpił instrukcje maszynowe. Z biegiem lat lista języków programowania tylko się zwiększa, ponieważ zakres technologii komputerowej staje się coraz bardziej rozległy.

Klasyfikacja języków programowania

Obecnie istnieje ponad 300 języków programowania. Każdy z nich ma swoje własne cechy i nadaje się do jednego konkretnego zadania. Wszystkie języki programowania można podzielić na kilka grup:

  • Zorientowany aspektowo (główną ideą jest rozdzielenie funkcjonalności w celu zwiększenia wydajności modułów programu).
  • Strukturalny (oparty na idei stworzenia hierarchicznej struktury poszczególnych bloków programu).
  • Logiczne (oparte na teorii aparatury logiki matematycznej i regułach rozdzielczych).
  • Zorientowany obiektowo (w takim programowaniu nie stosuje się już algorytmów, ale obiekty należące do określonej klasy).
  • Wieloparadygmat (połącz kilka paradygmatów, a programista sam decyduje, jakiego języka użyć w tym czy innym przypadku).
  • Funkcjonalne (głównymi elementami są funkcje, które zmieniają wartość w zależności od wyników obliczeń danych początkowych).

Programowanie dla początkujących

Wiele osób pyta, czym jest programowanie? Zasadniczo jest to sposób komunikacji z komputerem. Dzięki językom programowania możemy ustawić konkretne zadania dla różnych urządzeń, tworząc specjalne aplikacje lub programy. Podczas studiowania tej nauki na początkowym etapie najważniejsze jest, aby wybrać odpowiednie (interesujące Cię) języki programowania. Poniżej lista dla początkujących:

  • Basic został wynaleziony w 1964 roku, należy do rodziny języków wysokiego poziomu i służy do pisania programów użytkowych.
  • Python („Python”) jest dość łatwy do nauczenia się ze względu na jego prostą, czytelną składnię, ale zaletą jest to, że można go używać zarówno do tworzenia zwykłych programów komputerowych, jak i aplikacji internetowych.
  • Pascal („Pascal”) – jeden z najstarszych języków (1969) stworzony do nauczania studentów. Jego nowoczesna modyfikacja ma ścisłe typowanie i strukturę, ale „Pascal” jest językiem całkowicie logicznym, zrozumiałym na poziomie intuicyjnym.

To nie jest pełna lista języków programowania dla początkujących. Istnieje ogromna liczba składni, które są łatwe do zrozumienia iz pewnością będą poszukiwane w nadchodzących latach. Każdy ma prawo samodzielnie wybrać kierunek, który będzie dla niego interesujący.

Początkujący mają możliwość przyspieszenia nauki programowania i jego podstaw dzięki specjalnym narzędziom. Głównym asystentem jest zintegrowane środowisko programistyczne Visual Basic dla programów i aplikacji („Visual Basic” to także język programowania, który odziedziczył styl języka Basic z lat 70.).

Poziomy języka programowania

Wszystkie sformalizowane języki przeznaczone do tworzenia, opisywania programów i algorytmów rozwiązywania problemów na komputerach dzielą się na dwie główne kategorie: języki programowania niskiego poziomu (lista znajduje się poniżej) i języki wysokiego poziomu. Porozmawiajmy o każdym z nich osobno.

Języki niskiego poziomu są przeznaczone do tworzenia instrukcji maszynowych dla procesorów. Ich główną zaletą jest to, że wykorzystują notację mnemoniczną, czyli zamiast ciągu zer i jedynek (z systemu liczb binarnych) komputer zapamiętuje znaczące skrócone słowo z języka angielskiego. Najbardziej znane języki niskiego poziomu to „Assembler” (istnieje kilka podgatunków tego języka, z których każdy ma wiele wspólnego, ale różni się jedynie zestawem dodatkowych dyrektyw i makr), CIL (dostępny w .Net platforma) i kod bajtowy JAVA.

Języki programowania wysokiego poziomu: lista

Języki wysokiego poziomu są zaprojektowane z myślą o wygodzie i wydajności aplikacji, są dokładnym przeciwieństwem języków niskiego poziomu. Ich cechą wyróżniającą jest obecność konstrukcji semantycznych, które zwięźle i zwięźle opisują struktury i algorytmy programów. W językach niskiego poziomu ich opis w kodzie maszynowym byłby zbyt długi i niezrozumiały. Z drugiej strony języki wysokiego poziomu są niezależne od platformy. Zamiast tego kompilatory pełnią funkcję tłumacza: tłumaczą tekst programu na podstawowe instrukcje maszynowe.

Poniższa lista języków programowania: C („C”), C # („C-sharp”), „Fortran”, „Pascal”, Java („Java”) - należy do najczęściej używanych składni wysokiego poziomu. Ma następujące właściwości: języki te działają ze złożonymi strukturami, obsługują łańcuchowe typy danych i operacje wejścia/wyjścia na plikach, a także mają tę zaletę, że są znacznie łatwiejsze w obsłudze ze względu na czytelność i zrozumiałą składnię.

Najczęściej używane języki programowania

Zasadniczo możesz napisać program w dowolnym języku. Pytanie brzmi, czy będzie działać wydajnie i bezawaryjnie? Dlatego do rozwiązywania różnych problemów należy wybierać najbardziej odpowiednie języki programowania. Listę popularności można podsumować w następujący sposób:

  • Języki OOP: Java, C++, Python, PHP, VisualBasic i JavaScript;
  • grupa języków strukturalnych: Basic, Fortran i Pascal;
  • wieloparadygmat: C#, Delphi, Curry i Scala.

Zakres programów i aplikacji

Wybór języka, w którym napisany jest ten lub inny program, zależy w dużej mierze od obszaru jego zastosowania. Na przykład do pracy z samym sprzętem komputerowym (pisanie sterowników i programów pomocniczych) najlepszą opcją byłby C („C”) lub C ++, które są zawarte w głównych językach programowania (patrz lista nad). A do tworzenia aplikacji mobilnych, w tym gier, powinieneś wybrać Javę lub C # („C-sharp”).

Jeśli jeszcze nie zdecydowałeś, w którym kierunku chcesz pracować, zalecamy rozpoczęcie nauki od C lub C++. Mają bardzo przejrzystą składnię, wyraźny podział strukturalny na klasy i funkcje. Ponadto, znając C lub C++, możesz łatwo nauczyć się każdego innego języka programowania.

O języku kolejowym „Pociąg minie peron Krasnye Zori bez zatrzymywania się”. Zauważ, że kierowca użył rzeczownika „stop”, a nie czasownika „stop”. Zatrzymanie się to bardzo ważna koncepcja dla pracowników kolei. Pociąg może się „zatrzymywać”, ale nie „mieć przystanków”. Turchin [Turchin 2000], podając podobny przykład, wskazuje na formalizację języka używanego do wąskich celów zawodowych.

Język sformalizowany można zdefiniować następująco [Turchin 2000]. Rozważmy dwupiętrowy językowy model rzeczywistości (ryc. 4. 4). Sytuacja si jest zakodowana przez obiekt językowy Li. Obiekt L1 jest nazwą dla si. Jakiś czas później sytuacja S1 zostaje zastąpiona sytuacją S2. Wykonując pewną czynność językową, przekształcamy L1 w inny obiekt – L2. Jeśli nasz model jest poprawny, to L2 jest nazwą S2. W rezultacie, nie znając rzeczywistej sytuacji S2, możemy uzyskać o niej wyobrażenie, dekodując obiekt językowy L2. Wykonanie transformacji L1->L2 określa, czy język zostanie sformalizowany.

    Dla języka sformalizowanego transformacja L1->L2 jest określona wyłącznie przez uczestniczące w niej obiekty językowe Li i nie zależy od odpowiadających im reprezentacji językowych si w semantyce języka.

    Dla języka niesformalizowanego wynik przekształcenia obiektu językowego Li zależy nie tylko od rodzaju samej reprezentacji Li, ale także od reprezentacji si, którą generuje ona w ludzkiej głowie, od skojarzeń, w jakie wchodzi.

Osoba jest w stanie dostrzec najbardziej niesformalizowane języki. A komputer nie rozumie, a dokładniej, nie może wykonać programu w nieformalnym języku. Dlatego ważne miejsce w nauce o programowaniu zawsze zajmują formalne algorytmiczne języki programowania,

O formalizacji tego, co nieformalne Formalizacja niesformalizowanego jest procesem niesformalizowalnym. Chociaż logicy i wojsko próbują z tym walczyć.

O formule miłości Formuła miłości nie poddaje się formalizacji. W najlepszym przypadku można go przedstawić jedynie jako bardzo przybliżony model.

Języki modelowania

Język modelowania – zbiór reguł, które określają budowę modeli (uproszczone przedstawienie rzeczywistości), w tym ich wizualizację oraz definiowanie struktury i zachowania. Język modelowania obejmuje:

    elementy modelu - podstawowe pojęcia modelowania i ich semantyka;

    notacja - wizualna reprezentacja elementów modelowania;

    poradnik użytkowania - zasady wykorzystania elementów w ramach budowania modeli dziedzinowych.

Języki programowania i środowiska zintegrowane

    Według twórcy pierwszego środowiska zintegrowanego FRAMEWORK, środowisko zintegrowane to taka aplikacja, w której użytkownik uruchamiając ją na początku dnia roboczego, znajduje w niej wszystkie zasoby niezbędne do pracy i tym samym nie wychodzi ze środowiska zintegrowanego do samego końca dnia roboczego. Oczywiście ta definicja nie jest bardzo poprawna i nieco idealizuje sytuację, ale jej ogólne znaczenie jest wystarczająco jasne. Główną cechą zintegrowanych środowisk jest wysoki stopień interaktywności. Osiąga się to poprzez integrację różnych zasobów oprogramowania w jedną całość, stąd nazwa. Tak więc zintegrowane środowisko kompilatora języka programowania (programu, który tworzy program wykonywalny z tekstu tego języka programowania) zwykle zawiera edytor tekstu i sam kompilator z systemem diagnostyki błędów kompilacji. Oprócz tego zwykle posiada również debugger - interpreter tego języka, który wykonuje program linia po linii i posiada szereg innych specjalnych funkcji. Jeden z aktywnie rozwijających się obszarów, projektowanie wizualne, w całości opiera się na wykorzystaniu możliwości zintegrowanego środowiska. Użytkownik interaktywnie wybiera obiekty języka programowania niezbędne dla jego programu i ustanawia powiązania między nimi. Popularność takich języków jak Visual BASIC (Microsoft), a także Object PASCAL (środowiska Delphi i Kylix, Borland) nie jest przypadkowa. Nawet niedoświadczony programista, który nie zna innych języków programowania poza BASIC-iem i nigdy nie programował pod Windows, może stworzyć aplikację działającą pod Windows przy użyciu Visual BASIC w dwa, trzy dni. Ale wysokiej klasy programista, który nie programował wcześniej pod Windows, używając C++, często musi spędzać tygodnie, a nawet miesiące, aby stworzyć ten sam program. To prawda, że ​​Visual BASIC ma wiele istotnych ograniczeń. Za pomocą środowisk projektowania wizualnego można tworzyć bardzo złożone programy bez wpisywania ani jednej linijki kodu na klawiaturze. Jednak wszystkie programy oparte na tradycyjnych proceduralnych językach programowania mają tę samą wadę. Dla nich kod wykonywalny to jedno, a dane przetwarzane przez program to coś zupełnie innego. Rzeczywiście, kod programu jest zawarty w pliku z rozszerzeniem EXE, a dane są albo w specjalnych plikach danych (zwykle w formie tekstowej lub binarnej w wewnętrznej reprezentacji komputera), albo są wprowadzane z klawiatury lub z innego zewnętrzne urządzenie. A teraz zadajmy pytanie: co jeśli użytkownik musi podać programowi wykonywalnemu informacje, które można uznać za „dodatek” do tekstu programu? Chcemy np. aby na ekranie był zbudowany wykres funkcji, aw takim programie zapewniamy wszystkie niezbędne możliwości obsługi. Jednak formułę funkcji musi ustalić sam użytkownik i nie wiadomo z góry, jaka ona będzie. Jest całkiem oczywiste, że takie zadania można rozwiązać tylko za pomocą systemu tłumacza. Ale „za wszystko trzeba zapłacić”. Kompilator tłumaczy tekst programu na kod wykonywalny, który może działać bez programu kompilatora. Programy stworzone w oparciu o języki typu tłumaczącego mogą być wykonywane tylko pod kontrolą programu tłumaczącego. Są również wolniejsze niż skompilowane, ponieważ ich interpretacja zajmuje więcej czasu. Jednak w wielu przypadkach nie jest to istotne.

Data utworzenia: 1963 wpływ: ZYSK Pisanie na maszynie: niewpisane dialekty:

    Applesoft BASIC

    Commodore BASIC

    Microsoft BASIC

Implementacje i wersje:

  • Applesoft BASIC Interpreter w JavaScript

    Atari Microsoft BASIC I/II

  • Commodore BASIC

    Galaxia BASIC

    Microsoft Visual Basic

  • Visual Basic dla aplikacji

BASIC (BASIC - skrót od Beginner's All-purpose Symbolic Instruction Code - uniwersalny kod instrukcji symbolicznych dla początkujących; angielski basic - basic, basic) - rodzina języków programowania wysokiego poziomu.

BASIC został wymyślony w 1963 roku przez profesorów z Dartmouth College, Johna Kemeny'ego i Thomasa Kurtza, i wdrożony pod ich kierunkiem przez zespół studentów. Z czasem, gdy zaczęły pojawiać się inne dialekty, ten „oryginalny” dialekt stał się znany jako Dartmouth BASIC.

BASIC został zaprojektowany tak, aby uczniowie mogli pisać programy przy użyciu terminali z podziałem czasu. Powstał jako rozwiązanie problemów związanych ze złożonością starszych języków, przeznaczony dla bardziej „prostych” użytkowników, których nie tyle interesuje szybkość działania programów, co po prostu umiejętność wykorzystania komputera do rozwiązywania swoich problemów.

Przy projektowaniu języka zastosowano osiem następujących zasad:

    być łatwy w użyciu dla początkujących;

    być językiem programowania ogólnego przeznaczenia;

    zapewnić możliwość rozszerzenia funkcjonalności dostępnej dla doświadczonych programistów;

    być interaktywnym;

    zapewnić jasne komunikaty o błędach;

    szybko pracować nad małymi programami;

    nie wymagają zrozumienia działania sprzętu;

    być pośrednikiem między użytkownikiem a systemem operacyjnym.

Język był oparty częściowo na Fortranie II, a częściowo na Algolu-60, z dodatkami mającymi na celu dostosowanie go do podziału czasu, przetwarzania tekstu i arytmetyki macierzowej. BASIC został pierwotnie zaimplementowany na GE-265 z obsługą wielu terminali. Wbrew powszechnemu przekonaniu w momencie powstania był to język skompilowany. Język zyskał ogólną popularność dzięki pojawieniu się na mikrokomputerze Altair 8800. Wiele języków programowania było zbyt nieporęcznych, aby zmieścić się w małej pamięci. W przypadku maszyn z wolnymi mediami, takimi jak taśma papierowa, kaseta audio i bez odpowiedniego edytora tekstu, mały język, taki jak BASIC, był darem niebios. W 1975 roku Microsoft (wtedy było ich tylko dwóch – Bill Gates i Paul Allen, z udziałem Monte Davidova) wypuścił Altair BASIC. Dla systemu operacyjnego CP/M powstał dialekt BASIC-80, który na długi czas zdeterminował rozwój języka. W tym okresie powstało kilka nowych wersji języka BASIC. Microsoft sprzedał kilka wersji BASICa dla MS-DOS/PC-DOS, w tym BASICA, GWBASIC i Quick BASIC (QBASIC).Borland wypuścił Turbo BASIC 1.0 w 1985 r. (jego następcy byli następnie sprzedawani przez inną firmę pod nazwą PowerBASIC). Na komputerach domowych pojawiały się różne rozszerzenia języka BASIC, zwykle zawierające narzędzia do pracy z grafiką, dźwiękiem, wykonywania poleceń DOS-a, a także narzędzia do programowania strukturalnego. Niektóre inne języki wykorzystały dobrze znaną składnię języka BASIC jako podstawę, na której zbudowano zupełnie inny system (patrz np. GRASS). Jednak począwszy od późnych lat 80. nowe komputery stały się znacznie bardziej złożone i zapewniały funkcje (takie jak graficzny interfejs użytkownika), które sprawiły, że BASIC nie był już tak wygodny do programowania. BASIC zaczął tracić na popularności, pomimo faktu, że ogromna liczba jego wersji była nadal używana i sprzedawana. BASIC otrzymał drugie życie wraz z pojawieniem się Visual Basic firmy Microsoft. Stał się jednym z najczęściej używanych języków na platformie Microsoft Windows. Później powstał wariant o nazwie WordBasic, używany w MS Word do Worda 97. Wariant Visual Basic for Applications (VBA) został wbudowany w Excel 5.0 w 1993, następnie w Access 95 w 1995, a następnie we wszystkie inne narzędzia. w pakiecie Office - w 1997 r. Internet Explorer 3.0 i nowsze, a także Microsoft Outlook zawierały interpreter języka VBScript. Pełna wersja pakietu OpenOffice.org zawiera również interpreter języka BASIC.

Witaj świecie!: Przykład dla QBasic 1.1, QuickBasic 4.50

WYDRUKOWAĆ " Witam , Świat !"

Czynnik: Przykład dla QBasic 1.1, QuickBasic 4.50

Stosowana jest iteracyjna definicja silni. Przy obliczaniu 13! występuje przepełnienie arytmetyczne i tutaj zachowanie różnych implementacji jest inne: QBasic zgłasza przepełnienie, podczas gdy QuickBasic po prostu wyświetla wartości ujemne. Ponadto polecenie PRINT domyślnie drukuje jedną spację przed i po liczbie.

DIM f TAK DŁUGO f = 1 DRUKUJ "0 !="; f DLA i = 1 DO 16:

fa = f*i:

PRINTi; "!="; f

JĘZYK FORMALIZOWANY- sztuczny system znaków zaprojektowany do reprezentowania jakiejś teorii. Język sformalizowany różni się od naturalnych (narodowych) języków ludzkiej komunikacji i myślenia, od sztucznych języków, takich jak esperanto, od „technicznych” języków nauki, które łączą środki pewnej części naturalnego język z odpowiednimi symbolami naukowymi (język chemii, język zwykłej matematyki itp.), od język algorytmiczny ogólny typ programowania itp. przede wszystkim przez to, że jego zadaniem jest służyć jako środek ustalający (formalizujący) pewną treść logiczną, co pozwala na wprowadzenie relacji konsekwencji logicznej i pojęcia dowodliwości (lub ich odpowiedników). Historycznie rzecz biorąc, pierwszym sformalizowanym językiem był sylogistyka Arystotelesa, zaimplementowany przy użyciu znormalizowanego fragmentu języka naturalnego (greckiego). Ogólną ideę języka sformalizowanego sformułował Leibniz (characteristica universalis), który przewidział jej rozszerzenie na „rachunek wnioskowania” – rachunek różniczkowy. W czasach nowożytnych na podstawie analogii między logiką a algebrą opracowano różne warianty języków sformalizowanych. Kamieniem milowym była tutaj praca Morgana , Boole'a a zwłaszcza ich zwolenników Schroedera oraz Porecki . Współczesne języki sformalizowane — w ich najpowszechniejszych formach — wracają do pracy. Frege „Begriffsschrift” - „Recording in Concepts” (1879), z którego wywodzi się główna linia rozwoju języka logiki zdań i (obejmującej ją) logiki (wielu) predykatów, a także zastosowania tych logicznych środków językowych do problemów uzasadniania matematyki.

Charakterystyczna budowa takich języków sformalizowanych: przypisanie alfabetu znaków początkowych, indukcyjne określenie (dobrze sformułowanej) formuły języka, tzw. ustalanie reguł formowania, ustalanie reguł wnioskowania, tzw. reguły transformacji, które zachowują wybraną logiczną charakterystykę formuł (prawdę, możliwość udowodnienia itp.). Dodanie reguł transformacji zamienia sformalizowany język w rachunek logiczny. Istnieje wiele rodzajów języków sformalizowanych: są to przede wszystkim języki konstrukcji dedukcyjno-aksjomatycznych, systemy wnioskowania naturalnego („naturalnego”) i konstrukcji sekwencyjnych, tablice analityczne, systemy „logiki argumentów” i wiele innych.

Języki sformalizowane różnią się siłą logiczną, od języków „klasycznych” (w których w pełni obowiązują arystotelesowskie prawa tożsamości, sprzeczności i wykluczonego środka, a także zasada logicznej wieloznaczności), a kończąc na wielu językach logik nieklasycznych, które pozwalają osłabić pewne zasady, wprowadzają polisemię ocen formuł lub ich modalności. Opracowano języki, w których środki logiczne są zminimalizowane w takim czy innym sensie. Takimi są języki logiki minimalnej i pozytywnej czy język logiki zdań, który posługuje się np. pojedynczą operacją logiczną. Udar Schaeffera (zob Spójniki logiczne ).

Języki sformalizowane charakteryzują się zwykle pod względem składniowym i semantycznym. Ale najistotniejsza jest ta logiczna cecha jego formuł, którą zachowują reguły wnioskowania (prawda, możliwość udowodnienia, weryfikowalność, prawdopodobieństwo itp.). Dla każdego języka sformalizowanego podstawowymi problemami są kompletność wyrażonej w nim logiki, jej rozstrzygalność i spójność; np. język klasyczny logika zdań kompletne, rozstrzygalne i spójne oraz klasyczne Logika predykatów (wielokrotne), choć kompletne, ale nierozwiązywalne; język rozszerzonego rachunku predykatów – z kwantyfikatorami przez predykaty i nieograniczonym stosowaniem zasady abstrakcji – jest sprzeczny (taki był system logiczno-arytmetyczny Fregego, w którym Russell odkrył antynomię nazwaną jego imieniem).

Język sformalizowany może być „czystą formą”, tj. nie przenosić żadnych pozalogicznych informacji; jeśli go nosi, to staje się stosowanym językiem sformalizowanym, którego specyfiką jest obecność stałych predykatów i terminów (opisów) – np. arytmetyczny - odzwierciedlający właściwości obszaru zastosowania. Aby sformalizować teorie o wysokim poziomie abstrakcji, sformalizowany język można modyfikować, rozszerzać lub „budować” na różne sposoby; przykład: sformalizowanie rachunku klasycznego jako arytmetyki drugiego rzędu (tj. z kwantyfikatorami nad zmiennymi predykatowymi). W wielu przypadkach język sformalizowany zawiera struktury logiczne wielu – nawet nieskończenie wielu – rzędów (jak np. „wieża języków” A.A. hierarchii „światów możliwych”). Semantyczna baza sformalizowanego języka logiki może być teorią mnogości, algebraiczną, probabilistyczną, teorią gier itp. Mogą też występować w nim takie „osłabienia”, które są zbliżone tylko do semantyki probabilistycznej – tak np. powstaje sformalizowany język „niejasnej logiki” (w sensie Zade). Język nabiera wówczas swoistej pragmatyki, uwzględniając czynnik native speakera (dając ocenę „funkcji przynależności” podmiotu do zakresu tego pojęcia). W tym miejscu przejawia się rosnąca obecnie tendencja do uwzględniania „czynnika ludzkiego” w językach sformalizowanych, w takiej czy innej formie, co wyraźnie przejawia się w niektórych sformalizowanych językach logiki mechaniki kwantowej. W innym kierunku następuje rozwój języków sformalizowanych, których semantyka implikuje odrzucenie założeń egzystencjalnych lub pewnych przesłanek ontologicznych – dopuszczalność reguł o nieskończonej liczbie przesłanek, „wielorodność” obszarów tematycznych, wręcz sprzecznych te itp.

Nieodzowną cechą języka sformalizowanego jest „możliwa” interpretacja reguł wnioskowania; na przykład na pewnym etapie możemy swobodnie stosować lub nie stosować, powiedzmy, reguły modus ponens. Cecha ta jest pozbawiona języków algorytmicznych, które mają charakter „nakazowy”. Jednak wraz z rozwojem logiki komputerowej i rozwojem programów typu "opisującego", różnica ta zaczyna się zacierać. W tym samym kierunku działa również rozwój języków sformalizowanych nastawionych na rozwiązywanie problemów heurystycznych.

Literatura:

1. Kościół A. Wprowadzenie do logiki matematycznej, t. 1. M., 1960;

2. Kleene SK Wprowadzenie do metamatematyki. M., 1957;

3. Curry H. Podstawy logiki matematycznej. M., 1969;

4. Freudenthal H. Język logiki. M., 1969;

5. Smirnova ED Języki sformalizowane i problemy semantyki logicznej. M., 1982.