Dark
Dark is a holistic programming language, structured editor, and infrastructure, for building backend web services. It’s aimed at frontend, backend, and mobile engineers.
作者は元 CircleCI の人
現代のソフトウェア開発は複雑さが増している
本来やりたかったのは、サーバープログラムなら、リクエストを受けて、データを処理して、データを保存したり、レスポンスをするということ。
今、アプリケーションを作ろうとしたら大量のツール・技術を覚えろといわれる
Docker, Kubernetes, Git, AWS, GCP, SQL, NoSQL, GraphQL, gRPC, npm, ...
CI/CDプロセスも複雑になっている
Gitでブランチを切り、コミットをして、GithubにPushして、PullRequest投げて、コードレビューしてもらって、Mergeされて、CircleCIがフックされて、テストが走り、Docker Imageがビルドされ、Kubernetes のマニフェストが更新され、新しいコンテナを立ち上がり、ヘルスチェックが通るまで待って、ロードバランサからトラフィックが流れるようになって…
Dark is holistic
言語と、エディタと、インフラが強く統合されている
汎用的なプログラミング言語ではない
次の複雑さを取り除く
Infrastructure complexity
Deployment complexity
API complexity
Code-as-text complexity
Infrastructure complexity
現代のインフラには、AWS, GCP, Docker, Kubernetes, モニタリング, セキュリティ, DB, キュー, ロードバランシング、サービスディスカバリなど、多くの複雑さを含んでいる
最適なインフラを提供し、選択肢を排除する
言語とインフラが統合されているので、完全なObservability を提供できる
データベースの扱いの難しさ
インデックス、最適なクエリ、データ移行
?
Deployment complexity
コードをリリースするには、多くの手順と時間が必要になってしまっている
テスト
パッケージング(Docker Image, webpack, AMI)
アップロード(Docker レジストリ, S3)
デプロイ(コンテナの起動、Blue-Green Deploy、DB Migration、feature flags)
エディタで書いたそばからプロダクションにデプロイする
feature flag で有効にできる
長いビルドプロセスもコンテナも必要ない
Deployless
抽象構文木の差分のみを送る
feature flag
Creating and deploying a feature flag is a single operation in our editor. It creates a blank space to add new code, and provides the knobs to control who sees the old and new code, as well as a button/command to atomically switch over to the new code or abandon it.
ローカル環境は必要か
feature flag がその代わりとなり
API complexity
APIの難しさ
認証、エラー、Rate limitting、Retryなど
さまざまなプロトコル(REST, GraphQL, gRPC)
関数呼び出しと同じくらい簡単にする
上記の問題を解決し、レイテンシやエラーに対する Observablility がエディタに組み込まれている
Code-as-text complexity
Git/merge はコードを理解して行われない
テキストベースでしかバージョン管理がおこなわれない
バージョン管理が言語に強く統合されている
feature flag
関数や型がバージョニングされる