Kolik typů programovacích jazyků existuje? [uzavřeno]

Zavřeno . Tato otázka musí být více zaměřena . Momentálně nepřijímá odpovědi.

Komentáře

  • Nebylo by ' lepší říci " Což zadejte .. " místo toho, kolik?
  • Zjistil jsem, že něco jako Prolog a C se zásadně liší, takže jsem si myslel, že každý z nich odpovídá jiný druh programovacího jazyka a já jsem doufal, že pochopím kolik druhů.
  • 2: typ, který dělá to, co chcete, a typ, který ne ' t
  • Učení o různých typech programovacích jazyků absolutně je konstruktivní ! Dalo by se argumentovat, že by to mělo být uzavřeno jako duplikát tohoto , ale myslím si, že ' jsou dostatečně odlišné otázky na zůstaňte odděleni.
  • @Sova, ' doporučuji provést první výběr nových jazyků a vyzkoušet něco, co ' t použít syntaxi založenou na c. Tím se vaše hlava více zaměří na to, jak to funguje, a jak se ' liší od toho, který znáte nejlépe.

Odpověď

Záleží na tom, jak chcete jazyky klasifikovat. Jazyky lze v zásadě rozdělit na dva typy: imperativní jazyky, ve kterých počítači dáte pokyny jak provést úkol a deklarativní jazyky, ve kterých řeknete počítači co dělat. Deklarativní jazyky lze dále rozdělit na funkční jazyky, ve kterých je program vytvořen složením funkcí, a logické programovací jazyky, ve kterých je program vytvořen pomocí sady logických spojení. Imperativní jazyky se čtou spíše jako seznam kroků k vyřešení problému, něco jako recept. Mezi imperativní jazyky patří C, C ++ a Java; funkční jazyky zahrnují Haskell; logické programovací jazyky zahrnují Prolog.

Imperativní jazyky jsou někdy rozděleny do dvou podskupin: procedurální jazyky jako C a objektově orientované jazyky . Objektově orientované jazyky jsou trochu seskupené, protože existují objektově orientované funkční jazyky (příklady jsou OCaml a Scala).

Jazyky můžete také seskupit zadáním: statické a dynamické . Staticky psané jazyky jsou ty, ve kterých je psaní kontrolováno (a obvykle vynuceno) před spuštěním programu (obvykle během fáze kompilace); dynamicky psané jazyky odkládají kontrolu typu za běhu. C, C ++ a Java jsou staticky psané jazyky; Python, Ruby, JavaScript a Objective-C jsou dynamicky psané jazyky. Existují také beztypové jazyky, které zahrnují programovací jazyk Forth.

Jazyky můžete také seskupit podle jejich psaní disciplína : slabé psaní, které podporuje převody implicitních typů, a silné psaní, které zakazuje implicitní převody typů. Hranice mezi nimi jsou trochu rozmazané: podle některých definic je C jazyk slabého typu, zatímco jiní jej považují za silně napsaný. Disciplína psaní není opravdu užitečný způsob, jak seskupit jazyky.

Komentáře

  • Chystá se představovat něco podobného, ale dá +1 a místo toho přidávejte komentáře. Každá kategorie nebo kombinace má také řadu vedlejších efektů vytvořených zaměřením na konkrétní prvky. OOP například plodí: OOP založený na prototypech, programování orientované na aspekty, programování založené na komponentách atd. Funkční paradigmata také mít vedlejší produkty, jako jsou jazyky, kde je asynchronní proces nebo vlákno základní jednotkou, a programujete tak, že skládáte paralelní procesy dohromady.
  • Jak by do toho zapadaly skriptovací jazyky, např. VBScript? Může to být trochu procedurální a trochu OO, protože lze vytvářet různé typy, takže by se z toho stal hybrid?
  • To je přesně to, co jsem hledal. Mockrát vám děkuji.
  • @ Jazyky JB King OOP jsou obvykle procedurální, přinejmenším v tělech metod.Rovněž je ' běžná mylná představa, že OOP znamená " objekty ". Mnoho jazyků má datové typy a objekty. ' se hodně debatuje o tom, co je přesná definice OOP, ale jako hlavní témata obvykle zahrnuje dědičnost a / nebo zapouzdření (soukromý stát). Jazyk, který by nebyl v nějaké formě, by bylo obtížné klasifikovat jako jazyk OOP.
  • @sova Napadají mě jen dva jazyky, které tak nějak fungují. Erlang je silně založen na paralelním zpracování, ale pokud chcete přesněji to, o čem jsem přesně mluvil, měli byste se podívat do Polyphonic C #. Je to ' sa výzkumný jazyk (nyní složený do C-omega) založený na Pi-kalkulu (například jak je FP založen na lambda calc) Pi-calc je založen na jednotce procesu a deklarujete do nich procesy a kombinaci synchronních a asychových volání. Podívejte se také na Arrows v FP, zejména Haskell. Šipky jsou podobné.

