Programmeringsspråk

Et programmeringsspråk er et formelt språk (eller kunstig, det vil si et språk med veldefinerte grammatiske regler) som gir en person, i dette tilfellet programmereren, muligheten til å skrive (eller programmere) en rekke instruksjoner eller rekkefølger av ordre. i form av algoritmer for å kontrollere den fysiske eller logiske oppførselen til et datasystem , slik at ulike typer data kan innhentes eller visse oppgaver kan utføres. Hele dette settet med kommandoer skrevet ved hjelp av et programmeringsspråk kalles et dataprogram . [ 1 ]​ [ 2 ]​ [ 3 ]​ [ 4 ]

Funksjoner

Programmering er prosessen med å lage pålitelig programvare ved å skrive, teste , feilsøke , kompilere eller tolke og vedlikeholde kildekoden til det dataprogrammet . I utgangspunktet er denne prosessen definert ved logisk å bruke følgende trinn:

Programmeringsspråk består av et sett med symboler (kalt alfabetet ), grammatiske ( leksikalske / morfologiske og syntaktiske ) og semantiske regler , som sammen definerer de gyldige strukturene til språket og deres betydning. Det er en vanlig feil å behandle begrepene 'programmeringsspråk' og ' dataspråk ' som synonymer. Dataspråk inkluderer programmeringsspråk og andre, for eksempel HTML ( et språk for å merke nettsider som egentlig ikke er et programmeringsspråk, men snarere et sett med instruksjoner som tillater strukturering av innholdet i dokumenter).

Programmeringsspråket lar deg spesifisere nøyaktig hvilke data spesifikk programvare skal operere på , hvordan disse dataene skal lagres eller overføres, og hvilke handlinger programvaren skal utføre under en rekke omstendigheter. Alt dette, gjennom et språk som prøver å være relativt nært opp til menneskelig eller naturlig språk. Et relevant kjennetegn ved programmeringsspråk er nettopp at mer enn én programmerer kan bruke et felles sett med instruksjoner som forstås av hverandre for å bygge et program i samarbeid.

Historikk

For at datamaskinen skal forstå instruksjonene våre, må det brukes et spesifikt språk kjent som maskinkode , som lett kan leses av maskinen, men som er overdrevent komplisert for folk. Faktisk består den bare av lange strenger med tallene 0 og 1 .

For å gjøre jobben enklere, bestemte de første dataoperatørene seg for å lage en oversetter for å erstatte 0 og 1 med ord eller en abstraksjon av ord og bokstaver fra engelsk ; dette er kjent som assemblerspråk . For å legge til, brukes for eksempel bokstaven A i det engelske ordet add . Monteringsspråk følger samme struktur som maskinspråk, men bokstaver og ord er lettere å huske og forstå enn tall.

Behovet for å huske programmeringssekvenser for de vanlige handlingene førte til å kalle dem med navn som er enkle å huske og assosiere: ADD(legg til), SUB(trekk fra), MUL(multipliser), CALL(utfør subrutine), etc. Denne sekvensen av posisjoner ble kalt "instruksjoner", og dette settet med instruksjoner ble kalt monteringsspråk . Deretter dukket det opp forskjellige programmeringsspråk, som får navnet sitt fordi de har en syntaktisk struktur som ligner på språk skrevet av mennesker, også kalt høynivåspråk . [ 5 ]

På slutten av 1953 sendte John Backus et forslag til sine overordnede i IBM om å utvikle et mer praktisk alternativ til assemblerspråk for programmering av IBM 704 stormaskin . John Backus ' historiske Fortran -team besto av programmererne Richard Goldberg , Sheldon F. Best , Harlan Herrick , Peter Sheridan , Roy Nutt , Robert Nelson , Irving Ziller , Lois Haibt og David Sayre . [ 6 ]

Den første manualen for Fortran -språket dukket opp i oktober 1956 , med den første Fortran - kompilatoren levert i april 1957 . Dette var en optimalisert kompilator, fordi kundene var motvillige til å bruke et høynivåspråk med mindre kompilatoren deres kunne generere kode hvis ytelse var sammenlignbar med håndskrevet assembly-språkkode.

