プログラミング言語
ある程度人が理解できるテキストで記述するコンピュータ用機能を記述するための言語
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ビット時代によくあったものからいろいろ
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などウインドウ処理、メディア系処理なども標準化された
LiveScript Netscapeが開発したもの JavaScriptへ改名した 同名の別のものもいくつかある
TypeScript Microsoft っぽい型をもつJavaScript系
JScript Microsoftの古いJavaScript互換もの
ActionScript AdobeがFlash用などにECMAScriptを拡張したもの
Perl
PHP Perlの後継っぽくCGIからの置き換えで使われたがセキュリティ的な理由で使われなくなっていった感じ?
Python
Ruby
など
部分的に使われるプログラミング言語ではなさそうなもの
BNF (Backus-Naur Form)バッカス・ナウア記法
EBNF
HTML / CSS
UML
など
CPUや仮想マシン(JVM / WASM )
ブラウザ上ではJavaScript, Java Appletの他プラグインが使えたがJava Applet, プラグインは WASM に置き換わった形