Šiuolaikinė aukšto lygio programavimo kalba: pavyzdžiai ir palyginimai. Trumpa žinomų programavimo kalbų apžvalga Programavimo kalbų plėtiniai

GPU dabar vis dažniau naudojami sprendžiant skaičiavimo problemas, tačiau klausimas vis dar atviras: kaip parašyti efektyvias programas atitinkamoms konfigūracijoms?

2011-06-15 Andrejus Adinetsas

GPU dabar vis dažniau naudojami sprendžiant skaičiavimo problemas, tačiau klausimas vis dar atviras: kaip parašyti efektyvias programas atitinkamoms konfigūracijoms? Standartinis sprendimas – CUDA arba OpenCL derinys – leidžia palyginti greitai įdiegti algoritmą, tačiau naudojant juos sukurti konkrečiai konfigūracijai optimizuotą versiją sunku. Reikalingi aukštesnio lygio GPU programavimo įrankiai, kuriuos galima sukurti, pavyzdžiui, naudojant išplečiamas kalbas.

Dar prieš trejus metus grafiniai apdorojimo blokai (Graphical Processing Units, GPU) buvo laikomi tik kompiuteriams skirtomis vaizdo plokštėmis, tačiau dabar požiūris į juos pasikeitė – atsirado specialūs serverio GPU modeliai, orientuoti į skaičiavimo problemų sprendimą, dvigubo našumo. -Padidėjo skaičiavimų tikslumas, sistemos pasirodė rekordiškai efektyvios, užimdamos aukščiausias Top500 pozicijas. Kaip parašyti efektyvias programas tokioms mašinoms? Standartinis atsakymas yra CUDA arba OpenCL derinys, skirtas programuoti GPU ir MPI klasterio lygiu. Šie įrankiai yra prieinami, aktyviai palaikomi įrangos gamintojų, jiems jau parašyta daug programų, tačiau yra ir trūkumų.

CUDA ir OpenCL yra C kalbos plėtiniai, juos nesunku išmokti, nors jie yra gana žemo lygio įrankiai. Su jų pagalba galite palyginti greitai įdiegti GPU algoritmą, tačiau sukurti versiją, optimizuotą konkrečiai programai ir konfigūracijai, yra daug sunkiau. Visus optimizavimus reikės atlikti rankiniu būdu, o tai padidins kodo dydį ir pablogins jo skaitomumą. Nors su OpenCL sukurtos programos bus nešiojamos įvairiose architektūrose, tokio perkeliamumo našumas nebus išlaikytas. Reikalingi aukštesnio lygio GPU programavimo įrankiai.

Tokie įrankiai gali būti kuriami įvairiais būdais: įvedant naują programavimo kalbą; įtraukti direktyvas į esamą kalbą, kaip tai daroma PGI Accelerator arba CAPS HMPP modelyje; pasinaudoti išplečiamomis kalbomis. Išplečiamos kalbos- programavimo kalbos, kurių sintaksė ir semantika nėra fiksuotos, tačiau gali būti keičiamos priklausomai nuo programuotojo poreikių. Lyginant su tradicinėmis, išplečiamos kalbos turi nemažai privalumų: jas lengviau pridėti naujų funkcijų; jie yra atviri; išmokti naujų programavimo modelių, pagrįstų tokiomis kalbomis, yra lengviau, nes reikia išmokti tik palyginti nedidelius plėtinius; Tokių kalbų pagalba lengviau suderinti ir optimizuoti programas.

Išplečiamos kalbos

Kad kalba būtų plečiama, joje turi būti:

  • išplėtimo mechanizmas nekeičiant kompiliatoriaus, vienodai palaikomas visų kompiliatorių, o tai visų pirma reiškia standartinės sąsajos buvimą sąveikai su kompiliatoriais;
  • konstrukcijos, skirtos išplėsti ir valdyti kodo medį, pvz., makrokomandos arba kvazicitavimas, siekiant išplėsti kalbą;
  • galingi įrankiai, skirti rašyti plėtinius, pvz., pati plėtojama kalba arba kita kalba, kurios galia reiškia, kad plėtinio kodas gali atlikti tą patį, ką ir bet kuri programa ta kalba.

Pasirodo, šiuos reikalavimus atitinkančių kalbų yra palyginti nedaug: Lisp, Nemerle, Seed7, xoc ir Stratego. Tuo pačiu metu xoc, skirta išplėsti C kalbą, plėtiniams rašyti naudoja atskirą kalbą Zeta, o Stratego yra domeno kalba šaltinio kodo keitikliams kurti. Nemerle yra išplečiama kalba, kuri naudoja sistemą. Grynasis.

Visos išplečiamos kalbos palaiko darbo su programos medžiu mechanizmus, o labiausiai tai yra kvazicitavimo konstrukcija - objekto, vaizduojančio programos medį, specifikacija naudojant patį šaltinio kodą.

Nemerle kalba tam naudoja konstrukciją, pavyzdžiui, sukuria medį, susidedantį iš kintamojo deklaracijos i, kurios pradinė reikšmė yra 0. Kvazicitavimas yra panašus į eilutės objektų su eilutės konstantomis kūrimą. Fig. 1 parodytas kvazicitavimo pavyzdys. Interpoliacijos konstrukcija leidžia kintamąsias reikšmes pakeisti fiksuotu modeliu kvazitabutėje. Nemerle tam naudojamos $(...) konstrukcijos, jei reikia, pavyzdžiui, pakeisti sąrašą. Išplečiamose kalbose taip pat yra programų medžio analizės konstrukcijų. Nemerle kalboje tam naudojamas match(...) ( ... ) operatorius, perjungimo iš C kalbos analogas, kurio atšakos yra kvazicituojančios konstrukcijos. Šiuo atveju interpoliacija interpretuojama kaip naujų kintamųjų deklaravimas, kurie, jei palyginimas sėkmingas, gauna atitinkamų pomedžių reikšmes. Pavyzdžiui, atitinkančiam operatoriui match(e) (| => ... ), jei e yra medis, jis pateks į kintamąjį a ir į kintamąjį b .

Darbo su programos medžiu įrankiai naudojami kalbos plėtiniuose. Nemerle kalba tai yra makrokomandos – specialios funkcijos, vykdomos kompiliavimo etape ir grąžinančios programos medžio fragmentą, kuris pakeičiamas jų iškvietimo vietoje. Tokiu atveju makrokomandas priima programos fragmentus kaip parametrus ir gali juos transformuoti. Iš esmės makrokomandą galite iškviesti taip pat, kaip ir įprastą funkciją; bet įdomesnė funkcija yra susieti makrokomandos iškvietimą su specialia sintaksė. Tai leidžia Nemerle kalboje įdiegti naujas sintaksines struktūras ir taip išplėsti kalbą.

Fig. 2 paveiksle parodytas makrokomandos pavyzdys su sintaksiniu plėtiniu, leidžiančiu deklaruoti daugiamatę kilpą su kintamaisiais ir kiekvienos dimensijos iteracijų skaičiumi, o pav. 3 paveiksle pateikiamas šios makrokomandos vykdomos programos transformacijos pavyzdys. Atminkite, kad šį plėtinį įdiegianti makrokomanda užima mažiau nei 30 šaltinio kodo eilučių ir apima kelis klaidų patikrinimus. Taikant tradicinį metodą, norint įgyvendinti tokį plėtinį, reikėtų žymiai daugiau kodo ir, be to, reikėtų ištirti vidinį kompiliatoriaus veikimą.

Istoriškai makromechanizmas pirmasis pasirodė Lisp, kuriame programa vaizduojama kaip įprastas sąrašas ir nereikalauja specialių konstrukcijų darbui su programų medžiu, todėl būtent šia kalba išplečiamasis programavimas ir išplito labiausiai. Makrokomandos Nemerle yra panašios į Lisp. Xoc sistemoje išplėtimo mechanizmas įgyvendinamas naudojant gramatikos plėtinius ir analizuojant medžio atributus. Bet kuris plėtinys būtinai nurodo du atributus: sintaksės struktūros tipą ir išraišką pagrindine kalba, į kurią jis konvertuojamas.

Išplečiamoms kalboms būdingas daugelio standartinių konstrukcijų įgyvendinimas naudojant makrokomandas. Nemerle kalboje visos kilpos ir sąlyginiai operatoriai, išskyrus atitiktį, yra įgyvendinami per makrokomandas, o Lisp makrokomandos yra standartinės kilpos konstrukcijos ir funkcijų deklaracijos.

Kaip vartoti kalbas?

Išplečiamai programavimo kalbai galite rašyti konstrukcijas, leidžiančias programuoti GPU patogiausiu būdu, tai buvo padaryta įgyvendinant NUDA (Nemerle Unified Device Architecture) projektą, kurio tikslas – sukurti Nemerle kalbos plėtinius. GPU programavimui. OpenCL naudojama kaip sąsaja sąveikai su GPU ir programos pateikimo tikslinė kalba.

Pirmiausia turime įgyvendinti GPU kodo poaibį Nemerle kalba. Tuo pačiu metu turėtų būti palaikomi žinomi kalbos operatoriai, tokie kaip kilpos ir šakojimas, taip pat darbas su paprastais duomenų tipais, struktūromis ir masyvais. GPU kodas dedamas į atskiras funkcijas arba NUDA branduolius. Kiekvienas branduolys yra pažymėtas nukernel makrokomanda, kuri, remdamasi branduolio kodu, generuoja OpenCL kodą ir stub metodą branduoliui iškviesti pagrindinio kompiuterio pusėje. Prieš generuojant kodą, visos makrokomandos yra išplečiamos, išskyrus kilpines ir šakojančias makrokomandas. Jei funkciją reikia iškviesti branduolyje, funkcija turi būti pažymėta nucode makrokomanda, kuri sugeneruos OpenCL kodą funkcijai. Branduolys iškviečiamas naudojant nucall makrokomandą; Be branduolio parametrų, jam taip pat suteikiama sriegio tinklelio, su kuriuo jis prasideda, konfigūracija.

Dažniausiai ciklo korpusas naudojamas kaip GPU branduolys, todėl norėčiau nedelsiant perkelti kilpą į GPU. Tai gali būti įdiegta Nemerle – atitinkama makrokomanda NUDA vadinama nuwork. Ji paima gijos bloko dydį kaip būtinus parametrus ir, remdamasi esamu kontekstu bei ciklo korpuso kodo analize, nustato kintamųjų rinkinį, kuris turi būti perduodamas branduoliui kaip parametrai. Branduolio korpusas formuojamas iš kilpos korpuso, kilpos indeksų apskaičiavimo per pasaulinį gijos numerį, taip pat sąlygos, leidžiančios teisingai atlikti kilpą, net kai pasaulinio tinklelio dydis nesidalina iš dydžio siūlų grupės. Ciklas pakeičiamas iškvietimu į nucall makrokomandą, kuri iškviečia sugeneruotą branduolį.

Iš principo galima leisti naudoti įprastus Nemerle kalbos masyvus GPU programose, tačiau tai veda prie didelių papildomų išlaidų – masyvas turi būti nukopijuojamas į GPU atmintį kiekvieną kartą, kai iškviečiamas branduolys, o tada nukopijuojamas atgal. Todėl GPU programos naudoja specialius masyvo tipus su tingia sinchronizacija tarp GPU ir procesoriaus. Tai leidžia, viena vertus, neužgriozdinti programos teksto duomenims kopijuoti skirtomis komandomis, kita vertus, išvengti pridėtinių duomenų kopijavimo išlaidų. Tokiems masyvams, kaip ir įprastiems Nemerle masyvams, atminties valdymas naudojamas naudojant šiukšlių surinkimą. Norint paskirstyti atmintį tokiems masyvams, yra makrokomanda nunew, kuri turi būti taikoma įprastam atminties paskirstymo operatoriui.

Fig. 4 kairėje yra įprasta masyvo papildymo programa, o dešinėje - panaši programa, tačiau atliekanti skaičiavimus GPU. Gauti GPU programas iš įprastų yra gana paprasta – tereikia taikyti makrokomandas kilpoms ir atminties paskirstymo operacijoms, o kodo kiekis praktiškai nesikeičia. Programa, parašyta naudojant NUDA, užima mažiau nei 20 kodo eilučių. Panaši programa, bet grynai C ir OpenCL užima daugiau nei 100 eilučių.

Be makrokomandų, kurios palengvina darbą su GPU, NUDA plėtinių sistemoje taip pat yra kilpos konvertavimo anotacijų. Komentarai iš esmės yra specialios makrokomandos. Pavyzdžiui, eilutinė anotacija pritaikoma kilpai su fiksuotu iteracijų skaičiumi ir visiškai ją išskleidžia. Dmine anotacija atlieka gilų kilpos išvyniojimą. „Gilus išvyniojimas“ reiškia, kad sukuriamos kelios kilpos korpuso kopijos ir maišoma ne tik pačiai kilpai, bet ir įdėtoms kilpoms, jei jos yra nepriklausomos.