I 1960 ble COBOL , et av språkene som fortsatt brukes i dag, i forretningsdatabehandling, opprettet .

Etter hvert som kompleksiteten til oppgavene utført av datamaskiner økte, ble det nødvendig å ha en mer effektiv metode for å programmere dem. Så høynivåspråk ble opprettet , og det samme var BASIC i versjonene som ble introdusert på mikrodatamaskiner på 1980- tallet . Selv om en oppgave så enkel som å legge til to tall kan kreve flere instruksjoner på assemblerspråk, vil en enkelt setning være tilstrekkelig på et språk på høyt nivå.

Klassifisering av programmeringsspråk

Programmeringsspråk har historisk blitt klassifisert etter forskjellige kriterier:

Etter hvert som nye språk dukket opp som tillot nye stiler med mer uttrykksfull programmering, ble disse stilene skilt ut i en rekke generasjoner , hver av dem representerte programmeringsspråk som dukket opp på samme tid og med vanlige generiske funksjoner. Programmeringsspråk er vanligvis klassifisert i to brede kategorier som refererer til deres "abstraksjonsnivå", det vil si hvor spesifikt eller generelt det er for dataarkitekturen som er iboende i systemet som brukes. Programmeringsparadigmer skiller forskjellige datamodeller og stiler for å strukturere og organisere oppgavene som et program må utføre. Et programmeringsspråk kan støtte ett eller flere programmeringsparadigmer, helt eller delvis. Generelle programmeringsspråk skilles fra spesifikke formål .

Ved noen anledninger blir programmeringsspråk også klassifisert i familier som deler visse fellestrekk, for eksempel den generelle stilen til syntaksen de bruker. Disse egenskapene er vanligvis arvet fra tidligere programmeringsspråk som fungerte som inspirasjon for skaperne av nevnte språk.

Historisk eller generasjonsklassifisering

Datautstyr ( maskinvaren ) har gått gjennom fire generasjoner, hvorav de tre første (datamaskiner med rør , transistorer og integrerte kretser ) er veldig klare, den fjerde ( storskala integrerte kretser ) mer diskutable.

Noe lignende har skjedd med dataprogrammering ( programvare ), som utføres på språk som vanligvis er klassifisert i fem generasjoner, hvorav de tre første er åpenbare, mens ikke alle er enige om de to andre. Disse generasjonene falt ikke nøyaktig i tid med maskinvaren , men omtrentlig, og de er følgende:

Programmeringsparadigme

Et programmeringsparadigme består av en metode for å utføre beregninger og måten oppgavene som skal utføres av et program skal struktureres og organiseres. [ 7 ] Det er et teknologisk forslag adoptert av et fellesskap av programmerere og utviklere hvis sentrale kjerne er ubestridelig ved at den bare prøver å løse ett eller flere klart definerte problemer; løsningen av disse problemene må følgelig forutsette et betydelig fremskritt i minst én parameter som påvirker programvareutvikling . Det representerer en spesiell tilnærming eller filosofi for å designe løsninger. Paradigmene skiller seg fra hverandre, i konseptene og måten å abstrahere elementene som er involvert i et problem, så vel som i trinnene som integrerer deres løsning av problemet, med andre ord, beregningen . Det er nært knyttet til formaliseringen av visse språk i definisjonsøyeblikket. Det er en programmeringsstil som brukes.

Et programmeringsparadigme er begrenset i tid når det gjelder aksept og bruk, fordi nye paradigmer gir nye eller bedre løsninger som erstatter det helt eller delvis.

Programmeringsparadigmet som for tiden er mest brukt er " objektorientering " (OO). Den sentrale kjernen i dette paradigmet er foreningen av data og prosessering i en enhet kalt "objekt", som i sin tur kan relateres til andre "objekt"-enheter.

Tradisjonelt har data og prosessering blitt delt inn i ulike områder for programvaredesign og implementering. Dette førte til at store utbygginger fikk pålitelighet, vedlikehold, tilpasning til endringer og skalerbarhetsproblemer. Med OO og funksjoner som innkapsling, polymorfisme eller arv, ble et betydelig fremskritt innen programvareutvikling i enhver produksjonsskala tillatt. OO ser ut til å være knyttet i sin opprinnelse til språk som Lisp og Simula , selv om Smalltalk var den første som kom med tittelen "objektorientert programmering" .

