プログラミング言語
ある程度人が理解できるテキストで記述するコンピュータ用機能を記述するための言語
処理系によってコンパイラ系、インタプリタ系などに分かれるが、ミックスされたものなどもあり
main など開始位置のあるものと、フレームワーク上で実行する場合にmain的なものが隠蔽されているものがあるよ
コンパイラの実行コードは言語やVM別にあるものだったがライブラリが統一されていたりもする。
統合開発環境でコード補間などしながら作れるのが主流。
インタプリタ、コンパイラなどCPUと別の処理系を実行するものを高級言語、アセンブラ、機械語などCPU寄りの処理を記述するものを低級言語と分けたりする。高級言語はアセンブラ系などにコンパイルするもの、機械語に直接変換するものなどがあり、C言語を経由するものなどもある。
ソースコードはparse処理され、中間コードや内部オブジェクト、または直接コードに変換される。インタプリタやVMはそこから実行系の処理をはさんで実行される。コンパイラでは処理後のコードをリンカなどを通して配布して実行できる形になる。
コンパイラ
CPUのコード、VMのコードなどにする。リンカ、パッケージツールなどを使って実行できるコードを配布できたりできなかったり。 C言語,Javaなどの処理系
コンパイラ・コンパイラ
コンパイラを生成するためのコンパイラ
パーサージェネレーター
コンパイラジェネレーター
インタプリタ
ソースコードの形で配布され、ランタイムや処理系コードを通して実行される。実行中に内部でコンパイラを併用する場合もある JavaScript, BASICなど
VM
中間コードにコンパイルされるが、CPUで直接できる形式ではないので中間コードを処理するインタプリタまたはコンパイラ相当の処理系が必要。ソースコードを変換する処理が入らない分実行速度は速くなることもある。JavaVM, WASMなど
同じCPUが複数あるように見えるVMは一部をCPUで直接実行したりもする
データ型
整数
浮動小数点
文字列
配列
構造体, class
などの型を持つ データ記述言語
データの構造を扱うスキーマ記述言語
などの機能も持つ
その他機能
ファイル
ネットワーク
画像処理
構文解析
字句解析と構文解析は、ソースコードを解析などして読み込むいろいろ。
字句解析は正規表現やBNFなどで切り分けていったり。
今なら一括で解析していいんじゃないかな。
インタプリタやコンパイラの入門書でもそれぞれの手法に分かれていたりするのでいろいろ見てみるのもいいか。
RFC などで使われているBNF系など使えば上から下まで一括して定義できるので自作BNF処理系などで置き換えてもいい。
逆ポーランド記法
気にしてもいいし参考程度にするだけでもいいし。
中間コード
Objectで代用できるならそれもよし。
自動生成などもできるような感じになっている。
Lex
Yacc
JavaCC
などが有名
改定
何年かに一度、言語仕様が改定されていたりするので前後で比較もしてみた方がいい
言語
BASIC 8ビット時代によくあったものからいろいろ
C https://www.c-language.org/ ANSI C が標準になってからどうなったのか
ANSI C89
C90
C95
C99
C11
C17
C++ オブジェクト指向な方向
C# どちらかというとJavaの亜流か
COBOL 古の言語
Fortran 計算用っぽい
FORTRAN 77
Fortran 90
Fortran 95
Fortran 2003
Fortran 2008
Java Sun Microsystems がつくり Oracle に吸収され OpenJDK になり JVM上のバイトコードで動く
Java SE 言語仕様、標準ライブラリ
1.8
11
17
Java EE エンタープライズ系ライブラリなど
メモリ管理が容易
それまでC言語などではコンソール系しかOSを超えて標準化・統一されなかったが、JavaではAppletなどウインドウ処理、メディア系処理なども標準化された
JavaScript Netscape がつくったLiveScriptからJavaにあわせ改名
LiveScript Netscapeが開発したもの JavaScriptへ改名した 同名の別のものもいくつかある
TypeScript Microsoft っぽい型をもつJavaScript系
ECMAScript ECMAで標準化されているJavaScript
JScript Microsoftの古いJavaScript互換もの
ActionScript AdobeがFlash用などにECMAScriptを拡張したもの
Perl
PHP Perlの後継っぽくCGIからの置き換えで使われたがセキュリティ的な理由で使われなくなっていった感じ?
Python
Ruby
Rust 注目のWasm系 Linuxカーネルでつかうかもとか
WebAssembly / WASM ブラウザ上でも動くVM系 Mozillaっぽいところで作られた
など
部分的に使われるプログラミング言語ではなさそうなもの
正規表現 BNFで記述できる?
BNF (Backus-Naur Form)バッカス・ナウア記法
EBNF
ABNF
SQL
HTML / CSS
XML
データ記述言語
JSON
ASN.1
CBOR
UML
など
CPUや仮想マシン(JVM / WASM )
ブラウザ上ではJavaScript, Java Appletの他プラグインが使えたがJava Applet, プラグインは WASM に置き換わった形