Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
****
導入
****
==================
この授業について
==================
* 先端科目(3〜4年生向け)
* プログラミング言語についての理論的な理解を目指す
* 2つ以上のプログラミング言語を知っていることが前提
==========
成績評価
==========
* 毎週の課題 20点
* 中間レポート 40点
* 期末試験 40点
過去の実績
----------
* 2020年度: S 49名、A 28名、B 27名、C 16名、D 55名
* 2022年度: S 13名、A 16名、B 5名、C 3名、D 13名
==============
根本的な疑問
==============
どうしてこんなにたくさんプログラミング言語があるのか?
* `List of programming languages - Wikipedia `_
* さらに Go, Swift, Rust など新しい言語が作られている。
* これらの言語はお互いに違っているが、どう違うのか?
.. _definition_of_language:
==================================
プログラミング言語を定義する方法
==================================
新しい言語をデザインする時、曖昧さがなく、簡潔で、理解しやすい形で定義することはきわめて重要である。
* Scheme には数学的に厳密な `定義 `_ があるが、残念ながら理解するのが難しい。
* BASIC や C は、最初は厳密な定義がなかったので、微妙に異なるいくつかの処理系ができてしまった。PHPも最近まできちんとした定義がなかった(cf. `Announcing a specification for PHP `_ )。
言語を定義するには、次の二つのことを決める必要がある。
* 構文(:index:`syntax`) --- どのように書くか、ということ
* 意味(:index:`semantics`) --- 実行すると何が起きるか、ということ
==============
構文的な違い
==============
文字
----
* 独特の記号を使うもの (例: `APL `_ )
* 日本語を使うもの (例: `Mind `_ , `言霊 `_ , `なでしこ `_ )
* 文字を使わないもの (例: `Viscuit `_ , `ToonTalk `_ )
文法
----
`Esoteric progarmming language `_ というものがある。
* `Whitespaceで"Hello World!" `_
* `brainf*ckでジョジョ言語 `_
==============
意味的な違い
==============
プログラミング言語におけるパラダイムとは、哲学的に言えば「計算とは、何か」ということ。
命令型(手続き型)
計算とは、状態を変化させることである。
関数型
計算とは、式を簡約することである。
論理型
計算とは、命題を証明することである。
========================
良いプログラミング言語
========================
* 「読みやすさ」と「書きやすさ」は一般に両立しない。
* 「効率が良い」とは?
* 実行速度が速い
* コンパイルが速い
* プログラムを書くのが速い
* 信頼性を高くするには?
* 強い型付けや例外処理の強制 → 嫌いな人もいる
* エコシステム
* 言語の学習が大変だとあまり使われない
* 言語処理系の開発が大変だとあまり使われない
* ライブラリが揃っていないとあまり使われない
========================================
プログラミング言語の理論を勉強する理由
========================================
* 発想の幅が広がる --- 言語は概念を表現する道具に過ぎないのだが、使う言語によって発想が制約されるのも事実。「ハンマーしか持っていなければ、すべての問題は釘に見える」ということわざがある。
* 新しい言語を容易に学べるようになる --- 技術の進歩についていくには常に勉強しなければならない。
* ソフトウェア技術の重要な基礎である --- 基礎をおろそかにしては高度な研究はできない。