Klassifisering etter paradigmer

Generelt er de fleste paradigmer varianter av de to hovedtypene programmering, imperativ og deklarativ. I imperativ programmering beskrives et sett med instruksjoner som må utføres for å variere tilstanden til programmet og finne løsningen trinn for trinn, det vil si en algoritme som beskriver trinnene som er nødvendige for å løse problemet.

I deklarativ programmering beskriver utsagnene som brukes hva de gjør problemet som skal løses; den programmeres ved å si hva den vil løse på brukernivå, men ikke de nødvendige instruksjonene for å løse det. Sistnevnte vil bli gjort gjennom interne informasjonsslutningsmekanismer basert på beskrivelsen som er gjort.

Noen av de forskjellige variantene av programmeringsparadigmer er beskrevet nedenfor:

Elementer

Variabler og vektorer

Variabler er titler som er tilordnet mellomrom i minnet for å lagre spesifikke data. De er databeholdere og derfor er de forskjellige i henhold til typen data de er i stand til å lagre. I de fleste programmeringsspråk er det nødvendig å spesifisere en spesifikk variabeltype for å lagre en spesifikk data. For eksempel, i Java , hvis vi ønsker å lagre en tekststreng, må vi spesifisere at variabelen er av typen String . På den annen side, i språk som PHP eller JavaScript er ikke denne typen variabelspesifikasjoner nødvendig. I tillegg er det sammensatte variabler kalt vektorer. En vektor er ikke noe mer enn et sett med påfølgende byte i minnet og av samme type lagret inne i en containervariabel. Her er en liste over de vanligste typene variabler og vektorer:

Data-type Kort beskrivelse
Char Disse variablene inneholder et enkelt tegn, det vil si en bokstav, et tegn eller et tall.
int De inneholder et heltall.
flyte De inneholder et desimaltall.
String De inneholder tekststrenger, eller hva som er det samme, det er en vektor med flere variabler av Char-typen.
boolsk De kan bare inneholde en null eller en.

Når det gjelder boolske variabler, anses null for mange språk for å være den bokstavelige usann (" falsk "), mens en anses som sann (" sann ").

Betingelser

Betingede setninger er kodestrukturer som indikerer at for at en viss del av programmet skal utføres, må visse premisser være oppfylt; for eksempel: at to verdier er like, at en verdi eksisterer, at en verdi er større enn en annen... Disse betingelsene utføres vanligvis bare én gang gjennom hele programmet. De mest kjente og mest brukte kondisjoneringsfaktorene i programmering er:

Loops

Loops er nære slektninger av conditionals, men de kjører konstant kode så lenge en viss betingelse er oppfylt. De hyppigste er:

Det må sies at selv om det finnes forskjellige typer løkker, er de alle i stand til å utføre nøyaktig de samme funksjonene. Bruken av den ene eller den andre avhenger generelt av smaken til programmereren.

Funksjoner

Funksjoner ble laget for å unngå å måtte gjenta kodebiter hele tiden. En funksjon kan betraktes som en variabel som omslutter kode i seg selv. Derfor, når vi får tilgang til nevnte variabel (funksjonen), er det vi faktisk gjør å beordre programmet til å kjøre en bestemt forhåndsdefinert kode.

Alle programmeringsspråk har noen primitive opplæringselementer for beskrivelse av data og av prosessene eller transformasjonene som brukes på disse dataene (som tillegg av to tall eller valg av et element som er en del av en samling). Disse primitive elementene er definert av syntaktiske og semantiske regler som beskriver deres struktur og betydning, henholdsvis.

Syntaks

Den synlige formen til et programmeringsspråk er kjent som syntaks. De fleste programmeringsspråk er rent tekstlige, det vil si at de bruker tekstsekvenser som inkluderer ord, tall og tegnsetting, som ligner på naturlige skriftspråk. På den annen side er det noen programmeringsspråk som er mer grafiske, og bruker visuelle relasjoner mellom symboler for å spesifisere et program.

