![]() ![]() |
講義概要/Course Information |
科目基礎情報/General Information |
授業科目名 /Course title (Japanese) |
基盤ソフトウェア特論 | ||
---|---|---|---|
英文授業科目名 /Course title (English) |
Advanced Progamming Languages: Concepts and Implementation | ||
科目番号 /Code |
|||
開講年度 /Academic year |
2025年度 | 開講年次 /Year offered |
全学年 |
開講学期 /Semester(s) offered |
後学期 | 開講コース・課程 /Faculty offering the course |
博士前期課程、博士後期課程 |
授業の方法 /Teaching method |
講義 | 単位数 /Credits |
2 |
科目区分 /Category |
大学院専門教育科目 - 専門科目Ⅱ | ||
開講類・専攻 /Cluster/Department |
情報・ネットワーク工学専攻 | ||
担当教員名 /Lecturer(s) |
小宮 常康 | ||
居室 /Office |
西10-630 | ||
公開E-mail |
komiya@spa.is.uec.ac.jp | ||
授業関連Webページ /Course website |
http://www.spa.is.uec.ac.jp/~komiya/ | ||
更新日 /Last update |
2025/03/23 00:09:27 | 更新状況 /Update status |
公開中 /now open to public |
講義情報/Course Description |
主題および 達成目標(2,000文字以内) /Themes and goals(up to 2,000 letters) |
(a) 主題:よいプログラムを書くには,単にプログラミング言語を習得し,アルゴリズムを学ぶだけでは不十分である.解くべき問題をプログラミング言語上でどう表現するかでプログラムの可読性・開発効率・拡張のしやすさ等が大きく変わる.この一つのキーとなるのが,(大抵のプログラミング言語言語に備わっている)プログラミング言語の抽象化能力である.本講義では,計算手順,データ,言語の側面から抽象化について学ぶ. Abstraction in programming languages is one of the most important technique for helping to organize, understand, or extend programs elegantly. Major topics of this course are abstraction of data and computation, and metalinguistic abstraction. Mechanisms of computation and programming language systems are also included. (b) 達成目標:プログラムやデータを段階的に抽象化して構成することで見通しのよいプログラムを構成する方法,及び何種類かの計算メカニズムやプログラミング言語のメカニズムについて学ぶ.そして,データやプログラムに込められている本質的な意味を明確に捉えることができれば,それらの実装には自由度があることを理解する. Students will learn how to use abstraction and understand why abstraction is useful for constructing programs. Students will also learn mechanisms of abstraction. |
---|---|
前もって履修 しておくべき科目(1,000文字以内) /Prerequisites(up to 1,000 letters) |
なし none |
前もって履修しておくこ とが望ましい科目(1,000文字以内) /Recommended prerequisites and preparation(up to 1,000 letters) |
なし none |
教科書等(1,000文字以内) /Course textbooks and materials(up to 1,000 letters) |
参考書 (Reference books):H. Abelson and G.J. Sussman: Structure and Interpretation of Computer Programs Second Edition, MIT Press(和田英一訳:計算機プログラムの構造と解釈 第二版,翔泳社) この参考書は下記webページにて全内容閲覧可能です (This book can be read on the following web pages). 英語版 (English ver.): https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html 翻訳版 (Japanese ver.): https://sicp.iijlab.net/fulltext/ 2022年に,この本のJavaScript版が出版されています(上記オリジナル版ではScheme言語を使用).講義ではオリジナル版を使用しますが,JavaScript版で勉学を進めることもできなくはないと思います. In 2022, the JavaScript version of this book was published (the Scheme language is used in the original version above). The original version is used in the lecture, but studying with the JavaScript version is not impossible. JavaScript版(playground付き)(JavaScript version with playground): https://sourceacademy.org/sicpjs/index |
授業内容と その進め方(2,000文字以内) /Course outline and weekly schedule(up to 2,000 letters) |
英語タイプII(Cb)により講義を実施 (This course is English Type II (Cb)) (a) 授業内容 (Cource content) 第1回 Scheme言語の概要 第2回 式の評価および計算プロセス 第3回 手続き(関数)による抽象の構築 第4回 データによる抽象の構築 データ抽象の効果 第5回 データによる抽象の構築 実装のバリエーション 第6回 データによる抽象の構築 抽象データの多重表現 第7回 標準部品化力,オブジェクトおよび状態 第8回 ストリーム 第9回 ストリームによる状態表現 第10回 mutableデータオブジェクト 第11回 環境モデル 第12回 超言語的抽象 Scheme言語の評価器 第13回 超言語的抽象 評価器のバリエーション 第14回 レジスタ計算機での計算 仮想レジスタ計算機・メモリ割当とごみ集め 第15回 レジスタ計算機での計算 機械語命令による評価器・コンパイラの概要 1. Introduction to the programming language Scheme 2. Evaluating expressions and their computational processes 3. Building abstractions with procedures 4. Building abstractions with data: the benefits of introducing data abstraction 5. Building abstractions with data: variations of implementation 6. Building abstractions with data: multiple representations for abstract data 7. Modularity, objects, and state 8. Streams 9. Modeling state with streams 10. Mutable data object 11. The environment model 12. Metalinguistic abstraction: an evaluator for Scheme 13. Metalinguistic abstraction: variations on a Scheme 14. Computing with register machines: a virtual register machine, storage allocation and garbage collection 15. Computing with register machines: a Scheme evaluator in the register-machine language, and outline of compilation (b) 授業の進め方 (How to proceed) 実際にプログラミングすることで深く理解することができるので,座学に加えプログラミング課題を課す. Since you can understand deeply by actually programming, students will be assigned programming assignments. |
実務経験を活かした 授業内容 (実務経験内容も含む) /Course content utilizing practical experience |
|
授業時間外の学習 (予習・復習等)(1,000文字以内) /Preparation and review outside class(up to 1,000 letters) |
プログラミング課題をこなすことのほかに,授業で紹介したプログラムを,実際に動かし,理解を深めておくこと. In addition to completing programming assignments, you will be required to run the programs introduced in class to deepen your understanding. |
成績評価方法 および評価基準 (最低達成基準を含む) (1,000文字以内) /Evaluation and grading (up to 1,000 letters) |
(a) 評価方法 (Evaluation methods):レポート(65%)と期末試験(35%)の合計で評価する. Course grades will be determined by programming assignments (65%) and the final exam (35%). Students must submit ALL the assignments and take the final exam. (b) 評価基準:以下の達成レベルをもって合格の最低基準とする. ・すべてのレポートが受理されていること ・抽象化の意義を理解し,抽象化技術を簡単な問題に適用できること ・プログラミング言語が行う計算のプロセスをほぼ理解していること ・簡単な言語処理系の仕組みをほぼ理解していること Evaluation criteria: You should: - Submit all reports - Understand the meaning of abstraction and be able to apply abstraction to simple problems - Have a basic understanding of the evaluation process performed by programming languages - Have a basic understanding of the mechanism of simple programming language implementations |
オフィスアワー: 授業相談(1,000文字以内) /Office hours(up to 1,000 letters) |
可能な限りいつでも相談に応じますが,メールなどで事前にアポイントを取ると確実です.メールでの質問・相談はいつでもOKです. I am always available to answer your questions whenever possible, but it is best to make an appointment in advance by e-mail. Questions by e-mail are always welcome. |
学生へのメッセージ(1,000文字以内) /Message for students(up to 1,000 letters) |
抽象化はプログラミングだけに留まらず,コンピュータに関するあらゆるところで必要な重要な考え方です. Abstraction is an important concept in programming and everything related to computers. |
その他 /Others |
期末試験の代わりとしてレポートを課すことがあります. A final report may be assigned in place of a final exam. |
キーワード /Keywords |
プログラミング, プログラミング言語, 言語処理系, コンパイラ, インタプリタ programming, programming languages, compilers, interpreters |