Efektas

Kodėl programuotojas turi išmokti naują kalbą ir įsisavinti naujas plečiamų kalbų bibliotekas? Pagrindinis atsakymas yra produktyvumas. Turint lygiagrečių kilpų, dirbančių su masyvais ir parašytą Nemerle kalba, algoritmą, pakanka pridėti keletą anotacijų, kad gautume programą GPU. Tokiu atveju programa veiks bet kuriame įrenginyje, kuris palaiko OpenCL, įskaitant nVidia ir AMD GPU, taip pat x86 procesorius. Norint pasiekti tą patį naudojant vien OpenCL ar CUDA technologijas, teks išleisti žymiai daugiau resursų, kurie bus skirti ne tik šaltinio kodo rašymui, bet ir serverio bei GPU sąveikos derinimui.

Kita priežastis – sugeneruoto kodo našumas. CUDA arba OpenCL kilpos konversijas reikės atlikti rankiniu būdu ir atskirai kiekvienai architektūrai. Tai ilgas ir dažnai klaidų procesas, o gautą kodą sunku nuskaityti ir jo negalima prižiūrėti. Su NUDA šį darbą galima atlikti naudojant anotacijas. Pavyzdžiui, keliems branduoliams galite optimizuoti vaizdo konvoliucijos arba matricos daugybos operaciją naudodami eilutes ir dmine komentarus. Nedidindami šaltinio kodo dydžio galite pasiekti našumo padidėjimą nuo dviejų iki penkių kartų. Be to, jei tos pačios transformacijos būtų atliekamos rankiniu būdu, kodas padidėtų kelis kartus, o kartais ir eilės tvarka, jau nekalbant apie laiką, praleistą derinant ir pasirenkant optimalius nuskaitymo parametrus. Pavyzdžiui, universali septynių eilučių anotuota NUDA programa, skirta dvigubai tiksliai perkelta matricos-matricos daugybai, „nVidia Tesla C2050“ veikia tik 40 % lėčiau nei šiuo metu sparčiausiai įdiegta versija (CUBLAS 3.2). Panaši programa, parašyta ranka, užtruktų 70 kodo eilučių. Natūralu, kad atliekant standartines užduotis, kodą galite parašyti rankiniu būdu vieną kartą, kad padidintumėte našumą, tačiau atliekant konkrečias užduotis bus labai naudinga sumažinti darbo sąnaudas ir padidinti našumą. Galiausiai, našumo padidėjimas taip pat taikomas pačių plėtinių kūrimui: juos lengviau sukurti naudojant plečiamąsias kalbas nei naudojant tradicinius įrankius. Visa NUDA sistema, nepaisant jos funkcionalumo, užima tik 12 tūkstančių kodo eilučių, neskaičiuojant testų. Tai yra palyginti nedaug, pavyzdžiui, Nemerle kalbos kompiliatorius (9025 versija) užima apie 130 tūkstančių eilučių.

Išplečiamoji kalba yra galingas įrankis, o jos naudojimas lygiagrečiame skaičiavime vis dar tik pradedamas kurti. Kuriant lygiagrečias programavimo kalbas yra daug įdomių problemų ir bet kurią iš jų galima išspręsti naudojant plėtinių ir bibliotekų derinį. Prie kalbos galite pridėti asinchroninių kodų blokų ir lygiagrečių kilpų, taip pat galite sukurti patogias konstrukcijas, skirtas programuoti klasterių sistemas, pvz., paskirstytus masyvus. Galiausiai galite naudoti plėtinius, kad sukurtumėte visavertę lygiagrečią programavimo kalbą, pvz., Chapel arba X10.

Andrejus Adinetsas([apsaugotas el. paštas]) – jaunesnysis mokslo darbuotojas Maskvos valstybinio universiteto tyrimų kompiuterių centras (Maskva).



Be komentarų naudojimo lygiagrečiai programai gauti, jie dažnai naudojami esamoms programavimo kalboms išplėsti. Įdiegti papildomi operatoriai ir nauji kintamiesiems apibūdinti skirti elementai, leidžiantys vartotojui aiškiai apibrėžti lygiagrečią programos struktūrą ir kai kuriais atvejais valdyti paralelinės programos vykdymą. Taigi, High Performance Fortran (HPF) kalba, be tradicinių Fortran operatorių ir specialios komentarų sistemos, turi naują FORALL operatorių, įvestą lygiagrečioms programos kilpoms apibūdinti. Įdomiausia HPF savybė yra kelių lygių atvaizdavimo masyvas – šablonų masyvas – virtualus procesorių masyvas – fiziniai procesoriai, leidžiantys lanksčiausiai susieti vartotojo duomenis į realų kompiuterį.

Kitas pavyzdys yra mpC kalba, sukurta Rusijos mokslų akademijos Sistemų programavimo institute kaip ANSI C plėtinys. Pagrindinis mpC tikslas yra sukurti efektyvias lygiagrečias programas heterogeninėms skaičiavimo sistemoms. Vartotojas gali nurodyti tinklo topologiją, duomenų ir skaičiavimo paskirstymą bei reikalingus duomenų perdavimus. Pranešimų siuntimas organizuojamas naudojant MPI sąsają.

DVM sistema skirta kurti nešiojamas ir efektyvias skaičiavimo programas C-DVM ir Fortran-DVM kalbomis lygiagretiesiems kompiuteriams su skirtingomis architektūromis. Santrumpa DVM atitinka dvi sąvokas: paskirstyta virtualioji atmintis ir paskirstyta virtualioji mašina. Pirmasis atspindi vienos adresų erdvės buvimą. Antrasis atspindi virtualių mašinų naudojimą dviejų pakopų schemoje, skirtoje duomenims ir skaičiavimams susieti su realia lygiagrečia mašina. Programavimo modelis apima DVM instrukcijų nurodymą naudojant specialius komentarus, o tai reiškia vieną programos versiją, skirtą nuosekliam ir lygiagrečiam vykdymui. Palaikomos trys direktyvų grupės: duomenų paskirstymo direktyvos, skaičiavimo paskirstymo direktyvos ir nuotolinės duomenų specifikacijos. Kompiliatorius verčia programą į Fortran arba C kalbą, naudodamas vieną iš esamų lygiagretaus programavimo technologijų (MPI, PVM, Router), kad organizuotų tarpprocesorių sąveiką. DVM sistemoje taip pat yra LIB-DVM palaikymo biblioteka, DVM derinimo priemonė, DVM programos vykdymo prognozuotojas ir DVM programos našumo analizatorius. Sistema buvo sukurta Taikomosios matematikos institute. M.V.Keldysh RAS.



Specialios programavimo kalbos

Jei reikia tiksliau atspindėti arba lygiagrečių sistemų architektūros specifiką, arba tam tikros dalykinės srities problemų klasės ypatybes, tada naudojamos specialios lygiagrečios programavimo kalbos. Occam kalba buvo sukurta programuoti transputer sistemas, o vieno užduočių kalba Sisal buvo skirta programuoti srauto mašinas. Labai įdomi ir originali plėtra yra deklaratyvi kalba NORM, sukurta vadovaujant I. B. Zadykhailo Taikomosios matematikos institute. M.V.Keldysh RAS aprašyti skaičiavimo uždavinių sprendimą tinklelio metodais. Aukštas kalbos abstrakcijos lygis leidžia problemas apibūdinti užrašu, artimu pradinei matematiko formuluotei, kurią kalbos autoriai sutartinai vadina programavimu be programuotojo. Vieno priskyrimo kalboje nėra tradicinių programavimo kalbos konstrukcijų, kurios nustato skaičiavimo tvarką ir taip paslepia natūralų algoritmo lygiagretumą.

Bibliotekos ir sąsajos, palaikančios lygiagrečių procesų sąveiką

Atsiradus masiškai lygiagretiems kompiuteriams, plačiai paplito bibliotekos ir sąsajos, palaikančios lygiagrečių procesų sąveiką. Tipiškas šios krypties atstovas yra pranešimų perdavimo sąsaja (MPI), kurią galima įdiegti beveik visose lygiagrečiose platformose – nuo ​​vektorinių vamzdynų superkompiuterių iki asmeninių kompiuterių klasterių ir tinklų. Pats programuotojas aiškiai nustato, kurie lygiagrečiai taikomi procesai kurioje programos vietoje ir su kokiais procesais turėtų keistis duomenimis arba sinchronizuoti savo darbą. Paprastai lygiagrečių procesų adresų erdvės yra skirtingos. Šia ideologija ypač vadovaujasi MPI ir PVM. Kitos technologijos, tokios kaip Shmem, leidžia naudoti tiek vietinius (privačius) kintamuosius, tiek bendrinamus (bendrai naudojamus) kintamuosius, kurie yra prieinami visiems taikomųjų programų procesams, ir įgyvendina darbo su bendra atmintimi schemą naudojant Put/Get operacijas.

Linda sistema šiek tiek skiriasi, pridedant tik keturias papildomas funkcijas į, išeina, nuskaito ir įvertina bet kurią nuosekliąją kalbą, o tai leidžia kurti lygiagrečias programas. Deja, pagrindinės idėjos paprastumas virsta didelėmis įgyvendinimo problemomis, todėl ši graži technologija tampa labiau akademinio susidomėjimo objektu, o ne praktine priemone.

Lygiagrečių dalykų bibliotekos

Dažnai praktikoje taikomųjų programų programuotojai visiškai nenaudoja jokių aiškių lygiagrečių konstrukcijų, kreipiasi į paprogrames ir lygiagrečių dalykų bibliotekų funkcijas laiko kritiniuose fragmentuose. Visas lygiagretumas ir optimizavimas yra paslėpti skambučiuose, o vartotojas gali rašyti tik išorinę savo programos dalį ir kompetentingai naudoti standartinius blokus. Tokių bibliotekų pavyzdžiai yra Lapack, ScaLapack, Cray Scientific Library, HP Mathematical Library, PETSc ir daugelis kitų.

Kai kurios lygiagrečios dalykų bibliotekos

BLAS ir LAPACK yra bibliotekos, įgyvendinančios pagrindines tiesinės algebros operacijas, tokias kaip matricos daugyba, matricos vektorių daugyba ir kt.

ScaLAPACK apima LAPACK procedūrų poaibį, perkurtą naudoti MPP kompiuteriuose, įskaitant: tiesinių lygčių sistemų sprendimą, matricos inversiją, stačiakampes transformacijas, savųjų verčių paieškas ir kt.

FFTW, DFFTPack – greita Furjė transformacija.

PETSc yra procedūrų ir duomenų struktūrų rinkinys, skirtas lygiagrečiai spręsti mokslines problemas su modeliais, aprašytais dalinių diferencialinių lygčių forma.

Specializuoti paketai ir programinės įrangos sistemos

Ir galiausiai, paskutinė sritis, kurią verta paminėti, yra specializuotų paketų ir programinės įrangos sistemų naudojimas. Paprastai tokiu atveju vartotojui iš viso nereikia programuoti. Pagrindinė užduotis yra teisingai nurodyti visus reikiamus įvesties duomenis ir teisingai naudoti paketo funkcionalumą. Taigi, daugelis chemikų naudoja GAMESS paketą kvantiniams cheminiams skaičiavimams atlikti lygiagrečiuose kompiuteriuose, negalvodami, kaip lygiagretus duomenų apdorojimas yra įgyvendintas pačiame pakete.

Kursinis darbas

tema: „Programavimo kalbos“


Įvadas

1. Programavimo kalbos

1.1 Programavimo kalbų raidos istorija

2. Šiuolaikinių programavimo kalbų apžvalga

2,1 C jo veislės

2.2 Paskalio

2.3 Fortran

2.4 PAGRINDINIS

Išvados ir pasiūlymai

Naudotos literatūros sąrašas

Įvadas

Šiuolaikiniame kompiuterinių technologijų vystymosi etape neįmanoma įsivaizduoti aukštos kvalifikacijos specialisto, kuris neišmanytų informacinių technologijų. Kadangi bet kurio dalyko veikla labai priklauso nuo informacijos išmanymo laipsnio, taip pat nuo sugebėjimo ją efektyviai panaudoti. Laisvai orientuotis informacijos srautuose šiuolaikinis bet kokio profilio specialistas turi mokėti priimti, apdoroti ir naudoti informaciją, pirmiausia kompiuterių, taip pat telekomunikacijų ir kitų naujų komunikacijos priemonių pagalba, įskaitant gebėjimą valdyti programavimo kalbas.

Šios temos aktualumą lėmė tai, kad kompiuterinių technologijų pažanga lėmė naujų ir įvairių ženklų sistemų, skirtų įrašymo algoritmams – programavimo kalbų, atsiradimo procesą.

Tyrimo objektas buvo programavimo kalbos ir programavimo kalbų raidos istorija.

Kursinio darbo tikslas – ištirti programavimo kalbų klasifikaciją ir jų kūrimą.

Tyrimo tikslai:

1. Peržiūrėkite bendrą informaciją ir programavimo kalbų lygius.

2. Peržiūrėkite programavimo kalbų raidos istoriją.

3. Apžvelgti šiuolaikines programavimo kalbas.

Tyrimo tikslai:

1. Įvadas į programavimo kalbas.

2. Programavimo kalbų raidos istorijos svarstymas.

3. Šiuolaikinių programavimo kalbų apžvalga.

Pirmame skyriuje aptariama bendra informacija apie programavimo kalbas ir jų kūrimo istoriją.

Antrame skyriuje apžvelgiamos šiuolaikinės programavimo kalbos.

Šiame kursiniame darbe buvo naudojami tyrimo metodai.

Naudotos techninės priemonės: PC: Core 2 DuoE6600 2,4 GHz 2 x 4 MB L2; 2 x 1024 MB DDR3-1333 MHz; NVIDIAGeForce 8600 GT 512 MB; HDDHitachiDeskstar 7K1000 1TB; Spausdintuvas: Canon LBP3010.

Windows OS programinė įranga XPProfessionalSP3. Šis kursinis darbas atliktas Microsoft Word 2003, taip pat naudotos kitos programos: Microsoft PowerPoint, Nero StartSmart.

1. Programavimo kalbos

Programavimo kalba yra žymėjimo sistema, naudojama tiksliai apibūdinti kompiuterio programas ar algoritmus. Programavimo kalbos yra dirbtinės kalbos. Jie skiriasi nuo natūralių kalbų ribotu „žodžių“ skaičiumi ir labai griežtomis komandų (operatorių) rašymo taisyklėmis. Todėl naudojant pagal paskirtį jie neleidžia laisvai interpretuoti natūraliai kalbai būdingų posakių.

Galima suformuluoti daugybę reikalavimų programavimo kalboms ir klasifikuoti kalbas pagal jų ypatybes.

Pagrindiniai programavimo kalbų reikalavimai:

aiškumas – jei įmanoma, jau esamų simbolių, gerai žinomų ir suprantamų tiek programuotojams, tiek kompiuterių naudotojams, naudojimas kalba;

vienybė – tų pačių simbolių naudojimas toms pačioms ar susijusioms sąvokoms žymėti skirtingose ​​algoritmo dalyse. Šių simbolių skaičius turėtų būti kuo mažesnis;

lankstumas – galimybė palyginti patogiai, nesudėtingai aprašyti bendrus matematinių skaičiavimų metodus, naudojant ribotą kalboje prieinamų vaizdinių priemonių rinkinį;

moduliškumas - galimybė aprašyti sudėtingus algoritmus paprastų modulių rinkinio pavidalu, kuriuos galima sudaryti atskirai ir naudoti įvairiuose sudėtinguose algoritmuose;

vienareikšmiškumas – nedviprasmiškas bet kurio algoritmo įrašymas. Jo nebuvimas gali lemti neteisingus atsakymus sprendžiant problemas.

Šiuo metu pasaulyje yra keli šimtai faktiškai naudojamų programavimo kalbų. Kiekvienas iš jų turi savo taikymo sritį.

Bet koks algoritmas yra instrukcijų seka, kurią vykdydami galite pereiti nuo pradinių duomenų prie rezultato atlikdami baigtinį žingsnių skaičių. Atsižvelgiant į instrukcijų detalumo laipsnį, dažniausiai nustatomas programavimo kalbos lygis – kuo mažiau detalumo, tuo aukštesnis kalbos lygis.

Remiantis šiuo kriterijumi, galima išskirti šiuos programavimo kalbų lygius:

· mašina;

· orientuota į mašiną (montuotojai);

· nuo mašinos nepriklausomos (aukšto lygio kalbos).

Mašinų kalbos ir į mašiną orientuotos kalbos yra žemo lygio kalbos, kurioms reikia nurodyti smulkias duomenų apdorojimo proceso detales. Kita vertus, aukšto lygio kalbos imituoja natūralias kalbas, naudodamos kai kuriuos šnekamosios kalbos žodžius ir įprastus matematinius simbolius. Šios kalbos yra draugiškesnės žmogui.

Įvairių tipų procesoriai turi skirtingus instrukcijų rinkinius. Jei programavimo kalba yra orientuota į konkretų procesoriaus tipą ir atsižvelgiama į jo ypatybes, tada ji vadinama žemo lygio programavimo kalba. Šiuo atveju „žemas lygis“ nereiškia „blogas“. Tai reiškia, kad kalbos operatoriai yra artimi mašininiam kodui ir yra orientuoti į konkrečias procesoriaus komandas.

Programuodamas mašinine kalba, programuotojas gali valdyti kiekvieną komandą ir kiekvieną atminties langelį bei naudotis visomis turimų mašinos operacijų galimybėmis. Tačiau programos rašymo mašinų kalba procesas yra labai daug laiko ir varginantis. Programa pasirodo sudėtinga, sunkiai peržiūrima ir sunkiai derinama, keičiama ir tobulinama.

Todėl tuo atveju, kai reikia turėti efektyvią programą, maksimaliai atsižvelgiančią į konkretaus kompiuterio specifiką, vietoj mašininių kalbų naudojamos joms artimos į mašiną orientuotos kalbos (montuotojai). .

Surinkimo kalba yra žemo lygio mašinai būdinga kalba, kurioje trumpi mnemoniniai pavadinimai atitinka atskiras mašinos instrukcijas. Naudojama programoms, parašytoms mašininiu kodu, žmonėms skaitoma forma pavaizduoti.

Surinkimo kalba leidžia programuotojui naudoti tekstinius mnemoninius (tai yra, žmogui lengvai įsimenamus) kodus, savo nuožiūra priskirti kompiuterio ir atminties registrams simbolinius pavadinimus, taip pat nustatyti jam patogius adresavimo būdus. Be to, tai leidžia naudoti skirtingas skaičių sistemas (pavyzdžiui, dešimtainę ar šešioliktainę) skaitinėms konstantoms pavaizduoti, programoje naudoti komentarus ir pan.

Žemo lygio kalbos sukuria labai efektyvias ir kompaktiškas programas, nes kūrėjas turi prieigą prie visų procesoriaus galimybių. Kita vertus, tai reikalauja labai gero kompiuterio išmanymo, apsunkina didelių programų derinimą, o galutinės programos negalima perkelti į kompiuterį su kitokio tipo procesoriumi. Tokiomis kalbomis dažniausiai rašomos nedidelės sistemos aplikacijos, įrenginių tvarkyklės, sąsajų moduliai su nestandartine įranga, kai svarbiausiais reikalavimais tampa kompaktiškumas, našumas ir galimybė tiesiogiai pasiekti techninės įrangos resursus. Kai kuriose srityse, pavyzdžiui, kompiuterinėje grafikoje, bibliotekos rašomos asamblėjos kalba, kad būtų efektyviai įgyvendinami daug skaičiavimo reikalaujantys vaizdo apdorojimo algoritmai.

Taigi programoms, parašytoms asamblėjos kalba, reikia žymiai mažiau atminties ir vykdymo laiko. Programuotojo žinios apie surinkimo kalbą ir mašinos kodą leidžia suprasti mašinos architektūrą. Nors dauguma programinės įrangos profesionalų kuria programas aukšto lygio kalbomis, galingiausia ir efektyviausia programinė įranga yra visiškai arba iš dalies parašyta asamblėjos kalba.

Aukšto lygio kalbos buvo sukurtos siekiant išlaisvinti programuotoją nuo konkrečių kompiuterių techninių savybių ir jų architektūros ypatybių. Kalbos lygiui būdingas jos artumo natūraliai, žmogaus kalbai laipsnis. Mašinų kalba nepanaši į žmonių kalbą, ji yra itin skurdi savo vaizdinėmis priemonėmis. Programų rašymo aukšto lygio kalbomis priemonės yra išraiškingesnės ir žmonėms pažįstamos. Pavyzdžiui, skaičiavimo algoritmas, naudojant sudėtingą formulę, nėra padalintas į atskiras operacijas, o parašytas kompaktiškai vienos išraiškos forma naudojant pažįstamus matematinius simbolius. Kur kas lengviau sukurti savo arba suprasti kažkieno programą šia kalba.

Svarbus aukšto lygio kalbų pranašumas yra jų universalumas ir nepriklausomumas nuo kompiuterių. Tokia kalba parašyta programa gali būti vykdoma skirtingose ​​mašinose. Programos sudarytojui nereikia žinoti kompiuterio, kuriame jis ketina atlikti skaičiavimus, komandų sistemos. Perkeliant į kitą kompiuterį, programai nereikia keisti. Tokios kalbos yra ne tik bendravimo priemonė tarp žmogaus ir mašinos, bet ir tarp žmonių. Aukšto lygio kalba parašytą programą gali lengvai suprasti bet kuris kalbą ir užduoties pobūdį išmanantis specialistas.

Taigi galime suformuluoti pagrindinius aukšto lygio kalbų pranašumus prieš mašinines kalbas:

Aukšto lygio kalbos abėcėlė yra daug platesnė nei mašininės kalbos abėcėlė, o tai žymiai padidina programos teksto aiškumą;

leidžiamų naudoti operacijų rinkinys nepriklauso nuo mašinos operacijų aibės, o pasirenkamas patogumo sumetimais formuluojant tam tikros klasės uždavinių sprendimo algoritmus;

sakinio formatas yra gana lankstus ir patogus naudoti, todėl vienu sakiniu galima nurodyti gana prasmingą duomenų apdorojimo etapą;

reikalingos operacijos nurodomos naudojant visuotinai priimtus matematinius užrašus;

Žalina 2016 m. sausio 13 d., 15.42 val

Įvairios programavimo kalbos ir jų taikymo sritys. Paskaita Yandex

  • „Yandex“ įmonės tinklaraštis,
  • Interneto svetainių kūrimas,
  • Programavimas,
  • Pramoninis programavimas

Pirmąjį savo įrašą šiais metais nusprendėme skirti labai pagrindinei temai, paskaita, apie kurią buvo skaitoma „Small Shad“. Joje dalyvauja aukštųjų mokyklų studentai, kurie domisi technologijomis, taigi ir pristatymo specifika – paskaita bus ypač įdomi tiems, kurie tik pradeda programuoti ir galvoja, kokia kryptimi tobulėti. Jiems „Yandex“ turi kursą „Įvadas į programavimą (C++)“, kurį galima išklausyti Stepic.org platformoje.

Lektorius Michailas Gustokašinas yra „Yandex“ akademinių programų kuratorius, Aukštosios ekonomikos mokyklos Informatikos fakulteto studentų konkursų centro direktorius. Michailas išugdė dešimtis visos Rusijos programavimo olimpiadų nugalėtojų ir prizininkų.

Paskaitoje kalbama apie tai, kokios programavimo kalbos yra, kuo jos skiriasi, kaip atsirado ir kurios geresnės, kurios prastesnės. Pradžioje šiek tiek pakalbėsime apie kalbų istoriją – kaip jos atsirado, kaip žmonės pradėjo programuoti, kaip viskas vystėsi, kas dabar vyksta. Antroje dalyje bus kalbama apie tai, kokias užduotis kuri kalba tinka, kaip „išsirinkti mėgstamą kalbą ir mėgautis gyvenimu“. Lektorius šiek tiek papasakos ir apie tai, kaip, jo nuomone, galima viso to išmokti ir tada įsidarbinti.

Kaip visada, po pjūviu yra išsami paskaitos stenograma, kad galėtumėte naršyti jos turinį.

Programavimo kalbų istorija

Pradėkime nuo pradžių. Pradžioje kompiuteriai net neturėjo klaviatūros! Tai yra, viskas buvo labai blogai – neturėjo nei klaviatūros, nei ekrano, turėjo tik perfokortas (tai smulkmenos su skylutėmis arba be skylučių). Atitinkamai, jie ten įsmeigė kaiščius, arba ten šviečia šviesa. Jei yra skylė (arba atvirkščiai ne), tai reiškė nulį arba vienetą. O programos tuo metu buvo rašomos naudojant mašininius kodus – kiekviena operacija kompiuteryje (sudėtis, atimtis, kai kurios sudėtingesnės operacijos) turėjo kažkokį mašininį kodą. Žmonės patys išsirinko šį kodą iš ženklo, visokių adresų atmintyje, viską išmušė rankomis ir įdėjo į skaitytuvą – ir viskas buvo suskaičiuota. Žinoma, programuotojo darbas tikriausiai tada nebuvo ypač įdomus - daryti skyles, o tobulėjant mokslui ir technologijoms, žinoma, jie pradėjo sugalvoti visokių „įdomesnių“ dalykų. Pavyzdžiui, surinkėjas, kuris jau šiek tiek palengvino gyvenimą.