Syntaksen til et programmeringsspråk beskriver mulige kombinasjoner av symboler som utgjør et syntaktisk korrekt program. Betydningen gitt til en kombinasjon av symboler håndteres av dens semantikk (enten formelt eller som en del av implementeringsreferansens harde kode ). Siden de fleste språk er tekstlige, tar denne artikkelen for seg tekstsyntaks.

Syntaksen til programmeringsspråk er generelt definert ved å bruke en kombinasjon av regulære uttrykk (for morfologisk/leksikalsk struktur) og Backus-Naur-notasjon (for syntaktisk struktur). Dette er et eksempel på en enkel grammatikk, hentet fra Lisp -språket :

uttrykk ::= atom | liste atom ::= tall | symbolnummer :: = [+-]? [ '0'-'9']+ symbol ::= [ 'A'-'Z'] [ 'a'-'z'].* liste ::= ' ( ' uttrykk* ' ) '

Denne grammatikken spesifiserer følgende:

  • et uttrykk kan være et atom eller en liste ;
  • et atom kan være et tall eller et symbol ;
  • et tall er en kontinuerlig sekvens av ett eller flere desimalsiffer, eventuelt foran med et pluss- eller minustegn;
  • et symbol er en bokstav etterfulgt av null eller flere tegn (unntatt mellomrom); Y
  • en liste er et par åpne og avsluttende parenteser, med null eller flere uttrykk i mellom.

Noen eksempler på velformede sekvenser i henhold til denne grammatikken:

' 12345', ' ()', ' (a b c232 (1))'

Ikke alle syntaktisk korrekte programmer er semantisk korrekte. Mange syntaktisk korrekte programmer har inkonsistens med språkets regler; og kan (avhengig av språkspesifikasjonen og robustheten til implementeringen) resultere i en oversettelses- eller utførelsesfeil. I noen tilfeller kan slike programmer vise udefinert oppførsel. Videre, selv når et program er godt definert innenfor et språk, kan det fortsatt ha en mening som ikke er hva personen som skrev det prøvde å konstruere.

Ved å bruke naturlig språk kan det for eksempel ikke være mulig å gi mening til en grammatisk gyldig setning, eller setningen kan være falsk:

  • "Grønne og falmede ideer sover rasende" er en grammatisk velformet setning, men har ingen allment akseptert betydning.
  • "John er en gift ungkar" er også grammatisk godt utformet, men uttrykker en mening som ikke kan være sann.

Følgende C -språkkodebit er syntaktisk korrekt, men utfører en operasjon som er semantisk udefinert (siden p er en null-peker, har operasjonene p->real og p->im ingen betydning):

kompleks * p = NULL ; kompleks abs_p = sqrt ( p -> real * p -> real + p -> im * p -> im );

Hvis typedeklarasjonen på den første linjen ble utelatt, vil programmet utløse en kompileringsfeil, siden variabelen " p " ikke ville være definert. Men programmet ville fortsatt være syntaktisk korrekt, siden typedeklarasjoner kun gir semantisk informasjon.

Grammatikken som trengs for å spesifisere et programmeringsspråk kan klassifiseres etter dets posisjon i Chomsky-hierarkiet . Syntaksen til de fleste programmeringsspråk kan spesifiseres ved å bruke en Type-2-grammatikk, det vil si at de er kontekstfrie grammatikker. Noen språk, inkludert Perl og Lisp , inneholder konstruksjoner som tillater utførelse under parsefasen. Språk som tillater konstruksjoner som lar programmereren endre oppførselen til en parser, gjør syntaks-parsing til et problem uten beslutning, og skjuler generelt skillet mellom parsing og kjøring. I motsetning til Lisps makrosystem og Perls BEGIN-blokker , som kan ha generelle beregninger, er C -makroer bare strengerstatninger, og krever ikke kjøring av kode.

Statisk semantikk