Odpověď

  • Sestava
  • Procedurální
    • Základní
    • C
  • Objektově orientovaný
    • C #
    • Java
  • Deklarativní
    • Prolog
    • SQL
  • Funkční
    • Lisp
    • Haskell

Toto jsou hlavní, ale existuje spousta dalších paradigmat a je mezi nimi spousta překrývání.

Komentáře

  • Co třeba deklarativní (např. Prolog, SQL)?
  • @Bruce, teď je mám.
  • Ano, to byl obecný nápad, který jsem se naučil někde po cestě.
  • Neměl by t sestavení je považováno za procedurální?
  • Co třeba konkatenační (na základě zásobníku) programovací jazyky, jako Forth a Factor? Mohli byste to považovat za typ funkčního programování, ale ' je pravděpodobně natolik odlišný, že si zaslouží zmínku. en.wikipedia.org/wiki/Concatenative_programming_language

odpověď

Typy programovacích jazyků (Paradigms) najdete zde:
http://en.wikipedia.org/wiki/Programming_paradigm

Další charakteristiky programovacích jazyků (např. Type Systems) naleznete zde: http://en.wikipedia.org/wiki/Programming_language

Komentáře

  • ach! " paradigma " jaké dobré slovo! děkuji
  • @sova Přijal bych to jako nejlepší odpověď, protože paradoxů je prostě příliš mnoho na to, abychom je mohli vypsat v odpovědi P.SE, natož na to, abych popsal nuance každého z nich.

Odpověď

Kliknutím na obrázek zobrazíte PDF. Programovací paradigmata

Měli byste se podívat na Programovací paradigma pro figuríny: Co by měl každý programátor vědět od Petera Van Roye. Získáte tak přehled o tom, jak se to děje venku.

Pokud chcete jít dále, můžete si přečíst koncepty, techniky a modely Počítačové programování . Tímto způsobem se nenaučíte banch jazyků, ale naučíte se paradigmata, která leží za různými druhy jazyků. Naučit se nový jazyk vám tedy bude jednodušší.

Odpovědět

  • Procedurální: shromáždění, Java, C #, F #, Lisp, Fortran.

  • Sada založená na: SQL.

  • Na základě vzoru: Perl, Regex, Snobol.

  • Na základě stromu: XSLT.

  • Na základě polí: APL.

Komentáře

  • +1 pro použití jiného typu klasifikace a také pro rozpoznání ' procedurálního ' ve skutečnosti obsahuje většinu ostatních ' s klasifikací. (samozřejmě to znamená pouze to, že slovo má velmi malý význam a maso je v takovém členění)

Odpověď

Existuje několik způsobů, jak na to odpovědět, ale lze je kategorizovat jako:

Strojový jazyk: Strojový jazyk je programovací jazyk na nízké úrovni. Počítačům je snadno srozumitelný, ale pro lidi těžko čitelný. Proto lidé používají programovací jazyky vyšší úrovně. Programy psané v jazycích vysoké úrovně jsou také kompilovány a / nebo interpretovány do strojového jazyka, aby je počítače mohly provádět.

Jazyk shromáždění: Jazyk shromáždění je reprezentací jazyka stroje. Jinými slovy, každá instrukce montážního jazyka se překládá do instrukce strojového jazyka. Přestože jsou příkazy v jazyce assembleru čitelné, jsou stále na nízké úrovni. Nevýhodou montážního jazyka je, že není přenosný, protože každá platforma je dodávána s konkrétním montážním jazykem.

Jazyk na vysoké úrovni: Většina programátorů dnes používá jazyky na vysoké úrovni. Jazyky jako C, C ++ a Java jsou všechny jazyky na vysoké úrovni. Výhodou jazyků vysoké úrovně je, že jsou velmi čitelné a přenosné. Nevýhodou jazyků na vysoké úrovni je, že jsou méně výkonné než montážní jazyky. Protože jeden příkaz ve vyšším jazyce je přeložen do mnoha příkazů ve strojovém jazyce.

Jazyky na vysoké úrovni lze dále klasifikovat jako:

  1. Funkční jazyky: Ve funkčním jazyce je program rozdělen na definice funkcí. Funkční jazyky jsou jakýmsi deklarativním jazykem. Většinou jsou založeny na zadaném lambda-kalkulu s konstantami. Mezi slavné funkční jazyky patří Scala, F #, Clojure a Lisp.

  2. Procedurální jazyky: V procedurálních jazycích je program napsán v sekvence kroků, které by měly být dodrženy k dosažení výsledku. COBOL, FORTRAN a C jsou některé procedurální jazyky.

  3. Objektově orientované programovací jazyky: V jazycích OOP je program rozdělené na Object, které obsahují data, stejně jako metody, které s daty pracují. Java, C # a C ++ jsou jazyky OOP.

  4. Logické programovací jazyky: Logické jazyky se používají k vytváření programů, které umožňuje počítači logicky uvažovat. např.: Logický jazyk

