|
| 1 | +# Tags |
| 2 | + |
| 3 | +This document aims to provide reasoning why `config.json` contains the `"tags"` it contains. |
| 4 | + |
| 5 | +It uses as a basis the JavaScript's [TAGS.md](https://github.com/exercism/javascript/blob/main/TAGS.md) because anything that JavaScript does can be done with TypeScript, being a transpiled language, and adds/modifies with the perks TypeScript brings on top of it. |
| 6 | + |
| 7 | +## Paradigms |
| 8 | + |
| 9 | +- [x] `paradigm/declarative`: mostly popularised by libraries and frameworks such as React, Vue, etc. |
| 10 | +- [x] `paradigm/functional`: there is a lot of support for functional programming, including various defactor libraries in the ecosystem providing functional programming patterns. |
| 11 | +- [x] `paradigm/imperative`: It retains JavaScript's script and DOM's manipulation imperative programming, but the language design doesn't encourage it. |
| 12 | +- [ ] `paradigm/logic`: whilst it is possible to write DSL or patterns that' allow for logic-based programming, JavaScript doesn't inherently support it. |
| 13 | +- [x] `paradigm/object_oriented`: becomes a main feature of the language compared to JavaScript, along with static type checking and a rich type system. |
| 14 | + |
| 15 | +## Typing |
| 16 | + |
| 17 | +- [x] `typing/static`: Will check types at compile time for any part of the code which has its types stated. |
| 18 | +- [x] `typing/dynamic`: At runtime all TypeScript's type information is stripped. Runtime type checking can also be manually achieved, as well. |
| 19 | +- [x] `typing/strong`: TypeScript adds a rich type system, that is checked at compile time if used. |
| 20 | +- [x] `typing/weak`: TypeScript allows for explicit (strong) typing, inferred (weak) typing, deferred (computed / conditional) typing, opt-out (using `any`) of typing, and forced run-time (using `unknown`) typing. |
| 21 | + |
| 22 | +## Execution mode |
| 23 | + |
| 24 | +- [x] `execution_mode/compiled`: TypeScript transpilation (transpilation via [`tsc`](https://www.typescriptlang.org/), or stripping types and then compiling using [`@babel/preset-typescript`](https://babeljs.io/docs/en/babel-preset-typescript)) compiles the code to a certain version of JavaScript. This includes in-memory compilation using tools such as [`ts-node`](https://github.com/TypeStrong/ts-node), however due to the in-line nature and REPL like support, it might be considered interpreted. |
| 25 | +- [x] `execution_mode/interpreted`: TypeScript _can_ be interpreted Just-In-Time by stripping types, for example using [`@babel/preset-typescript`](https://babeljs.io/docs/en/babel-preset-typescript). |
| 26 | + |
| 27 | +## Platform |
| 28 | + |
| 29 | +- [x] `platform/windows`: popularised by Electron and Node |
| 30 | +- [x] `platform/mac`: popularised by Electron and Node |
| 31 | +- [x] `platform/linux`: popularised by Electron and Node |
| 32 | +- [x] `platform/ios`: popularised by PhoneGap/Cordova, Ionic, React-Native |
| 33 | +- [x] `platform/android`: popularised by PhoneGap/Cordova, Ionic, React-Native |
| 34 | +- [x] `platform/web`: used in frontend frameworks like Angular |
| 35 | + |
| 36 | +## Runtime |
| 37 | + |
| 38 | +- [ ] `runtime/standalone_executable`: it doesn't. Any executable that exists packages Node, or requires Node or a Browser. |
| 39 | +- [x] `runtime/language_specific`: it runs on Node |
| 40 | +- [ ] `runtime/clr`: it doesn't |
| 41 | +- [ ] `runtime/jvm`: it doesn't |
| 42 | +- [ ] `runtime/beam`: it doesn't |
| 43 | +- [x] `runtime/wasmtime`: Just like JavaScript, it doesn't natively, but JavaScript can compile to WASM, and thus then run on wastime. It's a bit of a cheat, but probably what people will search for. |
| 44 | + |
| 45 | +## Used for |
| 46 | + |
| 47 | +- [x] `used_for/artificial_intelligence`: popularised by TensorFlow |
| 48 | +- [x] `used_for/backends`: popularised by Express |
| 49 | +- [x] `used_for/cross_platform_development`: popularised by PhoneGap/Cordova, Ionic, React-Native, Electron and more |
| 50 | +- [ ] `used_for/embedded_systems`: It's possible to run the transpiled JavaScript on microcontrollers and IoT platforms, but the low-end nature makes it not a viable, professional, solution. Therefore this is not included. |
| 51 | +- [ ] `used_for/financial_systems`: Although it improves in the type safeness department, TypeScript being still JavaScript makes it too slow for fintech. |
| 52 | +- [x] `used_for/frontends`: Most TypeScript usage is with Frontend frameworks. |
| 53 | +- [x] `used_for/games`: probably one of the most popular replacements for browser-based games. |
| 54 | +- [x] `used_for/guis`: same reason as frontends, which is more and more interesting as libraries such as React can now also render to less common/expected displays, such as terminals (and thus be used to build GUIs), not requiring CSS or other ways to provide styling. |
| 55 | +- [x] `used_for/mobile`: yep, see platform |
| 56 | +- [ ] `used_for/robotics`: it's possible. Things like Johnny-Five help a lot. However, it's not a _go to_ language to provide robotics programming, so it's not included. |
| 57 | +- [ ] `used_for/scientific_calculations`: possible, and not uncommon especially for _visualisation_ (for example d3), but not a _go to_ language to do scientific calculations, so it's not included. |
| 58 | +- [ ] `used_for/scripts`: You could still transpile your TypeScript files, but is usually not worth the hassle, so is not used for scripting at all compared to JavaScript |
| 59 | +- [x] `used_for/web_development`: yes |
0 commit comments