Statisk semantikk definerer begrensninger på strukturen til gyldige tekster som er umulige eller svært vanskelige å uttrykke ved bruk av standard syntaktiske formalismer. For kompilerte språk inkluderer statisk semantikk i utgangspunktet semantiske regler som kan kontrolleres på kompileringstidspunktet. For eksempel å sjekke at hver identifikator er deklarert før den brukes (på språk som krever slike erklæringer) eller at etikettene i hver arm av en saksstruktur er forskjellige. Mange viktige begrensninger av denne typen, for eksempel å sikre at identifikatorer brukes i riktige sammenhenger (for eksempel å ikke legge til et heltall til et funksjonsnavn), eller at subrutineanrop har riktig antall og type parametere, kan implementeres ved å definere dem som regler i en logikk kjent som typesystemet. Andre former for statisk analyse, som dataflytanalyse, kan også være en del av statisk semantikk. Andre programmeringsspråk som Java og C# har kartleggingsdefinert parsing, en form for dataflytparsing, som en del av deres statiske semantikk.

Skriv inn system

Et datatypesystem definerer måten et programmeringsspråk klassifiserer verdier og uttrykk i typer , hvordan disse typene kan manipuleres og hvordan de samhandler. Formålet med et typesystem er å verifisere og vanligvis håndheve et visst nivå av korrekthet i programmer skrevet på det aktuelle språket, ved å oppdage visse ugyldige operasjoner. Ethvert system som kan bestemmes har sine fordeler og ulemper: mens det på den ene siden ikke tillater mange dårlige programmer, tillater det også noen gode, men sjeldne programmer. For å minimere denne ulempen, inkluderer noen språk type smutthull , eksplisitte ukontrollerte konverteringer som kan brukes av programmereren for å eksplisitt tillate en normalt ikke tillatt operasjon mellom forskjellige typer. I de fleste maskinskrevne språk brukes typesystemet kun for å sjekke typer programmer, men flere språk, vanligvis funksjonelle, utfører det som kalles typeslutning, noe som tar byrden fra programmereren for å spesifisere typene. Designet og den formelle studien av typesystemer er kjent som typeteori .

Innskrevne versus uskrivede språk

Et språk sies å være skrevet hvis spesifikasjonen for hver operasjon må definere datatypene det gjelder for, med den implikasjon at det ikke er anvendelig for andre typer. For eksempel er " este texto entre comillas" en tegnstreng. I de fleste programmeringsspråk har det ingen mening å dele et tall med en tegnstreng. Derfor vil de fleste moderne programmeringsspråk avvise ethvert forsøk fra et hvilket som helst program på å utføre en slik operasjon. På noen språk oppdages disse meningsløse operasjonene når programmet kompileres ("statisk" type validering) og avvises av kompilatoren, mens de på andre oppdages når programmet kjøres ("dynamisk" type validering) og avvises. kaster et unntak under kjøring.

Et spesielt tilfelle av maskinskrevne språk er vanlige maskinskrevne språk . Disse er ofte skript- eller markeringsspråk , for eksempel REXX eller SGML , og har bare én datatype; vanligvis tegnstrenger som deretter brukes til både numeriske og symbolske data.

I motsetning til dette lar et typeløst språk , som de fleste assembly-språk, enhver operasjon brukes på alle data, som vanligvis anses å være sekvenser av biter av forskjellige lengder. Dataløse høynivåspråk inkluderer BCPL og noen varianter av Forth .

I praksis, selv om få språk anses som skrevet ut fra typeteoriens synspunkt (det vil si at de sjekker eller avviser alle operasjoner), tilbyr de fleste moderne språk en viss grad av typehåndtering. Selv om mange produksjonsspråk gir midler for å unngå eller omgå typesystemet.

Statiske typer kontra dynamiske typer

I statisk skrevet språk bestemmes typen av alle uttrykk før programkjøring (vanligvis på kompileringstidspunktet). For eksempel er 1 og (2+2) heltallsuttrykk; de kan ikke sendes til en funksjon som forventer en streng, og de kan heller ikke lagres til en variabel som er definert som en dato.

Statiske språk kan håndtere eksplisitte typer eller utledede typer . I det første tilfellet må programmereren skrive typene i visse tekstposisjoner. I det andre tilfellet utleder kompilatoren typene uttrykk og deklarasjoner i henhold til konteksten. De fleste av de populære statisk skrevne språkene, som C++ , C# og Java , håndterer eksplisitt skriving. Full type slutning er ofte assosiert med mindre populære språk, som Haskell og ML . Imidlertid tillater mange eksplisitt skrevne språk delvise typeslutninger; Både Java og C# , for eksempel, utleder typer i et begrenset antall tilfeller.