Hloubkové studium:

Odpověď

Mám sklon uvažovat o funkcích:

Syntaxe:

C-Based nebo what-have-you. Java má syntaxi založenou na C. Důrazně doporučuji vyzkoušet něco jako Python nebo Ruby, abyste dostali hlavu ze syntaxe, a přemýšlet více o základech fungování daného jazyka. Jsem toho názoru, že žádná syntaxe nemusí být objemnější než na bázi C a nemám problém se stavěním bloků kolem prázdného prostoru.

Zkompilovaný vs. interpretováno w. Build-Process vs. Interpreted / Console:

Mám velmi málo zkušeností s prostředím kompilace času a běhu, ale chápu to tam je celá taška obav, o kterých zřídka přemýšlím.

Podobně existuje spousta interpretovaných jazyků, které stále mají něco jako proces kompilace pro běh uvnitř virtuálního stroje jako Java. Stále musíte znovu sestavit, abyste viděli změny věcí.

A pak je tu JavaScript a Python, které můžete spouštět za chodu, příkaz po příkazu v konzole v živém prostředí. Všechny tři mohou vést k velmi odlišné způsoby psaní kódu.

Dynamické vs. přísné psaní:

Mám tendenci vidět dva jako designové kompromisy. Když jste na mnohem nižší úrovni a výkon je kritický, statické psaní má velký smysl. Nikdy jsem nepochopil tuto představu, že jeden je „bezpečnější“ než jiný, ale já přišel ve velmi plastickém / dynamickém jazyce, kde se jen dozvíte, jak funguje systém psaní a co můžete v zásadě očekávat. Typ shenanigans jsou pro mě v JS zřídka problémem. V některých ohledech může flexibilita učinit věci robustnějšími, i když je jisté, že je to více tajemné pro vývojáře na vyšší úrovni Jr., pokud nevíte o některých pot-jamkách v jazyce.

Rozsah na úrovni bloku vs. Rozsah funkce vs.?:

Nejběžnější je úroveň bloku (cokoli mezi {} ve většině syntaxních jazyků založených na jazyce c). Rozsah JavaScriptu je postaven na funkcích (které se také používají k efektivnímu vytváření objektů). Existuje také značná variace v tom, jaký druh přístupu máte z vnitřního rozsahu do vnějšího rozsahu. Nejsem obeznámen s jinými schématy určování rozsahu, ale jsem si jistý, že existují.

Klasický OOP vs. Prototypový OOP vs Téměř-OOP (struktury v C ?) vs Non-OOP:

I ve třídě OOP existuje velký prostor pro variace. Ať už můžete dělat více dědičností (ew, značně nadměrně, ew), definovat rozhraní atd …

V JavaScriptu máme jakýsi zakrnělý hybridní prototypový OOP, kde jsou objekty podstatně jednodušší, vysoce proměnlivé, ale stále máme schopnost oddělit rozhraní od interních problémů, což je důležitým aspektem zapouzdření IMO. .

OOP spočívá v tom, že je opravdu spousta věcí, které můžete vytáhnout a které jsou v zásadě orientovány na OOP, aniž by technicky byly OOP. Samozřejmě existují puristé, ale na konci dne jde o dosažení určitých abstrakcí, které v určitých situacích fungují dobře. Nebuďte příliš rychlí na to, abyste předpokládali, že myšlenky z jazyka založeného na OOP nemají nic užitečného v něčem, co je více procedurálně orientované. A nemluvím o JavaScriptu. Není to nijak omezeno praštěnou verzí prototypu založeného na paradigmatu OOP.

Prvotřídní funkce :

Nemít tyto jazyky v jazyce je pro mě těžké se vzdát. Můžete předávat funkce, jako by to byla data pro použití v jiných kontextech. Díky tomu je implementace zejména schémat zpracování událostí velmi snadná, ale také je velmi snadné přizpůsobit jazyk tak, aby se vám líbil. Je to více než cokoli jiného, co tuším, díky čemuž byl JavaScript úspěšný že konečný byl i přes to, že byl navržen za dva týdny a dostal na něj syntaxi přibližné Java jako marketingové schéma.

Závěry:

Nejsem si jistý, kde je debata o Javě, ale vím, že spousta vývojářů Java požadovala tuto funkci před rokem nebo dvěma. V neuzavřeném jazyce, když se funkce zavře, nic, co je nějakým způsobem schopno odkazovat na věci zevnitř této funkce, k ní nebude mít přístup, protože bylo odebráno smetí. V závěru je kontext spuštění vázán tak, že pokud „jsem schopen odkazovat na věci uvnitř této uzavřené funkce z jiného oboru, jako je vrácený objekt nebo funkce, v zásadě získáte ty vary, jaké byly při zavření funkce.“ Je to jako zaseknutí vaší nohy ve dveřích sběru odpadu, i když se domnívám, že je implementováno spíše jako kopie těchto vars vytvořených do místních vars odkazující entity.

Pevné / přísné / bezpečné vs. dát vám vše lano, které chcete:

vývojáři JS a vývojáři Java mají tendenci nerozumět každému vůbec a myslím, že to má hodně společného s tím, že dva jazyky padají na téměř opačné strany tohoto konkrétního designového spektra. Nechci, abys mě chránil před sebou nebo před ostatními vývojáři v mém týmu. Chci toho udělat mnohem víc v mnohem menším množství kódu a udělat to velmi odlišnými (ale pro danou doménu konzistentními) způsoby v závislosti na o situaci. Obě existují absolutně kompromisy a mnoho jazyků má tendenci klesat více doprostřed.

Komentáře

  • Děkuji. To ' je opravdu hezké projít snahou o hlasování dolů bez vysvětlení.

Odpověď

Myslím si, že zkratkou v tom všem je naučit se Lispu dost na to, aby dokázal dělat nějaké užitečné věci. Většina z těchto paradigmat začala jako způsoby použití Lispu, takže je to jednoduchý způsob zkoušet věci.

Existuje řada „druhů“ jazyků, ale vždy se mohou objevit nové. Účelem jazyka je v zásadě umožnit co nejpřímější kódování nápadů, konceptů nebo požadavků. Za tímto účelem mohou nastat situace, kdy stávající paradigmata potřebují a může být zapotřebí nové.

Jedním ze způsobů, jak se na to dívat, je struktura povrchu. Jak přímo vám to umožní stručně zakódovat nápady, takže pokud si to rozmyslíte, co chcete, je také snadná odpovídající změna kódu, s malou šancí zavést chyby.

Další způsob, jak podívejte se na to z hlediska kontrolní struktury. Když je jazyk prováděn (pokud je), v jakém pořadí se věci stávají, aby bylo možné dosáhnout toho, co chcete? Příklady jsou: jednoduché přímé provedení, rekurze, ústup, paralelismus. Jednou, kterou jsem (skromný kašel) objevil, bylo diferenciální provedení .

Dalším užitečným hlediskem je, že kdykoli je navržena datová struktura, jazyk je narozený. Data jsou „prováděna“ aplikačními programy, které je skrývají a dělají věci, stejně jako program je jen spousta dat (například kódy bytů), která jsou používána tlumočníkem k provádění věcí.

Komentáře

  • Super. Naučím se LISP a budu osvícený. Vzrušující: D
  • Pokud však řeknete, že při použití datové struktury se vytvoří nový mezilehlý jazyk, můžete také argumentovat, že se v každém algoritmu rodí nový jazyk (všechny operace se nutně provádějí s daty struktura) a s redukcí se v každém řádku kódu rodí nový jazyk. Myslím, že máte na mysli něco jiného, ale ' si nejsem úplně jistý, zda tomu ještě rozumím?
  • @sova: Pro mě byla informační teorie velkým odhalením (Shannon i Kolmogorov). Je to ' o tom, jak jsou významy kódovány a předávány kanály, s koncepcemi šířky pásma, detekce chyb, minimálního kódování, náhodnosti atd. Data tedy kódují informace a algoritmy jsou kanály . Programy kódují informace a programování je kanál. Jaké informace jsou tedy zakódovány? odkud pochází a kdy? kam to jde? jaké jsou zdroje chyb (šumu)? jak jsou opraveny? Zjistil jsem, že je to užitečná perspektiva.
  • @sova: (pokračování) Nemusíte ' ovládat veškerou nadřazenou matematiku. Pro mě byl důležitý rámec, který mi dal k přemýšlení o věcech.

Odpověď

Musím doplňte, že existují programovací jazyky pro konkrétní aplikace. Ten, který mi přijde na mysl, je APT (Automatic Programmed Tool) jazyk používaný při výrobě obráběcích strojů.

Komentáře

  • Ten si pamatuji. Možná jsem to dokonce použil. Chlapče, to bylo nejmodernější. Frézku jste nemuseli ' ručně vést, stačí stisknout tlačítko start. A kdyby došlo k chybě, vypuklo by peklo.
  • Pracoval jsem na programech, které generují gcode pro frézky.
  • Pracoval jsem ' ' Doslova jsem držel a viděl výsledky programovacích chyb, často mých.
  • Strávil jsem 20 let instalací postprocesorů na huby systémů.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *