プログラミング環境
とは何か?
言語とそれを取り巻く全て。いろんな側面がある
IDE
editor + compiler + ...
外部コンテキストへの接続
識別子 : 自然言語
コメント : 自然言語
document generator
doxygen, etc.
リポジトリ
検索システム
Q&Aベース
stackoverflow, qiita
URL / web
bug tracker
パッケージマネージャ
ライブラリ
バイナリ参照
.net assembly files
開発サイクル
報酬モデル
イテレーションの速さ
認知心理学
書捨て: Processing, jQuery
積み上げ:
開発モデル
組織モデル
ソフトウェア工学
Tests / Deployment / Debugging
Data Inspection
Logging
Breakpoint
入出力モデル
syscall
stdio
objects / actors / agents in some environment
smalltalk (sqeuak, pharo)
Network RPC
cf. microkernel
時間モデル
リアルタイム保証
ハードウェア記述言語
RTOS
Static Analyzer
非リアルタイム - 予測可能
C系
今時のCPUは難しい
マイクロアーキテクチャ
高度な分岐予測とキャッシュ
非リアルタイム - 予測不能/困難
Mathematica, Haskell
Prolog
計算モデル
serial / parallel / datagraph
serial:
imperative,
parallel
partially imperative: GPU CUDA / shaders Event driven
Some GUI frameworks
graph
通信 / オブジェクト / pi
同期 / imperative:
非同期: Erlang, pi
関数 / lambda
ステートマシン
RAM (random access machine)
回路 / データフロー
チューリングマシン
これが元になってる実用言語は見たことがない
もしかすると1900年代の織り機とかで使われてるかも?
表現形式
テキスト
木構造 / CFG
DSL:
数式
Query言語
自然言語
ノードベース
表現が変換に対して閉じているかどうか
cf. self-compiler
ノードベース
immutable / mutable / imperative
scalar / ADT / continuum
minimal文法 vs. syntax sugar
入力手段
キーボード
マウス
音声認識
概念認識
文字列 / 名前
シンボル
視覚的feature / 濃淡 / 形状 / 色
syntax highlighting
空間的配置
ディレクトリ
メソッド順番
"上の方" / "下の方"
auto completion, intellisense
「一般常識をそれっぽく言う」ことについてはAIはすでにsuperhuman
表層的な専門知識も含まれる
グルーのかなりの部分が自動で書けるようになる
具体的には、あまりengineeringを必要とはしないsoftwareは必要な時に書けるようになる
抽象度の高い言語は、圧縮されて読みづらいという問題があった
もはやタイプする文字数を最小化する必要はない
読んだ時の理解しやすさは引き続き高い必要がある
最適解は、より冗長な方向に変化するはず