languages-and-frameworks
Notes on Languages and Frameworks I have used
Languages
Name | Typing | Memory | Concurrency | Flavour | Meta | Verdict |
---|---|---|---|---|---|---|
C | static | manual | thread | procs | macro | โน Go |
C++ | static | manual/auto | thread | class | template | โน Kotlin |
C# | static | gc | thread | class | reflect | |
Clojure | dynamic+hints | gc | thread | functional | macro | |
Crystal | static | gc | coroutine | object | ||
Dart | static+infer | gc | thread | class | ||
Elixir | dynamic | gc | actor | functional | ||
Elm | inference | gc | - | functional | ||
F# | inference | gc | thread | class/func+dsl | ||
Go | static | gc | coroutine | structural | annotate+generate | |
Java | static+infer | gc | thread | class | annotate+reflect | |
JavaScript | dynamic | gc | async/await | prototype+class | โน TypeScript | |
Julia | dynamic+hints | gc | ||||
Haskell | inference | gc | ||||
Kotlin | static | gc | co+thread | class+dsl | annotate+reflect | |
Lua | dynamic | gc | ||||
Nim | static | gc | ||||
OCaml | inference | gc | func/class | |||
PHP | dynamic | gc | ||||
Pony | inference | gc | actor | functional | ||
Python | dynamic | gc | ||||
Ruby | dynamic | gc | co+thread | object | monkeypatch | |
R | dyanic | gc | ||||
Scala | static+infer | gc | thread+actor | โน Kotlin/Clojure | ||
Scheme | dynamic | gc | ||||
Swift | static+infer | auto | ||||
TypeScript | dynamic+hints | gc | async/await |
C
C is the first compiled language that I used. It is great for low-level work and making libraries to integrate with other languages. Unless I really need the last bit of performance, I would rather choose a language with managed memory.
C++
This is the first class-based language that I used and also exposure to templates and generic types. Some problems organize well into class hierarchies with mixed static/virtual dispatch. I haven't used newer incarnations of the language and templates. Using the Boost libraries makes the experience much better. My preference is for fully managed memory rather than autoptr and haven't needed the low-level power combined with class/template abstractions on projects.
C#
Really only used C# in the context of Unity 3D. Very natural coming from Java. Might possibly use this again in Godot but would probably try to use GDScript first. Mono and especially .Net Core makes this interesting for cross-platform use in the future.
Clojure
Have only used this on small personal projects. I like the opinionated take on Lisp as well as being part of the JVM ecosystem. Don't understand what lispers have against running on a popular VM. Will continue to use with either Liberator or Composure frameworks.
Crystal
Dart
Elixir
Elm
F#
Go
Java
JavaScript/ECMAScript
Julia
Haskell
Kotlin
Lua
Nim
OCaml
PHP
Pony
Python
Ruby
R
Scala
Scheme
Swift
TypeScript
Frameworks
Name | Language | Verdict |
---|---|---|
none | ||
Amber | Crystal | โน Kemal/Javalin/Phoenix |
Compojure | Clojure | |
Django | Python | โน Phoenix |
DropWizard | Java | โน Javalin |
Elm | Elm | |
Flutter | Dart | |
Javalin | Kotlin/Java | |
Ktor | Kotlin | โน Javalin |
Kemal | Crystal | |
Liberator | Clojure | |
Micronaut | Java | โน Spring |
Phoenix | Elixir | |
Rails | Ruby | โน Phoenix |
React | JS/TS/ReasonML | |
Spark | Java | โน Javalin |
Spring | Java | |
Sinatra | Ruby | โน Phoenix |
Vaadin | Java | โน Phoenix |
Vue | JS/TS | |
Web2py | Python | โน Phoenix |
Yii/Yii2 | PHP | โน Phoenix |
none (any)
Amber (Crystal)
Compojure (Clojure)
Django (Python)
DropWizard (Java)
Elm (Elm)
Flutter (Dart)
Javalin (Java/Kotlin)
Ktor (Kotlin)
Kemal (Crystal)
Liberator (Clojure)
Micronaut (Java)
Phoenix (Elixir)
Rails (Ruby)
React (JS/TS/ReasonML)
Spark (Java)
Spring (Spring)
Sinatra (Ruby)
Vaadin (Java)
Vue (JS/TS)
Web2py (Python)
Yii (PHP)
Yii2 (PHP)
Databases/Datastores
Name | Verdict | โนBecause / |
---|---|---|
Cassandra | โน CockroachDB/FDB Record(JVM) | complex performance tuning |
Cloudant | โน CockroachDB/FDB Document | unless search |
CockroachDB | frequent (eg. N+1) queries | |
Couchbase | โน Redis | |
CouchDB | โน CockroachDB/FDB Document | unless offline sync |
Elasticsearch | db fulltext good enough | |
FoundationDB Document Layer | ||
FoundationDB Record Layer | ||
Memcached | โน Redis | |
MongoDB | ||
MySQL | ||
PostgreSQL | ||
RabbitMQ | ||
Redis | ||
RethinkDB | ||
Riak KV | ||
Riak TS | ||
Solr | ||
TiDB | ||
TiKV |
Cassandra
CockroachDB
Couchbase
CouchDB
Elasticsearch
FoundationDB Document Layer
FoundationDB Record Layer
Memcached
MongoDB
MySQL
- InnoDB
- TokuDB
- RocksDB
PostgreSQL
- proper