Dynamisk skrevet språk bestemmer gyldigheten av typene som er involvert i operasjonene under programkjøring. Typer er med andre ord assosiert med løpende verdier i stedet for tekstuttrykk . Som i tilfellet med antydede skrivespråk, krever ikke dynamiske språk at programmereren skriver typene uttrykk. Dette gjør blant annet at den samme variabelen kan assosieres med verdier av forskjellige typer til forskjellige tider under kjøringen av et program. Typefeil kan imidlertid ikke oppdages automatisk før koden kjøres, noe som gjør det vanskelig å feilsøke programmer.Men i dynamisk skrivede språk blir feilsøking ofte neglisjert til fordel for utviklingsteknikker som BDD og TDD . Ruby , Lisp , JavaScript og Python er dynamisk skrevet språk.

Svake typer og sterke typer

Svakt skrevne språk lar en verdi av én type behandles som en annen type, for eksempel kan en streng opereres som et tall. Dette kan være nyttig noen ganger, men det kan også tillate visse typer feil som ikke kan fanges opp under kompilering eller noen ganger ikke engang under utførelse.

Sterkt skrevet språk forhindrer at ovennevnte skjer. Ethvert forsøk på å utføre en operasjon på feil type utløser en feil. Sterkt skrevne språk kalles ofte typesikre .

Svakt skrevet språk som Perl og JavaScript tillater et stort antall implisitte typekonverteringer. For eksempel i JavaScript konverteres uttrykket 2 * ximplisitt xtil et tall, og denne konverteringen lykkes selv når xdet er null, undefined, a Arrayeller en streng med bokstaver. Disse implisitte konverteringene er ofte nyttige, men de kan også skjule programmeringsfeil.

Statiske og sterke egenskaper regnes nå generelt som ortogonale begreper, men deres behandling i ulike tekster varierer. Noen bruker begrepet sterke typer for å referere til sterkt statiske typer eller, for å legge til forvirringen, ganske enkelt som statisk typeekvivalens . Så C har blitt kalt både et sterkt maskinskrevet språk og et statisk svakt maskinskrevet språk.

Implementering

Implementeringen av et språk er det som gir en måte for et program å kjøre for en gitt kombinasjon av programvare og maskinvare . Det er i utgangspunktet to måter å implementere et språk på: kompilering og tolkning .

  • Kompilering : er prosessen som oversetter et program skrevet på ett programmeringsspråk til et annet programmeringsspråk, og genererer et tilsvarende program som maskinen vil være i stand til å tolke. Oversetterprogrammer som kan gjøre dette kalles kompilatorer . Disse, som avanserte monteringsprogrammer, kan generere mange linjer med maskinkode for hver setning i kildeprogrammet.
  • Tolkning : er en tildeling av betydninger til de velformede formlene til et formelt språk . Siden formelle språk kan defineres i rent syntaktiske termer , kan deres velformede formler ikke være mer enn symbolstrenger uten noen mening. En tolkning gir mening til disse formlene.

Et alternativ kan også brukes til å oversette språk på høyt nivå. I stedet for å oversette kildeprogrammet og permanent lagre objektkoden som produseres under kompilering for bruk i en fremtidig kjøring, laster programmereren ganske enkelt opp kildeprogrammet til datamaskinen sammen med dataene som skal behandles. Et tolkeprogram , enten lagret i operativsystemet på disk eller permanent innebygd i maskinen, konverterer deretter hver setning i kildeprogrammet til maskinspråk etter behov under databehandling. Objektkoden lagres ikke for senere bruk .

Neste gang en instruksjon brukes, må den tolkes på nytt og oversettes til maskinspråk. For eksempel, under den gjentatte behandlingen av løkketrinn, vil hver setning i løkken måtte tolkes på nytt ved hver gjentatt kjøring av løkken, noe som gjør programmet tregere under kjøring (fordi det går gjennom koden under kjøring) men raskere på designtidspunktet (fordi hele koden ikke trenger å være kompilert til enhver tid). Tolken eliminerer behovet for å kompilere etter hver programmodifikasjon når du vil legge til funksjoner eller fikse feil; men det er åpenbart at et objektprogram som er kompilert på forhånd, må kjøres mye raskere enn et som må tolkes på hvert trinn under en kodekjøring.

De fleste språk på høyt nivå tillater flerbruksprogrammering, selv om mange av dem ble designet for å tillate dedikert programmering, slik Pascal var med matematikk i sin spede begynnelse. Barnas pedagogiske språk som Logo har også blitt implementert gjennom en rekke enkle instruksjoner. For tiden er noen språk spesielt indikert for nettapplikasjoner veldig populære , for eksempel Perl , PHP , Ruby , Python eller JavaScript .

Dialekter

En dialekt av et programmeringsspråk er en (relativt liten) variasjon eller utvidelse av språket som ikke endrer dets iboende natur. Med språk som Scheme og Forth kan implementere finne standardene utilstrekkelige, utilstrekkelige eller illegitime, så de vil ofte avvike fra standarden og lage en ny dialekt . I andre tilfeller opprettes en dialekt for bruk i et domenespesifikt språk , ofte en undergruppe. I Lisp -verdenen regnes de fleste språk som bruker den grunnleggende syntaksen til et S-uttrykk og Lisp-lignende semantikk som Lisp-dialekter, selv om de varierer veldig, som for eksempel Racket og Clojure . Siden det er vanlig at et språk har flere dialekter, kan det være ganske vanskelig for en uerfaren programmerer å finne riktig dokumentasjon. Programmeringsspråket BASIC har mange dialekter .

Teknikk

For å skrive programmer som gir best resultat, er det en rekke detaljer å vurdere.

  • Rettelse . Et program er riktig hvis det gjør det det skal gjøre slik det ble etablert i de tidligere fasene av utviklingen. For å finne ut om et program gjør det det skal, er det veldig viktig å tydelig spesifisere hva programmet skal gjøre før du utvikler det, og deretter sammenligne det med hva det faktisk gjør når det er ferdig.
  • Klarhet . Det er svært viktig at programmet er så oversiktlig og lesbart som mulig, for å lette utviklingen og påfølgende vedlikehold. Når du utvikler et program, bør strukturen være enkel og sammenhengende, samt ta vare på redigeringsstilen; På denne måten forenkles programmererens arbeid , både i opprettelsesfasen og i de påfølgende fasene med feilretting, utvidelser, modifikasjoner osv. Faser som kan gjøres selv av en annen programmerer, med hvilke klarhet er enda mer nødvendig slik at andre programmerere enkelt kan fortsette arbeidet. Noen programmerere bruker til og med ASCII Art for å avgrense deler av kode. Andre, for moro skyld eller for å forhindre praktisk analyse av andre programmerere, tyr til å bruke obfuskert kode .
  • Effektivitet . Tanken er at programmet, i tillegg til å gjøre det det er laget for (det vil si å være korrekt), gjør det ved å administrere ressursene det bruker på best mulig måte. Normalt, når vi snakker om effektiviteten til et program, refererer vi vanligvis til tiden det tar å utføre oppgaven det ble opprettet for og mengden minne det trenger, men det er andre ressurser som også kan vurderes når du oppnår effektivitet. av et program, avhengig av dets natur (diskplass det bruker, nettverkstrafikk det genererer, etc.).
  • Bærbarhet . Et program er bærbart når det har muligheten til å kjøre på en plattform, enten maskinvare eller programvare, enn den det ble utviklet på. Portabilitet er en svært ønskelig funksjon for et program, ettersom den lar for eksempel et program som er utviklet for GNU/Linux- systemer også kjøre på Windows - familien av operativsystemer . Dette gjør at programmet lettere kan nå flere brukere.

Paradigmer

Programmer kan klassifiseres etter språkparadigmet som brukes til å produsere dem. Hovedparadigmene er: imperativer , deklarativer og objektorientering .

Programmer som bruker et imperativt språk spesifiserer en algoritme , bruker erklæringer, uttrykk og utsagn. [ 11 ]​ En erklæring knytter et variabelnavn til en datatype, for eksempel: var x: integer;. Et uttrykk inneholder en verdi, for eksempel: 2 + 2inneholder verdien 4. Til slutt må en setning tilordne et uttrykk til en variabel eller bruke verdien til en variabel for å endre flyten til et program, for eksempel: x := 2 + 2; if x == 4 then haz_algo();. En vanlig kritikk av imperative språk er effekten av oppdragsuttalelser på en klasse med variabler kalt "ikke-lokale". [ 12 ]

Programmer som bruker et deklarativt språk spesifiserer egenskapene som utdataene må kjenne til og spesifiserer ingen implementeringsdetaljer. To brede kategorier av deklarative språk er funksjonelle språk og logiske språk . Funksjonelle språk tillater ikke ikke-lokale variabeltilordninger, noe som gjør det lettere å for eksempel programmere slike matematiske funksjoner. [ 12 ] Prinsippet bak logiske språk er å definere problemet som skal løses (målet) og overlate detaljene til løsningen til systemet. [ 13 ]​ Målet er definert ved å gi en liste over delmål. Hvert delmål er også definert ved å gi en liste over delmålene, osv. Hvis en delmålsrute mislykkes i forsøket på å finne en løsning, blir det delmålet forkastet og en annen rute blir systematisk forsøkt.

Måten den er programmert på kan være gjennom tekst eller visuelt. I visuell programmering blir elementene manipulert grafisk i stedet for å spesifiseres ved hjelp av tekst.

Se også

Referanser

  1. Datastøtteteknikere fra Community of Castilla Y Leon. Agenda bind i e-bok . MAD-Eduforma. ISBN  9788466551021 . Hentet 7. november 2019 . 
  2. Juganaru Mathieu, Mihaela (2014). Introduksjon til programmering . Hjemlandets redaksjonsgruppe. ISBN  978-607-438-920-3 . Hentet 21. mai 2021 . 
  3. Yanez, Luis Hernandez (2013-2014). Grunnleggende programmering . Hentet 21. mai 2021 . 
  4. Joyanes Aguilar, Luis (2008). Jose Luis Garcia og Cristina Sanchez, red. GRUNNLEGGENDE PROGRAMMERING Algoritmer, datastruktur og objekter . McGRAW-HILL/INTERAMERICANA DE ESPAÑA, SAU ISBN  978-84-481-6111-8 . 
  5. ^ Gary Bronson (2000). Cengage Learning Publishers, SA De CV, 2006, red. Bronson C++ 2nd Edition . 
  6. Paul McJones. "Historien om FORTRAN og FORTRAN II" . Plone Foundation . Hentet 20. februar 2019 . 
  7. César Vaca Rodríguez. "Programmeringsparadigmer" . Dataavdelingen ved Universitetet i Valladolid. s. 2 . Hentet 20. februar 2019 . 
  8. ^ "Arkiveret kopi" . Arkivert fra originalen 14. mars 2011 . Hentet 1. mai 2011 . 
  9. ↑ a b "HOWTO for funksjonell programmering — Python 3.5.3rc1-dokumentasjon" . docs.python.org . Hentet 13. januar 2017 . 
  10. "Oversikt - D programmeringsspråk" . dlang.org (på engelsk) . Hentet 2014-07-29 . «Major Design Goals of D ... 4. Støtt multi-paradigme programmering, dvs. som et minimum støtte imperative, strukturerte, objektorienterte, generiske og til og med funksjonelle programmeringsparadigmer. » 
  11. ^ Wilson, Leslie B. (1993). Sammenlignende programmeringsspråk, andre utgave . Addison-Wesley. s. 75. ISBN 0-201-56885-3 .  (på engelsk).
  12. ^ a b Wilson, Leslie B. (1993). Sammenlignende programmeringsspråk, andre utgave . Addison-Wesley. s. 213. ISBN 0-201-56885-3 .  (på engelsk).
  13. ^ Wilson, Leslie B. (1993). Sammenlignende programmeringsspråk, andre utgave . Addison-Wesley. s. 244. ISBN 0-201-56885-3 .  (på engelsk).

Eksterne lenker