Hányféle programozási nyelv létezik? [zárt]

Zárt . Ennek a kérdésnek jobban kell összpontosulnia . Jelenleg nem fogadja el a válaszokat.

Megjegyzések

  • Nem lenne ' jobb, ha azt mondaná, hogy " írja be: " ahány helyett?
  • Nos, megtanultam, hogy valami hasonló a Prologhoz és a C-hez alapvetően különbözik, ezért azt gondoltam, hogy mindegyik megfelel másfajta programozási nyelv, és abban reménykedtem, hogy megértsem hány fajtát.
  • 2: az a típus, amelyik azt csinálja, amit akar, és az a típus, amely nem id = “634d2a0f74″>

t

  • Különböző típusú programozási nyelvek megismerése abszolút konstruktív ! Azt állíthatja, hogy ezt le kell zárni, mivel ennek másolata , de úgy gondolom, hogy ' elég különálló kérdés maradjon külön.
  • @Sova, én ' javasoljuk, hogy először válasszon új nyelvet, hogy kipróbálhasson valamit, ami nem ' t használja a c-alapú szintaxist. Ettől jobban összpontosít majd a fejére, hogyan működik, és miben különbözik ' attól, amelyet legjobban ismer.
  • Válasz

    Attól függ, hogyan szeretné osztályozni a nyelveket. Alapvetően a nyelveket két típusra lehet bontani: imperatív nyelvek, amelyeken a számítógépet hogyan egy feladat elvégzéséhez, és deklaratív nyelvek, amelyekben megmondja a számítógépnek, hogy mit kell tennie. A deklaratív nyelvek tovább bonthatók funkcionális nyelvekre, amelyekben a program függvények összeállításával épül fel, és logic programozási nyelvek, amelyekben a program logikai kapcsolatok halmazán épül fel. Az elengedhetetlen nyelvek inkább a probléma megoldásának lépéseinek felsorolásaként szolgálnak, mintegy receptként. A kötelező nyelvek közé tartozik a C, C ++ és a Java; a funkcionális nyelvek közé tartozik a Haskell; a logikai programozási nyelvek tartalmazzák a Prologot.

    Az imperatív nyelveket néha két alcsoportra bontják: procedurális nyelvek, mint a C és objektumorientált nyelvek . Az objektumorientált nyelvek azonban kissé ortogonálisak a csoportosításhoz, mivel vannak objektumorientált funkcionális nyelvek (az OCaml és a Scala példák).

    A nyelveket csoportosíthatja a következő beírásával is: statikus és dinamikus . A statikusan beírt nyelvek azok, amelyekben a gép futtatása előtt (általában fordítási fázisban) ellenőrzik (és általában kötelezővé teszik) a gépelést; a dinamikusan begépelt nyelvek elhalasztják a futásidejű ellenőrzéseket. A C, C ++ és a Java statikusan tipizált nyelvek; A Python, a Ruby, a JavaScript és az Objective-C dinamikusan beírt nyelvek. Vannak untyped nyelvek is, amelyek tartalmazzák a Forth programozási nyelvet.

    A nyelveket csoportosíthatja gépelésük tudományág : gyenge gépelés, amely támogatja az implicit típusú konverziókat, és erős gépelés, amely tiltja az implicit típusú konverziókat. A kettő közötti vonalak kissé homályosak: egyes meghatározások szerint a C gyengén tipizált nyelv, míg mások erősen tipizáltnak tartják. A fegyelem beírása egyébként nem igazán hasznos módszer a nyelvek csoportosítására.

    Megjegyzések

    • Valami hasonlót fog jelenteni, de + 1-et adjon megjegyzéseket helyettük. Minden kategóriának vagy kombinációnak számos spin-offja van, amelyeket egyes elemekre összpontosítva hoztak létre. Az OOP például megszüli: prototípus-alapú OOP, aspektus-orientált programozás, komponens-alapú programozás és így tovább. Funkcionális paradigmák is rendelkeznek spin-offokkal, például olyan nyelvekkel, ahol aszinkron folyamat vagy szál az alapegység, és párhuzamos folyamatok összeállításával programozhat.
    • Hogyan illeszkednének ebbe a szkriptnyelvek, például a VBScript? Ez lehet bit eljárási és egy kicsit OO, mivel különféle típusokat lehet létrehozni, tehát ettől lenne hibrid?
    • Pontosan ezt kerestem. Nagyon köszönöm.
    • @ A JB King OOP nyelvek általában procedurálisak, legalábbis a módszer testein belül.Ezenkívül ' általános tévhit, hogy az OOP " objektumokat " jelent. Sok nyelv rendelkezik adattípusokkal és objektumokkal. ' sok vita folyik arról, hogy mi is az OOP pontos meghatározása, de általában az öröklődést és / vagy a kapszulázást (magánállam) foglalja magában fő témaként. Valamelyik forma nélküli nyelvet nehéz OOP nyelvként besorolni.
    • @sova Csak két olyan nyelvre tudok gondolni, amelyek ilyesfajta módon működnek. Az Erlang nagymértékben a párhuzamos feldolgozáson alapul, de ha többet szeretne, mint amiről pontosan beszéltem, akkor a Polyphonic C # -ra kell figyelnie. ' egy kutatási nyelv (most C-omegává hajtva) a Pi-Calculus alapján (mint például az FP alapja a lambda calc-on) A Pi-calc a folyamat egysége körül , és kijelenti a folyamatokat, valamint a szinkron és az aszich hívások kombinációját. Vizsgálja meg az FP nyilait is, különösen a Haskell-t. A nyilak nagyon hasonlóak.

    Válasz

    • Összeállítás
    • Eljárási
      • Alapvető
      • C
    • Objektumorientált
      • C #
      • Java
    • Deklaratív
      • Prolog
      • SQL
    • Funkcionális
      • Lisp
      • Haskell

    Ezek a főbbek, de “sok más paradigma van odakint, és rengeteg átfedés van közöttük.

    Megjegyzések

    • Mit szólnál a deklaratívhoz (pl. Prolog, SQL)?
    • @Bruce, most kaptam őket.
    • Igen, ez volt az általános gondolat, amit megtanultam valahol az út mentén.
    • Nem kellett volna t az összeállítás tekinthető eljárásszerűnek?
    • Mi a helyzet az összefűző (verem alapú) programozási nyelvekkel, például a Forth és a Factor? Lehet, hogy a Funkcionális programozás egyik típusának tekinthető, de valószínűleg ' eléggé megkülönböztethető ahhoz, hogy említést érdemeljen. hu.wikipedia.org/wiki/Concatenative_programming_language

    Válasz

    A programozási nyelvek (paradigmák) típusait itt nézheti meg:
    http://en.wikipedia.org/wiki/Programming_paradigm

    A programozási nyelvek egyéb jellemzőit (pl. Type Systems) itt találhatja: http://en.wikipedia.org/wiki/Programming_language

    Megjegyzések

    • ah! " paradigma " milyen jó szó! köszönöm
    • @sova Ezt elfogadnám a legjobb válasznak, mert egyszerűen túl sok paradigma van ahhoz, hogy felsoroljam őket egy P.SE válaszban, annál kevésbé, hogy leírjam az egyes árnyalatokat.

    Válasz

    Kattintson a képre a PDF megtekintéséhez. Programozási paradigmák poszter

    Meg kell néznie Peter Van Roy programozási paradigmáját a bábuknak: mit kell tudnia minden programozónak . Ez áttekintést nyújt arról, hogyan zajlik kint.

    Ha tovább szeretne lépni, olvassa el a fogalmakat, technikákat és modelleket. Számítógépes programozás . Nem egy nyelvet tanul meg ily módon, hanem olyan paradigmákat tanul meg, amelyek a különféle nyelvek mögött rejlenek. Tehát egy új nyelv megtanulása könnyebb lesz az Ön számára.

    Válasz

    • Eljárási: Összeállítás, Java, C #, F #, Lisp, Fortran.

    • Készletalapú: SQL.

    • Minta alapú: Perl, Regex, Snobol.

    • Fa alapú: XSLT.

    • Tömb alapú: APL.

    Megjegyzések

    • +1 más típusú osztályozás használatáért, valamint annak felismeréséért, hogy ' eljárási ' valójában tartalmazza a többi ember ' s osztályozásának többségét. (természetesen ez csak azt jelenti, hogy a szónak nagyon kevés jelentése van, és a hús ilyen felosztásban van)

    Válasz

    Ennek megválaszolására különféle módok vannak, de kifejezések szerint a következő kategóriákba sorolhatók:

    Gépnyelv: A gépnyelv alacsony szintű programozási nyelv. A számítógépek könnyen megértik, de az emberek nehezen olvashatók. Ezért használják az emberek a magasabb szintű programozási nyelveket. A magas szintű nyelveken írt programokat szintén fordítják és / vagy tolmácsolják gépi nyelvre, hogy a számítógépek végrehajtsák őket.

    Összeállítási nyelv: Az összeállítási nyelv a gépi nyelv reprezentációja. Más szavakkal, az egyes szerelési nyelvek utasításai gépi nyelvre utalnak. Bár az összeállítási nyelvű állítások olvashatók, az állítások még mindig alacsony szintűek. Az összeállítási nyelv hátránya, hogy nem hordozható, mert minden platformhoz tartozik egy adott Assembly nyelv.

    Magas szintű nyelv: A legtöbb programozó manapság magas szintű nyelveket használ. Az olyan nyelvek, mint a C, a C ++ és a Java, mind magas szintű nyelvek. A magas szintű nyelvek előnyei, hogy nagyon jól olvashatók és hordozhatóak. A magas szintű nyelvek hátránya, hogy kevésbé hatékonyak, mint a Assembly Languages. Mivel egyetlen állítás egy magas szintű nyelven sok gépi nyelvi állítássá alakul.

    A magas szintű nyelvek tovább osztályozhatók:

    1. Funkcionális nyelvek: A funkcionális nyelvben egy program függvénydefiníciókra oszlik. A funkcionális nyelvek egyfajta deklaratív nyelvek. Leginkább a tipizált, állandósított lambda-számításon alapulnak. Néhány híres Function nyelv a Scala, az F #, a Clojure és a Lisp.

    2. Eljárási nyelvek: Az eljárási nyelvekben a program a az eredmények előállításához követendő lépések sorozata. A COBOL, a FORTRAN és a C néhány eljárási nyelv.

    3. Objektumorientált programozási nyelvek: OOP nyelveken egy program felosztva objektumra, amely adatokat tartalmaz, valamint az adatokon működő módszereket. A Java, a C # és a C ++ OOP nyelv.

    4. Logikai programozási nyelvek: A logikai nyelvek olyan programok létrehozására szolgálnak, amelyek lehetővé teszi a számítógép számára, hogy logikusan érveljen. pl .: Logikai nyelv

    Alapos tanulmányozáshoz nézze meg:

    Válasz

    Hajlamos vagyok a jellemzőkben gondolkodni:

    Szintaxis:

    C-alapú vagy mi van. A Java C-alapú szintaxissal rendelkezik. Nagyon ajánlom, hogy próbáljon ki valami olyasmit, mint a Python vagy a Ruby, hogy kijusson a fejéből a szintaxisból, és inkább az adott nyelv működésének alapjaiban gondolkodjon. Az a véleményem, hogy egyetlen szintaxisnak sem kell nagyobbnak lennie, mint a C-alapú, és nincs gond a blokkok felépítésére a térköz körül.

    Összeállítva vs. Build-Process vs. Értelmezett / Konzol:

    Nagyon kevéssé ismerem a fordítási és a futási környezet problémáit, de értem ott van egy csomó aggodalom, amire ritkán gondolok.

    Hasonlóképpen rengeteg olyan értelmezett nyelv van, amelyeknek még mindig van valami fordítási módja a virtuális gép belsejében történő futtatáshoz, mint a Java. Még mindig újjá kell építenie, hogy lássa a dolgok változását.

    Ezután ott vannak a JavaScript és a Python, amelyeket menet közben is végrehajthatunk, parancsra parancsra, élő környezetben lévő konzolon. Mindhárom elvezethet a kódírás nagyon különböző módjai.

    Dinamikus vagy szigorú gépelés:

    Hajlamos vagyok a kettőt design-kompromisszumnak tekinteni. Ha sokkal alacsonyabb szinten jársz, és a teljesítmény kritikus, akkor a statikus gépelésnek sok értelme van. Sosem értettem ezt az elképzelést, hogy az egyik “valahogy” biztonságosabb “, mint más, de én egy nagyon plasztikus / dinamikus nyelven került elő, ahol csak megtudhatja, hogyan működik a gépelési rendszer, és mire számíthat alapvetően. A típusú shenanigans ritkán foglalkoztat számomra JS-ben. Bizonyos szempontból a rugalmasság erőteljesebbé teheti a dolgokat, bár igaz, hogy egy Jr. szintű dev-hoz egy kis arculatúbb, ha nem tudsz a nyelv egyes lyukairól.

    Blokkszintű hatókör vs. Funkció hatóköre vs.?:

    A blokkszint a leggyakoribb (bármi a (z) {} között a legtöbb c-alapú szintaxis nyelvben). A JavaScript hatóköre a függvények köré épül (amelyeket objektumok építésére is ilyen hatékony objektumokra építenek). Nagyon sok eltérés van abban is, hogy milyen hozzáféréssel rendelkezik a belső hatókörből külső hatókörbe. Nem ismerek más hatókör-sémákat, de biztos vagyok benne, hogy léteznek.

    Klasszikus OOP vs. Prototypal OOP vs Majdnem OOP (struktúrák C-ben ?) vs Non-OOP:

    Még az osztályalapú OOP-ban is nagy a mozgástér. Lehet-e többszörös öröklést (ew, jóval több, ew), interfészek definiálását stb.

    A JavaScript-ben van egyfajta stunt hibrid prototípusos OOP, ahol az objektumok lényegesen egyszerűbbek, nagymértékben mutálhatók, de továbbra is képesek vagyunk elkülöníteni az interfészt a belső gondoktól, ami az IMO a kapszulázás fontos szempontja .

    Az OOP-val az a lényeg, hogy valóban sok olyan dolog húzható le, amely lényegében OOP-orientált anélkül, hogy technikailag OOP lenne. Természetesen vannak puristák, de a nap végén a Tervezési minták bizonyos absztrakciók megvalósításáról szólnak, amelyek bizonyos helyzetekben jól működnek. Ne legyen túl gyors, ha feltételezzük, hogy egy OOP-alapú nyelv ötleteket nem használnak valamiben, amely inkább eljárási szempontból irányul. És nem a JavaScript-ről beszélek. Egyáltalán nem korlátozza a prototípuson alapuló OOP paradigma ostoba változata.

    Első osztályú függvények :

    Az, hogy ezeket nem egy nyelven rendelkezem, nehéz feladnom. Átadhatja a függvényeket úgy, mintha azok más kontextusokban való felhasználásra szolgálnának. Ez különösen megkönnyíti az eseménykezelési sémák kivitelezését, de nagyon egyszerűvé teszi a nyelv adaptálását úgy is, hogy az tetszés szerint működjön. Sokkal inkább gyanítom, hogy a JavaScript sikeres annak ellenére, hogy két hét alatt megtervezték, és hogy Java-hozzávetőleges szintaxist kaptak hozzá marketing sémaként.

    Bezárások:

    Nem vagyok biztos benne, hol folyik a vita a Java-val kapcsolatban, de tudom, hogy sok Java-fejlesztő egy-két évvel ezelőtt ragaszkodott ehhez a funkcióhoz. A bezárás nélküli nyelvben, amikor egy funkció bezárul, bármi, ami valamilyen módon képes hivatkozni a függvény belsejében található dolgokra, nem férhet hozzá, mert szemetet gyűjtöttek. A bezárásnál a végrehajtási kontextus olyan módon van kötve, hogy ha msgstr “” “képesek hivatkozni a zárt függvényen belüli dolgokra egy másik hatókörből, mint például egy visszaküldött objektumban vagy függvényben, alapvetően azokat a változókat kapjuk meg, amelyek a függvény bezárásakor voltak. Olyan, mintha elakasztaná a lábát a szemétgyűjtés ajtajában, bár gyanítom, hogy inkább hasonlít azoknak a másolatoknak a másolására, amelyek a hivatkozó entitás helyi változataivá lettek. “>

    Merev / Szigorú / Biztonságos, szemben a kívánt kötelet adva mindenkinek:

    A JS-fejlesztők és a Java-fejlesztők általában nem értik egymást egyáltalán más, és azt gondolom, hogy sok köze van ahhoz, hogy a két nyelv ennek a sajátos tervezési spektrumnak szinte ellentétes oldalára esik. Nem akarom, hogy megvédj engem magamtól vagy a csapatom többi fejlesztőjétől. Sokkal többet akarok csinálni sokkal kevesebb kóddal, és mindezt nagyon különböző módon (de az adott tartományra vonatkozóan következetesen) megtenni a helyzetről. Mindkettő kompromisszumot köt, és sok nyelv általában inkább a közepén esik.

    Megjegyzések

    • Köszönöm. Ez ' nagyon jó, hogy elmagyarázás nélkül végigcsinálják az elutasító szavazást.

    Válasz

    Úgy gondolom, hogy mindezek rövidítése annyi, hogy elegendően megtanuljuk a Lisp-t néhány félig hasznos dolog elvégzéséhez. Ezeknek a paradigmáknak a többsége a Lisp használatának módjaként indult, tehát “egyszerű módon” kipróbálni a dolgokat.

    Számos “fajta” nyelv létezik a környéken, de mindig újak jelenhetnek meg. Alapvetően a nyelv célja az ötletek, koncepciók vagy követelmények lehető legközvetlenebb kódolásának lehetővé tétele. Ebből a célból előfordulhatnak olyan helyzetek, amikor a létező paradigmák igényt tartanak, és szükség lehet egy újabbra.

    A nézet egyik módja a felszíni szerkezet. Mennyire teszi lehetővé, hogy tömören kódolja az ötleteket, hogy ha meggondolja magát, hogy mit szeretne, akkor a kód megfelelő módosítása is egyszerű, kevés eséllyel mutat be hibákat.

    Egy másik módja annak, hogy nézd meg az irányítási struktúra szempontjából. Amikor a nyelvet végrehajtják (ha van), milyen sorrendben történnek a dolgok, hogy megvalósítsák, amit akarnak? Példák: egyszerű, egyenes végrehajtás, rekurzió, visszalépés, párhuzamosság. Az egyik (szerény köhögés) differenciális végrehajtás volt.

    További hasznos szempont, hogy bármikor megterveznek egy adatstruktúrát, egy nyelvet született. Az adatokat azok az alkalmazásprogramok “hajtják végre”, amelyek átfésülik és megcsinálják a dolgokat, ahogyan a program is csak egy csomó adat (például bájtkódok), amelyeket a tolmács dolgokra használ.

    Megjegyzések

    • klassz. Megtanulom a LISP-t és megvilágosodom. Izgalmas: D
    • Ha azonban azt állítja, hogy az adatszerkezet használata új köztes nyelvet hoz létre, akkor azt is állíthatja, hogy minden algoritmusban új nyelv születik (az összes műveletet szükségszerűen egy adaton végzik szerkezet), és kicsinyítéssel egy új nyelv születik a kód minden sorában. Azt hiszem, te mégis mást értesz, de én ' még nem vagyok benne biztos, hogy értem?
    • @sova: Számomra az információelmélet nagy leleplezés volt (Shannon és Kolmogorov egyaránt). ' arról szól, hogyan kódolják és továbbítják a jelentéseket a csatornákon, a sávszélesség, a hibadetektálás, a minimális kódolás, a véletlenszerűség stb. Fogalmakkal. Tehát az adatok kódolják az információkat, az algoritmusok pedig csatornák . A programok információt kódolnak, a programozás pedig egy csatorna. Szóval, milyen információkat kódolnak? honnan jön és mikor? hova megy? mik a hibaforrások (zaj)? hogyan korrigálják őket? Hasznos perspektívát találtam.
    • @sova: (folytatás) Nem kell az összes elmaradó matematikát elsajátítania '. Számomra az volt a fontos, hogy milyen keretet adott a dolgok gondolkodására.

    Válasz

    Meg kell hozzáteszi, hogy vannak programozási nyelvek bizonyos alkalmazásokhoz. Eszembe jut az APT (Automatic Programmed Tool), amely a szerszámgépek gyártása során használatos.

    Megjegyzések

    • Emlékszem arra. Lehet, hogy még használtam is. Fiú, ez a legkorszerűbb volt. Nem kellett ' kézi vezérléssel kezelni a marógépet, csak nyomja meg a start gombot. És ha lenne egy hiba, akkor minden pokol elszabadulna.
    • Én ' olyan programokon dolgoztam, amelyek gcode-t generálnak a marógépekhez. A szó szoros értelmében tartottam és láttam a programozási hibák eredményeit, gyakran az enyémet.
    • 20 évet töltöttem utómunkálatok telepítésével a rendszerek gobjaira.

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük