JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?

Mlocik97

  • *****
  • 965
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Toto je reakcia na komentáre v článku https://www.root.cz/zpravicky/typescript-sa-na-githube-stal-programovacim-jazykom-cislo-jedna/nazory/ a keďže komunikácia je tam veľmi pomalá, a efektívnejšie je to prebrať do detailov tu na fóru, a získať pohľad viacej ľudí, myslím že je fajn tu začať túto "subjektívnu sebatu".

Osobne tvrdím že JS a TS je prakticky zhodný programovací jazyk až na jednu jedinú výnimku a to je syntax typovej anotácie (inline vs JSDoc, čo sú veľmi minimálne rozdiely. Ak by som ale mal brať že JS a TS je rozdielny jazyk (moje prirovnanie s "vymením podušku v Škoda Octavia a predám to ako moju vlastnú značku) dosť platí, pretože tie rozdiely sú obdobné ako v C prekladanom cez GCC vs Clang (aj tam sú konštrukty, ktoré chápe len jeden nástroj).

Navyše interoperability medzi JS a TS je tak obrovská, že vlastne všetky knižnice a frameworky fungujú v oboch bez akejkoľvek zmeny alebo "patchovania". Takže je logický assumption že je to stejný jazyk ak ekosystém je zhodný, nástroje sú zhodné (TSC rozumie JS a aj typovým anotáciám v ňom), atď... viď https://github.com/Mlocik97/JSvsTS/tree/master/src môj example.

Ak by sme teda ale tvrdili že jazyk neurčuje tool ktorý ho spracuváva (pretože predsa GCC a Clang nie sú 2 rozdielne jazyky "C"), tak potom definícia jazyku je skutočne len špecifikácia syntaxe a API a v takom prípade JS vs TS zas len platí moje "rozdiel je len v syntaxy typovej anotácie"... z pohľadu runtime sú obe jazyky zhodné, z pohľadu toolingu a typovej kontroli tiež, z pohľadu ekosystému zhruba tiež, a v podstate TSC je pre mňa "type-aware linter" (však keď si to tak dnes zoberem TSC ani nepotrebujem na spustenie TS, viď BunJS, Node, ESBuild...), a transformácie ktoré to robí pri "transpilácii" sú na úrovni transformácií ktoré robí ESLint, ESBuild, či Babel.

Taktiež argument že TS má typy ktoré JS nemá mi príde nesprávny, predsa typy sú o tom ako sa dáta ukladajú do pamäte, a to je teda aspekt runtime, ktorý je v oboch jazykoch rovnaký. Teda defacto sú to jeden a ten istý jazyk. Rozdiel je max v typových anotáciách, nie typoch samotných... a rozdiel v anotáciách je fakt len v pár syntaktických rozdieloch.

Čo si myslíte o tom vy? A ak toto číta echo_zulu, môže pokračovať tu, aj tak ten článok už dosť sa zahrabal hlboko v správičkách a taktiež debata tam je dosť meh keď sa pol dňa len čaká na schválenie jedného komentáru, a pri takejto diskusii by to trvalo večnosť to celé "vyjasniť".

Ďakujem všetkým vopred za vaše názory.
« Poslední změna: Dnes v 00:14:55 od Mlocik97 »


Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
« Odpověď #1 kdy: Dnes v 09:18:04 »
Typ dat je pouze konvence. Je pouze věcí konvence, zda třeba řada čísel v paměti je "jen" pole čísel s pevnou délkou nebo jde o řetězec s pevnou délkou. Takže ano, může mít typy, které JS nemá. Protože z hlediska jazyka jako takového ten typ je daný v podstatě jen tou deklarací. Anotancí. Konvencí.

A ano, je to samostatný jazyk. Jazyk právě těch typových deklarací. Má definovanou syntax, vyjadřovací prostředky, scope. Nic, čím by se lišil od ostatních domain-specific jazyků v něm není. A přesně v místě, kde se napojuje na JS tak tvoří univerzální jazyk spolu s ním. Ten je sice JS blízce příbuzný ale atokonto těžko může jít o tentýž jazyk.

Tolik prostá neformální logika.

jano6

Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
« Odpověď #2 kdy: Dnes v 10:55:15 »
Sú to podľa mňa jednoznačne dva rozdielne jazyky. Ak sa naučíte JS, neznamená, že budete ovládať TS. Ten typový systém je dosť komplikovaný.

Ak sa budete hlásiť na job, kde budú požiadavky veľmi dobrá znalosť TS, nepochodíte s tým, však ja viem JS, to je to isté...

Ink

  • *****
  • 699
    • Zobrazit profil
    • E-mail
Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
« Odpověď #3 kdy: Dnes v 11:26:07 »
Pokud vím, tak JS není podmnožinou TS, jelikož se některé konstrukce interpretují jinak:

https://news.ycombinator.com/item?id=18942886#18944467

Stejně jako C není podmnožina C++, pokud se něco v posledních letech nezměnilo.

Mlocik97

  • *****
  • 965
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
« Odpověď #4 kdy: Dnes v 13:46:42 »
Pokud vím, tak JS není podmnožinou TS, jelikož se některé konstrukce interpretují jinak:

https://news.ycombinator.com/item?id=18942886#18944467

Stejně jako C není podmnožina C++, pokud se něco v posledních letech nezměnilo.

Toto je taký rare-case, prakticky v dobe prettieru a ESlint neexistujúci, keďže by to nepotrebnú zátvorku odstránilo,... že neviem či toto je argument na potvrdenie rozdielu medzi jazykmi i keď súhlasím nad týmto špecifickým rare-case som ani neuvažoval že jedna syntax môže znamenať 2 rozdielne veci v JS a TS. I tak tie rozdiely sú minimálne.


Mlocik97

  • *****
  • 965
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
« Odpověď #5 kdy: Dnes v 13:48:49 »
Sú to podľa mňa jednoznačne dva rozdielne jazyky. Ak sa naučíte JS, neznamená, že budete ovládať TS. Ten typový systém je dosť komplikovaný.

Ak sa budete hlásiť na job, kde budú požiadavky veľmi dobrá znalosť TS, nepochodíte s tým, však ja viem JS, to je to isté...

Lenže ten typový systém mám aj v JS, len ho treba povoliť v jsconfig.json, stejne ako u TS v tsconfig.json. Bez nich to nemá efekt. S nimi to má efekt v oboch jazykoch. Rozdiel tu teda nie je.

Mlocik97

  • *****
  • 965
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
« Odpověď #6 kdy: Dnes v 13:57:43 »
Typ dat je pouze konvence. Je pouze věcí konvence, zda třeba řada čísel v paměti je "jen" pole čísel s pevnou délkou nebo jde o řetězec s pevnou délkou. Takže ano, může mít typy, které JS nemá. Protože z hlediska jazyka jako takového ten typ je daný v podstatě jen tou deklarací. Anotancí. Konvencí.

A ano, je to samostatný jazyk. Jazyk právě těch typových deklarací. Má definovanou syntax, vyjadřovací prostředky, scope. Nic, čím by se lišil od ostatních domain-specific jazyků v něm není. A přesně v místě, kde se napojuje na JS tak tvoří univerzální jazyk spolu s ním. Ten je sice JS blízce příbuzný ale atokonto těžko může jít o tentýž jazyk.

Tolik prostá neformální logika.

Zaujímavý pohľad, asi z tohoto pohľadu máte pravdu, i keď ja skôr chápem jazyk ako špecifikáciu syntaxe a API. Tie typové anotácie majú rozdielnu syntax ako @type vs :, teda JSDoc vs inline, ale už popis typu samotného, nie len "oddelovač syntaxu logika vs typová anotácia", je taktiež zhodná, v podstate v @type {X} za X môžem napísať ľubovoľný TypeScript výraz resp. definíciu typu. Kľudne aj <T extends boolean>(val: T) => T extends true ? A : B a je to v JS valídne (keďže je to v podstate komentár, ale má efekt na tooly). Je to podobné ako dokumentačná syntax v C# napríklad.

takže síce syntax "oddelovača" je iná, v podstate syntax sugar, tak stále neviem prečo by sa JS a TS brali ako samostatné jazyky... lebo môžeme argumentovať že __builtin__* medzi CLang a GCC sú tiež rozdiely. Koľko % rozdielov definuje kedy to môžeme považovať za iný jazyk je už asi subjektívne.
« Poslední změna: Dnes v 14:00:44 od Mlocik97 »

Mlocik97

  • *****
  • 965
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
« Odpověď #7 kdy: Dnes v 14:05:27 »
Percentuálny rozdiel v syntaxy a API medzi JS a TS vidím asi taký ako medzi JSON a JSON with comments (JSONC). A tiež by som povedal že je to stejný formát prakticky.