Na, kaip jis palengvino gyvenimą? Užuot prisiminę, kad komandai buvo kažkoks „stebuklingas“ kodas, buvo naudojami įvairūs žodžiai, panašūs į „žmogišką“ anglų kalbą – kai kurie add arba mov, o tada registrai arba atminties sritys, kintamieji, su kuriais jų reikia. buvo išvardyti atlikti operacijas. Bet aišku, kad tai apskritai pareikalavo nemažai protinių pastangų, kad įsimintume, kokiame registre ką turime, kur kokie kintamieji ir kas apskritai vyksta. Kodėl taip atsitiko? Nes kompiuteriai buvo „kvailiai“ ir nieko „protingesnio“ negalėjo suprasti. Tiesą sakant, mašininio kodo surinkimas iš asemblerio taip pat reikalauja laiko ir atminties (tuo metu, žinoma, jos buvo mažai).

Palaipsniui tapo aišku, kad sukurti tokias dideles sudėtingas programas buvo labai sunku. Programuotojo produktyvumas šiose komandose buvo itin žemas – tai yra, jis parašė po kelias eilutes per dieną (prasmingas), o kiekviena eilutė nepadarė nieko ypatingo – kažkokios paprastos aritmetinės operacijos. Ir žmonės norėjo, kad kalbos būtų daug panašesnės į žmonių kalbą, ypač į anglų kalbą, kad būtų lengviau ir patogiau rašyti programas. Ir einam!

Senos ir mirusios kalbos

Viena pirmųjų kalbų buvo Fortran. Beje, jis buvo perforuotas ir perforuotose kortelėse – buvo specialios perforuotos kortelės Fortran programoms perforuoti. Bet jei paimti šį Fortraną dabar, mano nuomone, jis yra net kažkur tarp 50-60. pasirodė - ir jei bandysi ką nors ant jo parašyti, tau bus labai nemalonu, garantuoju! Šiuolaikinis „Fortran“ vis dar gyvas, tačiau gerokai skiriasi nuo to, kas buvo anksčiau.

Kitos kalbos - dabar parašysiu vieną dalyką, apie kurį tikriausiai girdėjote tik įvairiuose renginiuose, kuriuose kalbama apie programavimo istoriją - tai COBOL. Tai buvo verslo paraiškų rašymo kalba. Kas yra verslo programos? Kai kurios operacijos bankuose, dar kažkas, visa tai buvo parašyta Cobol. Žinoma, čia tai nėra labai populiaru. Manau, kad Maskvoje jums bus labai sunku rasti Cobol programuotoją. O kažkur ne Maskvoje – su dar didesniais sunkumais. Tačiau stebėtina, kad vos prieš 10 metų daugiau nei pusė viso žmonijos parašyto kodo buvo parašyta Cobol. Ir iki šiol nemaža dalis visų bankinių operacijų atliekama naudojant jame parašytas programas (COBOL), o žmonės vis tiek kažką joje rašo.

Taip pat yra „juokinga“ kalba, ji vadinosi Algol (68-oji versija, apibūdinanti jos sukūrimo metus). Tai algoritminė kalba. Apskritai jie ten galėjo ką nors padaryti, bet dabar mums nelabai įdomu, ką jie gali. Ir tuo mes galime užbaigti savo ekskursiją į senovę ir palyginti nevartotas kalbas ir pereiti prie to, kas dar gyva (ir aktyviai gyvena).

Senos, bet gyvos kalbos

Algol buvo išrastas Europoje, o Fortran buvo naudojamas daugiausia valstijose - didelių skirtumų nėra. Kokia tendencija pastebima? Iš pradžių viskas buvo sudėtinga ir norint rašyti reikėjo būti beveik inžinieriumi, elektros inžinieriumi, kad suprastum, kur jungiami kontaktai ir dar kažkas programavimui. Tada irgi reikėdavo sėdėti su lapeliais ir skaičiuoti atmintį, prižiūrėti. Ir pamažu viskas tapo paprasčiau, paprasčiau, paprasčiau ir tada dar paprasčiau programuotojui – kuo mažiau žmogui galvoti, kuo daugiau daryti automatiškai. Maždaug šio laikotarpio pabaigoje (dėstytojas nurodo Algolą ir Kobolą) pradeda atsirasti kalbų, kurios tam tikra prasme „išliko“ iki šių dienų.

PAGRINDINIS. Galbūt kai kurie žmonės vis dar ką nors jame rašo, bent jau aš mačiau, kad kai kuriose institucijose jie moko QBasic - ten yra mėlynas langas, kuriame parašyta „1989“. Apskritai jis „gyvena iš visų jėgų“! Ji buvo išrasta kaip kalba ne programuotojams. Tuo metu programuotojas buvo tokia labai specializuota profesija. Ir čia jie jums sako: „Turime šaunią bazinę kalbą ir bet kuris protingas žmogus gali ja parašyti programą – tai lengva“. Vėlgi, tas BASIC ir modernus BASIC yra didžiulis skirtumas. Visos šios eilutės sunumeruotos po 10, visokie GOTO ir kitokie siaubai – jie jau neturi nieko bendro su šiuolaikiniu BASIC ir net su 1989 metų BASIC mažai ką bendro turi.

Dar viena juokinga istorija – Paskalio kalba, plačiai žinoma universitetų sluoksniuose, daugiausia Rusijoje ir buvusios Sovietų Sąjungos šalyse. Ji buvo ir toliau stebėtinai naudojama kaip mokymo kalba. Likusioje pasaulio dalyje ji yra mažiau paplitusi, tačiau ji taip pat gyva ir sveika. Yra toks žmogus kaip Wirthas – jis mokslininkas, teoretikas. Jis dalyvavo Algolio diskusijoje, jam nepatiko, kas atsitiko, ir jis sugalvojo savo kalbą – Paskalį. Ir tada įmonė „Borland“ (ir prieš tai daugelis kitų kompanijų, ypač „Apple“) ėmė ją ir viską sugriovė. Jis turėjo gražią, nuoseklią teoriją – „viskas bus gerai“ – ir jie ėmė ją ir prikimšo tai, ko reikėjo žmonėms dirbti. Na, tai pasirodė ne taip gražu, kaip jis norėjo.

Ir, galiausiai... C išrado inžinieriai. Jei Paskalį išrado mokslininkas, tai C išrado Kernighanas ir Ritchie, jie dirbo Bell inžinieriais. Kaip tai nutiko? Tuo metu šiomis kalbomis nieko sistemiško parašyti nebuvo įmanoma (dėstytojas nurodo Fortran, COBOL, Algol). Kas yra „sisteminis“? Pavyzdžiui, operacinė sistema, kai kurios tvarkyklės, kažkas kita. Šios kalbos buvo skirtos matematiniams skaičiavimams, verslo skaičiavimams, viskam. O visa kita buvo parašyta asamblėjos kalba. Buvo keletas kalbų, jos dabar mirusios, tai yra, C kalba atsirado ne iš karto iš Asamblėjos, o per kai kuriuos tarpinius dalykus.

Kokia prasmė? Kernighanas ir Ritchie mėgo žaisti Asteroidų žaislą – erdvėlaivis skrenda, o ten yra asteroidų, jis šaudo į juos, ir jie subyra. Jie turėjo serverį, kuriame žaidė, bet ten buvo daug žmonių, o žaislas buvo lėtas. Ir jie kažkur savo biure atrado, kad turi kažkokį kompiuterį, kurio niekas nenaudoja. Tačiau iškilo problema – jis buvo kitokios architektūros, o žaidimas parašytas Assembly.

Žinoma, jie jį perrašė ir netgi pridėjo tam tikrų funkcijų, kad galėtų žaisti. Tačiau tai paskatino juos suprasti, kad kaskart perrašyti naujai architektūrai nėra labai protinga. Ir jie nusprendė parašyti aukšto lygio kalbą, kuri būtų tinkama sistemos programavimui, tai yra, kuria būtų galima valdyti atmintį, kurioje būtų galima suprasti, kur viskas slypi ir kaip prieiti prie šių atminties dalių. . Taip atsirado C kalba, turėjusi didžiulę įtaką viskam, kas po to. Visi jie (dėstytojas atkreipia dėmesį į Algol, Fortran ir kitas minėtas kalbas) turėjo didelę įtaką, bet C - tiesiog taip...

Atitinkamai, tai buvo pagrindinė kalba Unix – operacinėje sistemoje, kuri tuo metu buvo dar populiaresnė nei dabar. O apie 80-uosius situacija buvo maždaug tokia (dėstytojas rodo Basic, C ir kitas minėtas kalbas). Tarkime, pas mus visa tai jau pamažu apmirė (dėstytojas ištrina Assembly Language, Fortran ir Algol paminėjimus)... O 80-aisiais kompiuteriai mažėjo, išmanesni, pigesni, o žmonės norėjo visokių keistų dalykų. kad gyvenimas būtų dar geresnis, gyventi dar smagiau.

Kalbos nuo 80-ųjų

Viena iš pirmųjų keistenybių buvo ta, kad tai buvo C++ kalba. C kalba turi labai daug trūkumų (na, apskritai didžiulių) – joje galima daryti viską, įskaitant šaudyti sau į koją, šaudyti sau į koją su fantastika, kita koja, šaudyti viena koja kita. koja, apskritai – ką nori daryti. Bet tuo pat metu kai kurie architektūriniai dalykai ten atliekami gana sunkiai – vėlgi, kaip Asamblėjoje, turime sekti, kur esame, ką ir kokią atmintį skyrėme; Ji visą laiką kažkur „teka“, ši atmintis - tai yra, mes ją skyrėme, pamiršome ištrinti, ištrynėme netinkamą dalyką, peržengėme atminties ribas, apskritai - mes susikrovėme krūvą problemų.

C++ iš pradžių buvo sukurtas kaip C kalbos priedų rinkinys, kuris palengvintų kūrimą. Tuo metu objektinis programavimas tapo madingas ir žmonės nusprendė, kad viską galima apibūdinti hierarchijos forma, tai yra, turi kamuolį (abstraktus), iš jo paveldi futbolo kamuolį, tinklinį, kitą abstraktų kamuolį. . Tada buvo madinga, kad „mes dabar viską rašome kažkokios hierarchijos pavidalu, ir viskas bus gerai, gyvenimas susitvarkys, viskas bus gerai ir viskas“. C++ tam tikra prasme įgyvendino šį objektinį metodą – tai nebuvo pirmoji objektinio programavimo kalba, tačiau ji tapo gana populiari ir joje pradėjo atsirasti visokių funkcijų. Tuo pačiu metu C++ išlaikė beveik visišką suderinamumą (tuo metu) su C kalba, 99% atvejų buvo sėkmingai sukompiliuota kaip C++ ir netgi veikė taip pat. Taip buvo siekiama palengvinti perjungimą iš C į C++.

Be objekto metodo (C++), greitai atsirado standartinė šablonų biblioteka (STL). Manau, kad mokykloje tie, kurie dar mokėsi Paskalio, atrado, kad, pirma, jūs neturite įmontuoto rūšiavimo (senoviniame, mėlyname Borland Pascal, dabar jis jau yra šiuolaikinėse versijose) - yra pavyzdys (šaltinis kodas) rūšiavimą, jį galima nukopijuoti ir įklijuoti. Bet jei norite rūšiuoti sveikuosius skaičius čia, realius skaičius čia ir eilutes čia, kurias galima palyginti tarpusavyje, turėjote parašyti tris skirtingus rūšiavimo būdus, kurie atlieka lygiai tą patį, tik turi skirtingus duomenų tipus. Tai nėra labai gerai, o šablonai, kurie iškart nepasirodė C++, labai palengvino šią problemą. Tai yra, jūs turėjote abstrakčią programą, kuri sėkmingai surūšiavo kažką, ką galima palyginti.

Scenarijų kalbos nuo 90-ųjų

Tačiau devintajame dešimtmetyje laikas nesustojo, įvyko daug įdomių dalykų. Tačiau kažkur 80-90-ųjų sandūroje kompiuteriai tapo tokie geri, kad buvo galima daryti labai keistus ir labai neefektyvius dalykus. Visų pirma, tai buvo scenarijų kalbos, kurios nebuvo kompiliuojamos į mašininį kodą, o buvo interpretuojamos. BASIC taip pat buvo aiškinamas tam tikru metu, tačiau šios scenarijų kalbos buvo skirtos daugiausia teksto apdorojimui - tai, pavyzdžiui, Perl, Python (tai nebuvo labai garsus), PHP, Ruby - tai yra scenarijų kalbos. kad vienu ar kitu skirtingu mastu jie tebegyvena (visi spėjo atsirasti iki 2000 m., net gerokai anksčiau).

Šiek tiek apsvarstykime juos, nes tai yra specifiniai dalykai ir dabar daug kur naudojami. Kokia idėja? Jei nekompiliuojame, galime leisti daug daugiau. Pavyzdžiui, programa gali pažvelgti į savo kodą ir kažkaip juo naudotis; ji žino, kas joje vyksta ir dėl to gali nuveikti daug įdomių dalykų.

Perlas buvo skirtas teksto apdorojimui – tais laikais kompiuteriuose buvo tiek atminties, kad galėdavai ten prikimšti teksto ir su šiuo tekstu padaryti ką nors naudingo (pavyzdžiui, suskaičiuoti žodžius, atlikti kažkokią paiešką). Bet, mano nuomone, jį sukūrė žmonės, kurie buvo šiek tiek pamišę, nes apie tai juokaujama: „Bet koks parašytas simbolių rinkinys yra tinkama Perlo programa“. Mano nuomone, ant jo galima tik rašyti, o ne skaityti. Kai žiūriu į Perl kodą ir bandau ką nors suprasti, nieko nesuprantu. Gal geriau pažinęs kažką ir suprasčiau, bet kaip girdėjau iš tų žmonių, kurie dar moka, sako, kad lengviau perrašyti iš naujo. Tai yra, programos pasirodo trumpos ir tikrai lengviau jas perrašyti nuo nulio, nei išsiaiškinti, kas ten yra, ir taisyti.

Maždaug tuo metu, 90-ųjų viduryje, atsirado internetas. Iš pradžių tai buvo paštas, svetainės su statiniu HTML, bet ten norėjosi pridėti kažkokios dinamikos, kad viskas vyktų dinamiškai, būtų galima pildyti kai kurias formas, pasidaryti svečių knygas ir dar ką nors. Atitinkamai, tam reikėjo tam tikros sąveikos, jie sugalvojo protokolą, kaip jis sąveikauja, ir, svarbiausia, sugeneravo šiuos statinius (sąlyginius) puslapius, kurie bus „išspjaunami“ vartotojui atsakant į jo prašymą.

Apskritai niekas kitas, išskyrus Pearl, tuo metu netiko. Parašyti tvarkyklę gryna C arba C++ buvo bloga idėja. O kadangi trūko nieko geresnio, tuo metu (ir gana ilgą laiką) Pearl buvo populiari žiniatinklio kūrimo kalba. Žinoma, masto negalima lyginti su tuo, kas vyksta dabar.

PHP pasirodė kaip... atsitiktinai. Vienas žmogus gana greitai nustojo tai daryti – susikūrė savo puslapį, turėjo kažkokią svečių knygą, dar kažką, dar kažkokių dalykų. Ir jis parašė keletą makrokomandų Perlui, panašių į C, nes žinojo, kaip naudoti C, tiesiog todėl, kad jam tai buvo labai patogu. Ir aš jį pavadinau asmeniniu pagrindiniu puslapiu. Jis pasidalino ja ir pasakė: „Žmonės, pažiūrėkite, ką parašiau, čia viskas daug aiškiau nei Perle ir galite tai redaguoti“. Ir žmonėms patiko.

Tada jis atsisakė šio verslo. Apskritai, dėl to šis PHP pradėjo gyvuoti ir laikui bėgant tapo daug populiaresnis nei Perl. Tačiau ši jo „gimimo trauma“ (sugalvota kaip Pearl makrokomandų rinkinys) jam labai žiauriai pajuokavo. Kalba pasirodė keista. Tai yra, ji kūrėsi pati, niekas neprojektavo, niekas neadministravo kūrimo proceso (nei įmonė, nei koks nors asmuo), bet buvo daug grupių, kurių kiekviena pjaudavo tai, kas patiko. Dėl to funkcijos įvardijamos skirtingai, net nėra stiliaus, viskas pabraukta, iš esmės atsitiktinai, nustatymų čia ir ten, o kaip visa tai veiks, nelabai aišku. Bet per dvi valandas galite atsisėsti ir parašyti PHP, nes taip buvo numatyta.

Python ir Ruby: Ruby dabar mažiau populiarus, Python kažkaip geriau "suplanuotas", pakalbėkime apie tai vėliau. Akivaizdu, kad tais laikais tai buvo (dėstytojas nurodo Perl, Python, Ruby, PHP) labai specializuotos kalbos, skirtos labai specializuotiems tikslams. Apskritai, jokios sistemos programavimo, jokios verslo logikos juose tuo metu niekas nerašė ir dabar nelabai kas tai daro.

Surinktos 90-ųjų kalbos

Važiuosime tuo pačiu laiku, bet kita kryptimi. Tuo metu mes naudojome C++ beveik viskam, ką reikėjo parašyti, ne žiniatinkliui, ne teksto apdorojimui, o tiesiog programoms, operacinėms sistemoms, žaislams - apskritai, bet kam. Tačiau C++ iš tikrųjų yra baisi kalba. Kodėl? Kadangi, pirma, jis paveldėjo visas C problemas dėl atgalinio suderinamumo. Ten vis tiek galite nusižudyti milijonu skirtingų būdų, tais pačiais, kurie buvo C (natūralu, C++ buvo pridėta naujų būdų). Tuo pačiu, jei viską parašei gerai ir teisingai, kaip norėjo C++ autoriai, tai, žinoma, nebebuvo įmanoma nusižudyti naudojant senus C kodo metodus, o atrodo, kad jų yra mažiau. juos. Tačiau jis turėjo labai keistą, savotišką objekto modelį. Programos padalijimas į modulius, į tam tikras dalis paprastai kilo iš C (jei žinote, kaip rašyti įtraukite į C arba C++ – iš tikrųjų tai buvo skirtas būdas tiesiog įterpti bibliotekos tekstą į savo programą, pabaiga, kai parašai krūvą įeinančių, turi viską - jei "primityvu", kaip buvo pačioje pradžioje - viskas įkišama į vieną failą ir tada viską sukompiliuoti užtrunka žiauriai ilgai, nes tas pats Paskalis , Virtovskis, šiuo klausimu buvo daug labiau apgalvotas, vėlesnės versijos tapo dar geresnės.

Apskritai C++ turi daug trūkumų. Programuotojas turėjo būti aukštos kvalifikacijos, kad galėtų rašyti C++, o tokie programuotojai buvo brangūs (ir mokymai, ir dar kažkas, tai yra, sunku rasti programuotojų rinkoje, jiems reikia mokėti daug, o apskritai tai yra ne esmė...). O mūsų kompiuteriai skaičiuoja vis greičiau, atpigina, žmonės perka naujus kompiuterius ir nori daugiau aplikacijų, žaislų savo telefonams, apskritai – daugiau džiaugsmo.

Taip atsirado Java. Taip pat yra gana juokinga istorija apie tai, kaip ši kalba gavo savo pavadinimą. Ten yra programuotojų, jie nuolat geria kavą ir tuo metu buvo madinga gerti kavą, kuri išaugo Javos saloje. Kalba buvo sumanyta kaip įtaisytųjų prietaisų, ypač kavos aparato, kalba. Taip atsirado pavadinimas...
Kas su ja prasidėjo, kas joje buvo gero ir kodėl ji sulaukė tokio populiarumo? Pirma, jie visiškai atsikratė Sishnoi palikimo. Nėra jokių ženklų, daug mažiau būdų nušauti kokią nors kūno dalį ir viską sulaužyti. Antra, jie pristatė daug naujesnes idėjas apie objekto modelį - tai yra, C++ pasirodė daug anksčiau nei Java ir naudojo archajiškesnį, „laukinį“ objekto modelį. Na, čia (dėstytojas rodo į Java) tai jau tada buvo labiau apgalvota, o teoriškai žmonės mąstė, o praktiškai taikė ir padarė viską daug šauniau.

Ir galiausiai trečia. Mūsų Java programos buvo sukompiliuotos ne į mašininį kodą, o į virtualios mašinos kodą. Tai reiškia, kad turėjote virtualią mašiną (VM) JVM - Java. Jūsų programos buvo surinktos į kažkokį tarpinį atvaizdavimą ir tada šios mašinos pagalba jos jau buvo vykdomos. Ką tai davė? Pirma, sulėtėjo, antra, su baisia ​​jėga suvalgė atmintį, trečia, buvo nešiojama bet kur (teoriškai) - net prie kavos virimo aparato, net prie kavos malūnėlio, net prie kompiuterio, net į mobilųjį telefoną. Viena vertus, tai yra gerai, tai yra, jūs ką tik parašėte virtualios mašinos įgyvendinimą, tada visur paleidžiate savo Java programas. Bet, kita vertus, blogai, kad tas pats telefonas tada turėjo mažai atminties, mažo našumo, ir visa tai taip pat pradėjo lėtėti ir lėtėti.

Bet tai net nėra pagrindinis dalykas, dėl kurio iš pradžių buvo išrasta kalba. Java kalba buvo išrasta siekiant sumažinti programuotojų kvalifikacijos reikalavimus. Tai yra, blogesni programuotojai gali rašyti geras programas Java, nes ji neleidžia rašyti blogų programų – ten nėra priemonių blogoms programoms rašyti. Ten galima rašyti tik geras programas. Na, kalbos kūrėjų supratimu.

Tai yra, jei C, C++, Python ir bet kuo, mes iš savo projekto galime sukurti kažkokį baisų šiukšlyną, kuriame viską sumaišome, surinkome valandų valandas ir dar kažką. Java taip pat galite sukurti šiukšlyną, tačiau tam reikia šiek tiek pasistengti. Tai yra, pagal nutylėjimą tai nėra „šiukšlių sąvartynas“, kyla kitų problemų, kad kažkas buvo paveldėta ir paveldėta - apskritai vienai reikšmingai eilutei yra dešimt nelabai prasmingų. Tačiau toks vidutinės kvalifikacijos programuotojas gali parašyti gana aukštos kokybės kodą.
Mes jau beveik pabaigoje. Pas mus sekantis pasirodė .Net (dotnet), o ypač mus domina C# (beveik tas pats [dėstytojas rodo į Java], tai yra detalių skirtumų, jei tarp jų renkiesi , pažiūrėkite, kur jie moka daugiau pinigų).

Ir dar vienas dalykas – JavaScript. Neturi nieko bendra su Java kalba, pasirodė tais pačiais metais – žodis buvo madingas, jie licencijavo prekės ženklą jį naudoti.

Kas yra pagrindinis dalykas, į kurį reikia atkreipti dėmesį? (Dėstytojas braižo rodykles iš C++ į Java, .Net, C#, JavaScript ir PHP). Norėdami parašyti paprastą programą viena iš šių kalbų ir daugeliu kitų kalbų (jei mokate C++, paprastai nieko daugiau mokėti nereikia) rašote C++, o pradžioje pridedate dolerių, dar kažkas daro smulkmenas. ir jis pradeda dirbti su bet kuo (dėstytojas rodo kalbas, kurioms buvo priskirtos rodyklės iš C++). Tai yra, jie yra labai panašūs kai kuriais paprastais dalykais. Jei sprendžiate kokias nors mokyklos problemas, ugdymo problemas ar dar ką nors (kuriate ne didelio projekto – turite vieną failą, kuris skaito skaičius, rodo skaičius konsolėje ir dar ką nors daro), tada beveik nėra skirtumo tarp šiomis kalbomis. Aišku, kad JavaScript ir PHP yra specializuoti, jiems viskas šiek tiek kitaip. Bet čia (dėstytojas atkreipia dėmesį į Java ir C#) labai mažai skiriasi.

Nuo to laiko atsirado visokių kitokių įdomybių, tik neaišku, gyvens ar sėkmingai mirs. Ką jie dabar naudoja, kokiais tikslais?

Kalbos pasirinkimas atsižvelgiant į užduotį

Tarkime, jūs susiduriate su užduotimi parašyti vaizdo plokštės tvarkyklę. Kokią kalbą naudosi šiandien? (Šauksmas iš publikos: Java!) Kodėl... Java puiki, bet kodėl gi ne Ruby ar PHP? (Dėstytojas kalba sarkastiškai.)

Žemo lygio programavimas

Jei rašote ką nors žemo lygio, tai geriausias pasirinkimas yra C, bet iš tikrųjų aš girdėjau (bet nemačiau), kad tam naudojamas C++. Bet aš tuo mažai tikiu, nes C galite aiškiai valdyti – kadangi suteikėte tiek daug baitų atminties, vadinasi, jų bus tiek daug. Ir kaip C++ (STL) įdiegta eilutė? Na, kažkaip tai pavyko įgyvendinti. Ir galų gale mes nežinome, kaip ir kas ten vyksta, galbūt mums pritrūks atminties vaizdo plokštėje arba atsitiks dar kažkas. Todėl C vis dar gyvuoja ir nemiršta, tokios sistemos programavimo užduotys vis dar egzistuoja - parašyk operacinę sistemą, parašyk tvarkykles, parašyk dar ką nors - C tam puikiai tinka. Be to, dabar atsiranda visokių įrenginių (greitai žadama atsirasti daiktų internetas), kurie veikia baterijomis (o, natūralu, jų bus milijonai, viskas bus padengta šiuo daiktų internetu), turėtų būti labai pigūs ir sunaudoti labai mažai elektros energijos. Atitinkamai bus 2 KB atminties, 5 kHz procesorius ir aišku, kad artimiausiu metu nebus galima įsukti kažkokios virtualios mašinos ar skriptų kalbos – vadinasi, teks ką nors rašyti C. Ir net dabar, pavyzdžiui, skaičiuoja vaizdo plokštėje (OpenCL ar kita technologija) - jie nesugalvoja naujos kalbos, kad galėtų jiems rašyti programas - jie daro C su dideliais apribojimais. Tik todėl, kad žmonės jau žino, kaip tai padaryti, kam mokytis ko nors naujo? Formaliai tai tikriausiai taip pat tam tikra prasme yra C.

Interneto programavimas

Tarkime, kad norite parašyti naują „Facebook“ (socialinį tinklą). Apie ką tai rašysite? (Žmonės iš auditorijos kalba apie HTML ir CSS.) HTML ir CSS yra dizainas, todėl norime, kad ten būtų galima pridėti nuotraukų, draugų ir komentuoti.

Scenarijų daliai – tai yra, kas atsitiks kliento pusėje – tai yra „JavaScript“. Be to, kartais JavaScript sugeneruojamas kita kalba ir siunčiamas (būna taip, kad sugeneruojamas scenarijus... nes kartais lengviau apdoroti kai kuriuos logikos pakeitimus).

Keista, kad parašyta PHP – ir Facebook, ir daugelyje kitų didelių projektų. Žinoma, kai kuriuos dalykus jie turėjo parašyti patys, kad vis tiek normaliai veiktų, o ne „negražiai“, bet tai padarė. Iš principo daugiau ar mažiau nesvarbu, ką rašai, bet aš nerekomenduoju Perl. Čia ir dabar, žinoma, niekas nieko nerašo žiniatinkliui nuo nulio. Visi rašo kažkokius karkasus ar dar ką nors. Internetinė parduotuvė? Atsisiuntėme internetinės parduotuvės sistemą – ir viskas, parašėme internetinę parduotuvę.

Programavimas verslui

Tada norite parašyti kokią nors nuobodžią paraišką bankui. Ar, pavyzdžiui, turite ką nors, kas parduoda SIM korteles? Galbūt kada nors įsigijote telefoną ar ką nors kita ir jums buvo pasakyta: „Sistema kabo, mes nieko negalime padaryti“. Ką naudosite rašydami tokią paraišką? (Šauksmas iš publikos apie Python) Jūs negalite rašyti Python, ką jūs sakote?! Python verslui nieko nereikia rašyti. Kodėl? Nes kai ką nors rašai Python, rašymo proceso metu neįmanoma aptikti daug klaidų. Python yra dinamiškai spausdinamas visais įmanomais būdais ir apskritai galite paslėpti klaidą taip, kad ji iššoks tokioje situacijoje, kad net negalėsite suprasti, ką ten padarė tie kreivi vartotojai, kad viskas yra sulaužytas tau. Tai yra, Python geriau rašyti sau mažus scenarijus - jūs suprantate, kas ten vyksta ir kas daroma. Na, arba kažkas, ko negaila išmesti: norite ką nors išrutulioti prieš konkurentus, o kas, jei retkarčiais sugenda. Rašėte Python ir viskas – užvaldėte rinką. O jei rašai ką nors ilgai, pavyzdžiui, kokią nors bankinę programėlę (kad patvirtintų paskolas, dar ką nors) – rašai Java. Nes cia rimtas reikalas, popieriai, pinigai, dokumentai, dar kazkas, bet negalima taip susukti, kad viskas lūžta, kitaip žmonės įsižeis - pinigai nuėjo ir niekur nepateko, nes kažkokioje akimirkos eilutė virto skaičiumi arba atvirkščiai. Taigi, tai reiškia, kad tu metodiškai imi Java ir rašai, rašai... Na arba .Net, tokių situacijų iš principo irgi pasitaiko. Ten, žinoma, taip pat galite susidurti su problemomis, tačiau vis tiek to tikimybė yra šiek tiek mažesnė.

Programavimas kariuomenei, aviacijos pramonei

Dabar įsivaizduokite, kad jie nusprendė pasiųsti jus į Mėnulį raketa. Ką norėtumėte naudoti rašydami kodą, valdantį raketų variklius? Pažiūrėkime. Tai, ko gero (dėstytojas rodo Perl, Python, PHP, Ruby), neapsimoka - sulėtėja, dar kažkas vyksta, ir apskritai aš nesutikčiau skristi tokia raketa. C++? Tiesą sakant, aš taip pat nepasitikėčiau, nes C++ yra per daug būdų nusižudyti. Kai esi ten kur nors kosmose, tai nėra labai gerai.

Gal Java? Atrodo, kad ten viskas gana patikima ir architektūra gera, jokių laukinių tipų, jokių nereikalingų kelionių už atminties ribų. Tarkime, atėjo pats svarbiausias momentas ir mūsų Java nusprendė surinkti šiukšles už mus. Mums reikia nusileisti, sulėtinti greitį, o ji sako: „Ne, šiukšlės važiuoja“. Apskritai, irgi nelabai gerai.

Sąžiningai, norėčiau, kad ši programa būtų parašyta Pascal. Žinoma, aš nelabai mėgstu Pascalį, bet kažkaip tokiais reikalais būtų labai šaunu.

Kelių kalbų naudojimas programinės įrangos kūrimui

Na, ką apskritai reikia pasakyti apie šiuolaikines kalbas? Dabar daugelis projektų negyvena jokia viena kalba, tai yra, kai kurie iš jų gyvena viena kalba, kiti – kita, kiti – trečia. Pavyzdžiui, jei turite kokią nors žiniatinklio programą, kuri apdoroja laukinius informacijos kiekius, skambučiai į diskus (netgi ne į duomenų bazes, jie tokie didžiuliai, kad net ir ten esanti duomenų bazė negali apdoroti jokios jau parašytos) tikriausiai yra įrašyta kažkokiu būdu. tada žemo lygio C, pašėlusiai greitai rašyti į diską ir visa kita. Natūralu, kad neverta viso projekto rašyti C. Galbūt yra kažkokia tarpinė Java parašyta logika, kuri greitiems skambučiams iškviečia C funkcijas. Na, o frontend (tai, į ką žiūri vartotojas), žinoma, jau yra parašyta kažkuo, kai kuriuose scenarijuose, kažkuo, ką tiesiogiai vykdo naršyklė (JavaScript). Ir visa tai gyvena kartu ir sėkmingai bendrauja.

Kurdami kai kurias programas, net ir dideles, kartais ką daro žmonės? Jie ima ir surašo prototipą Python (kaip visa tai veiks), nubraižo, apgalvoja kokią nors architektūrą. Ant jo rašoma tikrai labai greitai – jie sumetė prototipą, eksperimentavo su juo ir pasakė: „Oho! Tai taip puiku!" Ir jie jį visiškai perrašė. Atrodytų, kad jie tą darbą atliko du kartus, todėl užtruko dvigubai ilgiau (na, pusantro). Bet ne! Dažnai paaiškėja, kad šis metodas nėra blogas, nes jei ką nors parašysite iš karto, pavyzdžiui, Java, o tada nuspręsite: „Ne, pakeisime architektūrą visiškai ir visa tai“, tada išleisite 10 kartų daugiau. laikas . Tokie dalykai taip pat egzistuoja ir gyvena.

Bet kurios programavimo kalbos sėkmės sąlygos

Dabar pakalbėkime apie tai, kodėl kai kurios gerai atrodančios kalbos neišliko arba gyvena labai ribotoje erdvėje. Kai Wirthas pamatė, kokios blogos įmonės „Apple“, „Borland“ ir visa tai padarė jo Paskaliui, jis sugalvojo dar geresnę kalbą – „Oberon“. Tai buvo tiesiog beprotiškai minimalistiška – tai yra, komandų buvo labai mažai (Stygos? Kam mums reikalingos eilutės? Sukursime simbolių masyvą!). Na, jam kažkas nepasisekė tiek, kiek galėjo pasisekti.

Dar vienas dalykas. Amerikos kariuomenė paprašė jų sukurti šaunią kalbą, kuria viskas veiktų ir viską būtų galima parašyti. Rezultatas buvo gana monstriška Adų kalba, kuria jie vis tiek kažką rašo, bet vėlgi - tik kariškiams.

Kokia problema? Kodėl kai kurios kalbos, pvz., Python, kurių iš pradžių nepalaikė jokia įmonė, užvaldė rinką. PHP, kuris taip pat yra prastai sukurtas, taip pat užvaldė rinką (didžiąją jos dalį). Ir visokie milijardai buvo investuoti (dėstytojas rodo į Adą) ir niekur nedingo, nieko neatsitiko. Su kuo tai susiję? Taip yra dėl to, kad aplink šias kalbas nėra infrastruktūros. Tai yra, kalba gali būti puiki, bet tol, kol nėra dokumentacijos, tol, kol nėra bendruomenės, kuri galėtų atsakyti į klausimus (dėl Stack Overflow) ir, galiausiai, svarbiausia, kol jų nėra daug bibliotekų, kalba neatsiranda. Tai yra, pavyzdžiui, norėjote sukurti svetainę Oberon. Kas tai, kodėl gi ne? Ir prasideda vargai... Oberone negalite nustatyti savo žiniatinklio serverio, kad jį lengvai išbandytumėte, negalite prijungti jokių bibliotekų, nes Oberonas jų neturi. Ir visa tai daroma per kažkokius ramentus, jėgos dingsta, ir apskritai pasiduodi ir rašai savo svetainę gryna C, o ne Oberon. Ir tos kalbos, kurios gerai gyvena, yra tos, kurios moka naudotis kitų kalbų bibliotekomis. Tas pats Python tose vietose, kur jis sulėtėja. Na, apskritai, visokie standartiniai dalykai kaip rūšiavimas ir dar kažkas yra parašyti C, ir jis (Python) gali su jais sąveikauti.

„Java“ taip pat turi „Java Native“ sąsają. Tai iš esmės yra C, tai yra (mano nuomone, jie visada nori jį uždrausti, bet atrodo, kad dar neuždraudė) šios kalbos gali sąveikauti su jau esančiomis bibliotekomis (daugiausia C). Ir dėl to jie ima ir dirba. Idėja, kurią bandau jums perteikti, aiški, tiesa? Nerašykite kalbomis, kurios nepalaiko C bibliotekos. Na, jei norite naudoti ką nors šaunaus. Na, pamažu jie (kalbos) įgyja savo infrastruktūrą. Ir jie kažkaip gerai gyvena.

Programavimo kalba ir profesinis orientavimas

Dabar pakalbėkime apie tai, kaip suprasti, ko norite gyvenime. Kokie yra šauniausi dalykai? Jūs galite atlikti tam tikrą sistemų programavimą, tiesa? Puiku, kad skaičiuojate šiuos bitus, norite paleisti keturkoperius, kažkokias kameras ir dar ką nors padaryti. Tada tikriausiai C yra jūsų pasirinkimas.

Jei nori rašyti, gal ne pačias įdomiausias aplikacijas gyvenime, bet tau šaunu jas kurti, viską apgalvoti ir uždirbti daug pinigų už tai, kad didžiąją laiko dalį sėdi ir nuobodžiauji (už tai reikia mokėti jei mokate miss), štai jie – Java, .Net. Eini dirbti į kokį banką, rašai, eini į darbą devintą baltais marškiniais, gauni gerą atlyginimą ir rašai pagal geriausių Java kūrėjų rekomendacijas, .Net avis ir visa tai...

Jei norite parašyti kokias nors programas, naršyklę, žaislus ar dar ką nors, tada C++ yra puikus. Jei norite rašyti svetaines, tai čia yra jūsų pasirinktos kalbos (dėstytojas rodo Perl, Python, PHP, Ruby), nėra didelio skirtumo. Vienintelis dalykas, kad PHP mirs anksčiau nei Python, todėl jei tingi mokytis naujų dalykų, mokykis Python. Didelio skirtumo nepastebėsite, bet tarnausite ilgiau.

Taip pat neaišku, kas vyksta su Ruby. Na, galite pasidaryti PHP, jei jau išmokote, laimei, tai taip paprasta, kad mokytis iš naujo neužtrunka tiek ilgai.

Ir galiausiai, yra dar viena programavimo kalbų taikymo sritis - tai yra tada, kai jas naudoja ne programuotojas. Tarkime, jūs esate matematikas, fizikas, chemikas, analitikas, bet kas ir jums reikia greitai ką nors apskaičiuoti, išanalizuoti kai kuriuos duomenis (biologams, pavyzdžiui, kiek arktinių lapių gyvena Komandų salose). Visa tai galite sudėti į lentelę programoje „Excel“ arba su kažkuo analizuoti. Python taip pat tinka tam, jis gali dirbti su tekstu ir yra daug bibliotekų, statistikos ir visa kita. Jei norite atlikti tam tikrą mašininį mokymąsi, apdoroti kai kuriuos duomenis, numatyti prognozes, tai dabar greičiausias būdas daroma naudojant Python. Tiesa, reikia pastebėti, kad užduotys labai skirtingos. Pavyzdžiui, jei norite prekiauti vertybinių popierių biržoje akimirksniu tokiomis sąlygomis, kai kotiruotės nuolat kinta, tada kad ir kokį šaunų mašininį mokymąsi rašytumėte Python, žmonės, kurie jį parašys kažkuo greičiau, turės laiko nusipirkti viską prieš viską. bus skaičiuojami už jus, net jei jų algoritmai yra prastesni. Todėl net šios mašininio mokymosi užduotys (kai kurios iš jų) reikalauja didelio našumo (ir itin didelio našumo) ir atitinkamai kitų kalbų.

Vienintelis būdas suprasti, ko norite, yra viską išbandyti. Dabar tai pasakysiu kaip vieną iš vizijų, kaip galima viską išbandyti. Kaip tapti programuotoju ir laimingu? Taigi. Pradėkime nuo švaraus lapo. Štai mokykloje mokaisi matematikos, rusų kalbos ir kitų privalomų bei pasirenkamų dalykų, o tavo žinios programavimo srityje atsispindi lentoje (dėstytojas rodo į tuščią lentą). O tu nori tapti laimingu žmogumi, daryti tai, kas tau patinka, užsidirbti daug pinigų ir nieko savęs neišsižadėti ir būti laimingam.

Vienas iš būdų tai pasiekti. Žinoma, yra visokių įkvepiančių istorijų apie žmones, kurie apskritai nestojo į universitetą, arba metė studijas ir tapo milijardieriais, įmonių savininkais ir pan. Tačiau reikia pastebėti, kad dauguma žmonių, kurie galbūt netapo milijardieriais, bet ir gyvena gerai, vis tiek kažkuriuo metu baigė universitetą.

Kokia situacija su priėmimu į universitetą (šiuo metu mokaisi mokykloje)? Mokydami mokyklą turite suprasti, kad kitas žingsnis yra užsiregistruoti ir tuo pasirūpinti. Išlaikyk vieningą valstybinį egzaminą arba laimėk olimpiadą. Vieningo valstybinio egzamino metu galite naudoti Pascal, C++ (įskaitant gryną C), Python (toliau jų neminėsiu). Olimpiadoje yra tas pats Pascal, tas pats C++, tas pats Python (dabar kalbėsime apie jo problemas) ir dažniausiai yra Java. Priklausomai nuo olimpinių žaidynių nutinka ir kitų dalykų, bet ne tai esmė.

Kaip atrodo visos Rusijos informatikos olimpiados kalbų pasiskirstymo grafikas? Žmonės, kurie dalyvauja visos Rusijos, šauniausiose olimpiadose, ką jie rašo? Tai atrodo taip (čia tai reiškia Pascal, o čia apie 2000, o čia apie nulį, čia C++, o čia 2015).

2000 metais beveik niekas nerašė C++. Praėjo 15 metų, o Pascal beveik niekas nerašo, nepaisant to, kad Paskalis yra modernus. Tai kalba, kuri gali padaryti beveik viską taip pat. Tiesiog visi tapo tingūs, kad sužinotų apie tai, kiekvieną naują tendenciją, ir toliau viską rašo Borland Pascal, o tai, žinoma, nieko negali. C++ kalboje žmonės rašo tam tikrus algoritmus (STL), kad galėtų rūšiuoti – puiku, jie parašė sort() ir viskas. Paskalyje, įprastame, senajame - tai yra problema. Parašėme kažkokį rinkinuką (reikėjo) - puiku, rašėme C++, bet Pascal vėl buvo visiškas skausmas. Žinoma, galite tai padaryti su naujais Pascal, bet jie paprastai kainuoja pinigus. Galbūt jūs to nepastebėjote, bet tai tiesa.

Taip pat yra „Java“, bet „Java“ turi daug raidžių. Jis skirtas dideliems projektams, bet mažoms vienkartinėms programoms išeina labai blogai, nes yra daug papildomų raidžių. Bet kai kurie žmonės taip pat rašo, galite išmokti ant jo rašyti. Tačiau tai nėra vieningo valstybinio egzamino ir dauguma vis tiek turės laikyti vieningą valstybinį egzaminą.

Kas geriausiai tinka vieningam valstybiniam egzaminui? Vieningam valstybiniam egzaminui geriausia (jei nieko nežinai ir mokykloje nieko nemoko) išmokti Python. Kai kurias egzamino problemas jame galima puikiai išspręsti. Olimpiadoje apskritai pasirodo, kad naudojamas C++, nes Python yra labai lėtas, ne viskas ten išspręsta.

Taigi, jūs išstudijavote nedidelį kalbos pogrupį ir kai kuriuos algoritmus (galbūt) ir išsprendėte daugybę problemų, kad gautumėte olimpiados diplomą ir įstotumėte į universitetą įgyti aukštojo išsilavinimo.

Dabar kalbėsiu apie tai, kaip struktūrizuojame kursą HSE, kokia tvarka dėstomos kalbos, kaip jos studijuojamos taikomosios matematikos ir informatikos srityse Taikomųjų mokslų fakultete, ką darome kartu su „Yandex“. Pirmame semestre - Python (ne pilnai, maždaug taip, kaip reikėtų mokytis mokykloje) ir C++ (jau platesnis, daug platesnis nei įprastai mokoma mokyklose). Iš karto pasakysiu, kad neišsigąstumėte, jei staiga norėsite stoti, sakysite: „Ką, aš jau visa tai žinau, kodėl turėčiau eiti kur nors studijuoti? Verčiau eičiau kur nors kitur“. Tiems, kurie jau moka gerai programuoti, yra galimybė iš karto pereiti prie algoritmų studijų ir gana teorinio pasiruošimo. Dabar į juos nežiūrime, tai (rodo į lentą) skirta tiems, kurie yra vidutinio lygio arba visai neprogramuoja.

Pirmą semestrą mokomi Python pagrindai, kad žmonės išmoktų programuoti ir kad niekas per daug neįsižeistų. Python retai mokomas mokyklose, dauguma žmonių turi žinių apie Pascal arba C++. Dažniausiai net Paskalį, jei tai masinė mokykla. Na, o kad niekas neįsižeistų, visi išmoksta naują kalbą (tarsi vienodomis sąlygomis). Ir C++ tiesiog todėl, kad iš C++ galite eiti bet kur.

Tada ateina algoritmų kursas ir atskiras kurso projektas. Klasikiniai algoritmai su įgyvendinimu. Tai nereiškia, kad mes kažką paėmėme teoriškai ir apskaičiavome sudėtingumą. Paskaitoje paėmėme, skaičiavome sudėtingumą, seminare paėmėme ir įdiegėme algoritmą. Projektas yra tai, kai mokiniai kažką užbaigia. Pavyzdžiui, vienas iš projektų buvo: skaičiuok... Tarkim, Maskvoje turi daug butų ir supranti: „Oi, aš turiu daug papildomų daiktų, kai kuriuos išnuomosiu. Ir jie nustato tam tikrą kainą, ir dėl kokių nors priežasčių niekas nenori iš jūsų nuomotis buto - tikriausiai tai per brangu. Arba nustato kokią nors kainą, iškart atėmė iš tavęs, o tu galvoji: „O, tikriausiai pigiai pardaviau“ – ir tu susinervini. Tai yra, reikėjo paskaičiuoti, kiek kainuoja buto nuoma? Jūs įvedate duomenis – tai sukuria jums sąmatą. Tokia svetainė, susidedanti iš kelių dalykų: paimti sakinius, juos išanalizuoti, pritaikyti kažkokį (tikriausiai) paprastą mašininio mokymosi algoritmą ir sukurti gražų žiniatinklio veidą, kuriame gali ką nors pasirinkti, ką nors įvesti, keletą metrų, tam tikrą skaičių kambarių , pirčių skaičių, sūkurinių vonių skaičių jūsų bute ir apytiksliai įvertinkite kainą. Tai yra, kažkoks baigtas, nelabai sudėtingas dalykas. Čia tai reiškia (dėstytojas nurodo algoritmų kursą) tokį branduolį C++, su konsolės įvestimi-išvestimi. Na, čia (dėstytojas rodo į užrašą „projektas“) kažkas vadovaujant mentoriui, galbūt su duomenų bazėmis, galbūt su teksto analizavimu ir dar kažkas.
Tada yra trečias semestras – tai kursas „Kompiuterinės sistemos“. Suprasti yra gana daug asamblėjos kalbos (labai mažai), o tada kažkas panašaus į gryną C ir sąveiką su operacinėmis sistemomis, sistemos programavimą iš esmės. O seminaro projektas taip pat yra apie visokias tinklo sąveikas, gana žemo lygio: sukurkite kokią nors priemonę, pavyzdžiui, rsync (sinchronizavimas, gal žinote. Grynoje C, daugiau ar mažiau, parašykite rsync analogas, kurį turėsite tinkle sinchronizuoti aplankus su visomis failų prieigomis ir pan.).

Ir galiausiai ketvirtas. Net nežinau, kaip tai pavadinti, tai toks vinigretas technologijų, reikalingų realiam vystymuisi, pavyzdžiui, interneto kūrimui. Tai yra, tai yra praktinis duomenų bazių pritaikymas, vėl kažkas panašaus į tai, kas buvo padaryta projekte (dėstytojas nurodo 2 kurso projektą), bet giliau. Tai yra, tai daugiau ar mažiau konkretūs dalykai, praktinis programavimas. Kartu su tuo ateina kiekviena teorija, o čia jie taip pat užsiima mokslu.

O po dviejų kursų žmonės eina daryti tai, kas juos domina, nes šis dalykas gana plačiai apima programavimo pagrindus ir iki to laiko žmonės jau supranta, kad su kompiuterinėmis sistemomis dirbti nenori jokiomis aplinkybėmis (nenorėjo kaip, pavyzdžiui, sistemos programavimas), bet jie nori dirbti su kai kuriais teoriniais algoritmais, apskaičiuoti sudėtingumą, sugalvoti naujų dalykų, paskirstytų ar dar ką nors. Arba, priešingai, jie mano, kad jie čia neturi daug ( dėstytojas rodo į pirmojo kurso eilutę su Python ir C++) nuėjo, tada ( dėstytojas nurodo į trečią kurso eilutę, su sistemų programavimu) - Man tai nepatinka, skaičiuoju baitus ir nustatinėju visokius skaitymo ir rašymo apribojimus, kuriant srautus, gijas ir dar ką nors. Ir pagal tai žmonės pasirenka kryptį ir studijuoja. Tai yra iš principo, kad jums neatsirastų „ančiuko sindromas“ - jūs pirmasis pamatėte savo Paskalį ir dabar pasakėte „Paskalis yra galia“; ar labiau pažengęs - pamatei C++ ir pradėjai kalbėti apie visus, kad C++ stiprus, bet visa kita nelabai gerai.

Dabar reikia pažvelgti į tai (dėstytojas atkreipia dėmesį į kursų sąrašą lentoje) plačiau – tai vienas iš metodų, kuris buvo pasirinktas, ypač HSE (jis pasirodė neseniai, todėl gana modernus). Yra ir kitų būdų susipažinti. Kituose geruose universitetuose tvarka kiek kitokia ir dedami kiti akcentai. Tačiau jie taip pat stengiasi supažindinti žmones su viskuo, ką turi.

Kaip ieškoti programuotojo darbo

Tu esi ( dėstytojas rodo į kursų sąrašą) viska padare, studijavo universitete, dar kazka dar dvejus metus produktyviau ir reikia eiti dirbti. Kaip išsirinkti ką nors darbui? Pirma, jūs su viskuo susipažinote, kažkur gilinotės ir jau žinote, ką mylite. Natūralu, kad turite pasirinkti tai, kas jums patinka. Nes jei myli, įdėsi pastangų, turėsi motyvacijos ir apskritai viskas bus gerai. Nes tai ne tik pinigai, bet ir tai, kad jie būtų jums įdomūs ir malonūs. Na, jūs norite patekti į šaunią įmonę ir gauti darbą. Kokį žmogų aš asmeniškai norėčiau matyti? Tarkime, pas mane ateina šimtas studentų – samdyti du ar vieną. Kodėl jie ateina, aš visiškai nesuprantu, kas jie tokie, kokie jie, kaip jie yra? Geriausiu atveju man parodys universitete gautą diplomą, o aš pasakysiu: „Oho!“ Tai šaunus diplomas, bet ne toks šaunus! Ir, beje, galiu klysti. Galbūt žmogus turėjo daug laisvo laiko ir daug geriau išmoko.

Kas būtų puiku? Pirma, kai kurie atvirojo kodo projektai, kuriuos parašėte nuo pradžios iki pabaigos. Pageidautina, jei kuriu kokią nors infrastruktūrą, kad būtų galima greitai nuskaityti duomenis, ar dar ką nors, tada, žinoma, man būtų įdomu, kad man būtų parašytas kažkas atviro kodo. Jie sukūrė ne svetainę, o kažką ta tema. Kodėl man tai įdomu? Galiu pažiūrėti į tavo kodą, matau, kaip dažnai tu įsipareigojai, matau, kaip reagavai į vartotojų klaidas, jį naudojančių kūrėjų klaidas – viskas įrašyta, žiūriu į viską ir galvoju: „Oho, ši klaida atsirado Nebuvau ten jau dvejus metus, čia jūs nemandagiai atsiliepėte vartotojui, štai kas kita – aš to nepriimsiu. Tai yra jūsų asmeninis projektas.

Kitas, kas dar būtų puiku? Norėčiau pamatyti, kaip jums sekėsi komandinis darbas. Tai yra, jūs ateini pas mane į pokalbį ir sakai: „Vaikinai iš universiteto ir aš pateikėme gerą prašymą. Aš ten kūriau duomenų bazę, jie ten kūrė kažkokias mobiliąsias aplikacijas, taip pat ten dirbo vaikinas, mergina dizainerė, vaikinas techninio aptarnavimo srityje. Buvome penki ir sukūrėme šaunų projektą. Na, matau, kad tai tikrai jūsų projektas, sakau: „Kas tavo? Dar kartą pažvelgiu į kodą ir suprantu, kad žinai, kaip dirbti komandoje su žmonėmis.

Programuotojas nėra tas, kuris sėdi vienas (indie) garaže, kur nors išjungęs šviesą, su niekuo nekalba, augina barzdą ir rašo. Vis dar yra tam tikras bendravimas su žmonėmis. Pavyzdžiui, su viršininku, kuris kartais gali jus keikti (viršininkai, jie tokie, ne visada malonūs). Ir matau, kad tu moki dirbti su žmonėmis ir mane džiugina, jei turi kažkokią gerą komandą. Net jei tai nėra gerai, tai geriau nei jo neturėti.

Ko dar norėčiau asmeniškai? Jei įrodėte save dideliuose projektuose. Pavyzdžiui, jūs ką nors įtraukėte į Linux branduolį, jei užsiimate sistemų programavimu, ir ištaisėte tam tikrą klaidą. Tai yra, jie parodė, kad žinote, kaip skaityti kažkieno kodą ir žinote, kaip jį pakeisti. Žiūriu: „O, tikrai, jūs sugalvojote kažką sudėtingo ir ištaisėte keletą klaidų! Ir aš pradedu tuo labai džiaugtis. Nes aš... na, nežinau... mano programuotojas išėjo iš darbo, nes konkurentai jam pasiūlė didesnį atlyginimą, ir man skubiai reikia, kad kas nors užimtų jo vietą - pas jus. Matau, kad rašei tik nuo nulio, bet nemokate skaityti ir redaguoti kažkieno kodą, ir aš nusiminu.

Ir galiausiai, priklausomai nuo konkrečios pozicijos, yra įvairių kitų dalykų. Jei įsidarbinate analitiku, norėčiau, kad išspręstumėte Kaggle duomenų analizės problemas. Jei kreipiatės dėl kai kurių algoritminių dalykų, norėčiau, kad atliktumėte keletą sporto programavimo algoritmų. Ir galiausiai, jei pagalvojote apie profesiją, paskaitykite, kaip vyksta interviu, matėte, kad ten kai kurie žmonės reiškia didelį nepasitenkinimą: „Atėjau, paklausė, koks mano hobis. Sėdžiu kaip pelėda ir neatsakau, nes neturiu hobio“, – jie mano, kad tai daro personalo darbuotojai. Tiesą sakant, jie bando suprasti, koks esate draugiškas ir adekvatus. Jei esi nedraugiškas ir neadekvatus, tai kad ir koks genialus ir darboholikas bebūtum, kietas specialistas, turintis puikių žinių, komandai bus sunku su tavimi dirbti, o vienas neįgyvendinsi projekto. Be to, net ir ištraukus galima įsivaizduoti, kokia našta tenka įmonei. O jei rytoj ateisi ir pasakysi: „Padidink man atlyginimą 10 kartų, kitaip aš tave paliksiu“. Akivaizdu, kad įmonės nenori atsidurti tokioje situacijoje. Todėl ugdyti adekvatumą ir geranoriškumą savyje yra taip pat svarbu (mažiausiai), kaip ugdyti kai kuriuos profesinius įgūdžius.

Apibendrinant, ką galime pasakyti? Kurios kalbos yra geros, o kurios blogos? Ką turėtumėte pasirinkti tam tikroje kalbų grupėje, pavyzdžiui, tarp Ruby, Python ir PHP? Žinoma, teisingas atsakymas yra Python, bet iš tikrųjų skirtumas tarp jų yra leidžiamų klaidų skaičiuje, kitko - 5%, na, gal 10%. Tai yra, jei jau turite paruoštą projektą, parašytą PHP, tada niekas sveiko proto nesakys: „Perrašykime viską Python“. Jie sakys: „Pasamdykime daugiau PHP kūrėjų ir toliau rašykime PHP“. Puiku, tai geras pasirinkimas. Akivaizdu, kad jei staiga nuspręsite parašyti kokį nors projektą, dabar gali būti protinga pasirinkti Python. Nors tai taip pat priklauso. Galbūt jūs turite daug pigių PHP kūrėjų rinkoje, o Python yra brangūs, ir jūs manote: „Taip, technologija yra šaunesnė, bet aš sutaupysiu pinigų paruoštiems kūrėjams“. Ir viskas puiku, tu jau ateini ir dirbi ten.
Kaip pasirinkti tarp Java ir C++? Taip, nutinka maždaug tas pats. Manau, kad tuo metu, kai nuspręsite, kuria kalba pradėti naują didelį projektą, būsite įgiję žinių savo profesinėje srityje ir galėsite teisingai pasirinkti. Dabar to rinktis dar nereikia, todėl patariu daryti tai, kas patinka.

Pagrindas, kaip jau sakiau, pačius programavimo pagrindus (kas yra funkcija, kas yra if'ics, for'ics, masyvai, dar kažkas) galima išmokti daugiau ar mažiau bet kuria kalba. Pavyzdžiui, C++, nes yra daug panašumų į jį, o specifikos jame yra mažiausiai (šiuo lygiu), ir mažiausiai reikia rašyti papildomų raidžių. Na, tada, kai išmoksite sudėtingų architektūrinių dalykų, išmoksite ir jums nereikės per daug dėl to jaudintis. Tai yra, pagrindinis dalykas yra bandyti, ieškoti to, kas tau patinka, o kai supranti, kad jau 4 valanda ryto, o tu sėdi ir rašai savo malonumui, nes tau tai patinka - tikriausiai tuo momentu aišku, kad radai savo.

Šis straipsnis yra apie plėtinį ir jo svarbą kompiuterinėms sistemoms. Taigi, atrodytų, kas gali būti tokio ypatingo programos failo plėtinyje? Nepaisant to, tikimės, kad skaitytojai galės gauti sau svarbios ir įdomios informacijos. Gebėjimas suprasti plėtinius bus naudingas, kaip bus aptarta toliau.

Kokį plėtinį turi C plus plus?

Ši programavimo kalba turi savo failų žymėjimą. Cpp žymėjimas yra specialus plėtinys, naudojamas failams, kuriuose yra C++ kodas. Juose yra dar neparengtas naudoti (nesudarytas) kodas, kurį galima redaguoti ir atlikti pakeitimus be didelių išlaidų ir programos veikimo sutrikimų. Naudodami šį plėtinį galite sužinoti, kuriame faile yra tekstas C (šiuo metu labai populiari programavimo kalba).

Pratęsimas ir jo svarba programuojant

Kodėl jums netgi reikia failo pavadinimo plėtinio, kurį naudoja jūsų kompiuteris? Faktas yra tas, kad kompiuteris gali apdoroti daugybę skirtingų tipų failų tiek įdiegtoje operacinėje sistemoje, tiek papildomos programinės įrangos pagalba. Tokios programinės įrangos pavyzdys galėtų būti naršyklėse įdiegti papildiniai arba įvairių programavimo kalbų vertėjai, galintys apdoroti vykdomas programas. Tai atpažinti, kurį vertėją turi naudoti kompiuteris, kokį mašinos kodą naudoti failui paleisti, ir reikalingi plėtiniai. atpažįsta failo tipą, šią informaciją jam suteiks turima informacija. Taigi, cpp plėtinys yra failas, kuriame yra C++ dokumentas. Po atpažinimo vertėjas galės jį atidaryti, o vartotojas galės dirbti su dokumentu.

Kas vis dėlto yra failo vardo plėtinys?

Tačiau pakalbėkime apie failų vardų plėtinius informatikos požiūriu. Jo paskirtis jau nustatyta – reikia nustatyti failo formatą ar tipą. Plėtinys atskiriamas nuo failo pavadinimo tašku. Iki 1995 m. „Windows“ plėtinyje buvo ribojamas simbolių skaičius: negalėjo būti daugiau nei trys. Šiuolaikinėse sistemose tokių apribojimų nėra. Dar daugiau, šiuolaikinėse failų sistemose gali būti failų, turinčių kelių tipų plėtinius. Jie visi seka tašką. Tačiau tai netaikoma tokiems dalykams kaip cpp.

Sukčiai dažnai pasinaudoja šia kūrėjų dovana. Nusikaltėliai dažnai užmaskuoja savo kenkėjiškus failus, kuriuos siunčia į vartotojų kompiuterius kaip kitas programas ir paslepia pagrindinį failo plėtinį (virusams ir įvairiems Trojos arkliams jis skiriasi nuo įprastų programų). Gali net atsitikti taip, kad visi tikrieji failai yra paslėpti arba ištrinami, o į jų vietą dedami visai kiti. Ir pasirodo, kad cpp yra visai ne cpp, o kompiuterinis virusas. Gera apsauga nuo tokio tipo sukčių yra komanda rodyti visų tipų plėtinius. Šią funkciją galite įjungti „Valdymo skydelyje“; Tada galite būti ramūs dėl savo C plus plus failų ir būti tikri, kad vietoje jų nepaleisite kenksmingos programos. Nors čia visada reikia žiūrėti į vykdomųjų failų plėtinį.

Plėtinyje pateiktos informacijos tikslumas

Kartais plėtinys tiksliai nenurodo failo tipo ir neišsprendžia visų galimų problemų, kurios gali kilti naudojant įvairias programas. Taigi daugeliui pažįstamas .txt plėtinys nesuteikia kompiuteriui informacijos apie tai, kokia yra failo koduotė. Todėl dažnai atidarydami tekstinius failus galite pamatyti nesuprantamų simbolių lapus. Ypač liūdna matyti tokią dokumento būseną, jei jis buvo naudojamas rašant programos kodą. Tokiais atvejais failų kodavimas turėtų būti pakeistas, kol kompiuteris galės pateikti tinkamą tekstą. Galite pabandyti apskaičiuoti reikalingą kodavimą pagal neteisingus simbolius, tačiau turite žinoti, kuri koduotė nuveda į ką, atsižvelgiant į tai. „Word“ failams taip pat naudojamas tas pats plėtinys, dėl kurio nėra aišku, su kokiu failu asmuo susiduria: įprasto tipo ar suformatuotu. Plėtinys taip pat nenurodo, kuri versija yra naudojama, o tai naudinga bandant atidaryti ankstesnių dokumentų versijas vėlesnėse apdorojimo aplinkose, kaip yra Microsoft Office atveju.

Kiti formato nustatymo būdai ir parinktys

Yra ir kitų failų sistemos parinkčių. Tačiau jie nėra įprasti ir greičiausiai niekada apie juos negirdėjote:

  • Informacijos apie failo formatą išsaugojimas pačioje operacinėje sistemoje. Nemalonumai kyla, kai norima persijungti į kitą kompiuterį ir dirbti su tuo pačiu failu.
  • Vadinamojo „stebuklingo skaičiaus“ metodo taikymas. Tai yra tada, kai pačiame faile užšifruojama tam tikra baitų seka, kuri nurodo visą reikalingą informaciją, kad failas veiktų. Jis turi tam tikrą potencialą, tačiau tam reikalingas programinės įrangos gamintojų bendradarbiavimas.
  • Kai kurioms Unix sistemoms buvo sukurta funkcija, kuri failo pradžioje palieka specialius ženklus, skirtus vertėjui.
mob_info