計算機科学実験及演習3 (ソフトウェア)
お知らせ
- 2024年度ページを作りました.(2024.05.22)
ここは必ず読んでくれ!
超重要
- 必ず「プログラミング言語処理系」の Slack ワークスペースに参加すること.参加の仕方が分からない場合は,
le3soft atmark fos dot kuis dot kyoto-u dot ac dot jp
(atmark
を @
に,dot
を .
に置換する)にメールして聞くこと.
- レポートが間に合わなそうなときは,あらかじめ
le3soft atmark fos dot kuis dot kyoto-u dot ac dot jp
(atmark
を @
に,dot
を .
に置換する)に連絡すること.期限の延長を検討する可能性がある.特に実験3HWの進度がやばい人は最初に相談すること.
- 毎回 PandA から作業報告を提出すること.出席確認を兼ねている.
実験に入る前に
- 課題を始める前に「プログラミング言語処理系」の環境設定に関するページを読んで環境設定をすること.
- 環境設定がうまく行かない場合は「プログラミング言語処理系」の第2回の講義動画の最初の方が参考になるかもしれない.
- それでもうまく行かない場合は Slack で聞くこと.
- 課題を始める前に,別途 KULASIS で連絡した URL から演習用レポジトリを作成し,clone すること.
- clone したリポジトリで
dune runtest
を実行してテストが実行されることを確認すること.
実験の進め方
test/dune
ファイルを開くと,問題番号が列挙してある.問題番号はOCaml入門または「プログラミング言語処理系」講義資料の Exercise の番号に対応している.解こうとする問題番号の行頭の ;
を削除して,dune runtest
を実行すると,テストが実行されるはずである.問題を解いて,dune runtest
が通ることを確認して,編集したソースコードと test/dune
を push することで提出されたものとみなされる.
- 提出後,GitHub Actions で自動テストが行われる.テストが失敗した場合にはメールが届くはずなので,修正して再度 push すること.
- 単位取得要件を読んで要件を満たすように問題を解くこと.
- 各課題の進め方については,レポートの作成にあたっての注意も読むこと.
- 困ったらFAQを確認.レポート1のFAQも確認.テストの都合で,正しいプログラムを書いているのに,テストを通らないこともあるので,困ったら確認.
- 分からないことがある場合は「プログラミング言語処理系」の kuis-isle3sw チャネルで質問すること.ダイレクトメッセージではなくこのチャネルを使うこと.どんなにくだらない質問でも良い質問である. 必要であれば Zoom でサポートする.
予定と各レポートの締め切り
- 6/6: 初回説明
- 6/7
- 6/13
- 6/14
- 6/20: 課題1 (OCaml演習) 締め切り
- 6/21
- 6/27
- 6/28
- 7/4: 課題2 (インタプリタ演習) 締め切り
- 7/5
- 7/11
- 7/12
- 7/18
- 7/19: 課題3 (型推論演習) 締め切り
詳細な説明
単位取得のための要件
以下の要件を満たすように課題に解答し,かつすべてのレポートを提出すること.
課題番号の直後に★印(個数は難易度をあらわし,多いほど難しい)の書かれた課題は必修ではなく選択課題である.以下に示したのは最低要件であるが,より多くの選択課題をすれば,その分を加点する.
(ただし,講義教科書の3.6.2節に書かれている2つの選択課題Ex.3.6.6, Ex.3.6.7 の評価については,提出物の内容や出来に応じ★〜★★★★★とする.)
- レポート1(OCaml入門)
- 『OCaml入門』 の演習問題の以下をすべて解く.
- Ex.2.6(2)
- Ex.2.6(4)
- Ex.3.7
- Ex.3.11
- Ex.4.1
- Ex.4.4
- Ex.4.5
- Ex.4.7
- Ex.5.3(1)-(6)より任意の4つ
- Ex.5.6
- Ex.6.2
- Ex.6.6
- Ex.6.9
- Ex6.10(1)-(5) より任意の2つ
- Ex.7.1
- Ex.7.2
- Ex.7.4
- Ex.7.6
- Ex.7.8
- 解答にあたってはレポート1に関する注意を参照すること.
- レポート2(インタプリタ作成実験)
- 講義教科書の3章に含まれる全ての必修課題(★印のついてない課題)に加えて,★の数の合計が5個以上になるように選択課題を解く.
- レポート3(型推論実験)
- 講義教科書の4章に含まれる全ての必修課題(★印のついてない課題)を解き,実験全体への感想や意見などの自由記述を書く.
レポートについて
- GitHub Classroom を用いて作成したリポジトリを編集して,その変更を push すること.
- Gitのコミットはできるだけ細かく作成することが望ましい
- 少なくとも各課題と対応したコミットは分離すること
- レポート提出の際は、GitHubのrelease機能を使って各レポートに対応するリリースを作成すること.これによって課題が提出されたとみなされる.
- リリースには「report1」、「report2」、「report3」と、各レポート課題に対応したタグを付けること
- リリース外の内容は採点の対象とならない場合があるため要注意
- 再提出の際は「report1-resubmission1」など、再提出に対応したリリースを作成すること
- 再々提出等が必要になる場合は resubmission の後の自然数をインクリメントしてください.
- レポートには必ず説明を加えること.特に,プログラムを作成する課題ではプログラム中にコメントとしてプログラムに関する説明を加えること.
レポート1(OCaml入門)について
main.ml
を編集してそれを push することで提出.
- プログラムを作成する課題ではプログラム中にコメントとしてプログラムの実行例と,その実行例によって何をテストしようとしているかの説明を加えること
レポート2(インタプリタ),レポート3(型推論器作成)について
- ソースコードだけでなく,LaTeXで作成したものをPDF化したレポートも合わせて提出すること.どのような内容を書くべきかは下記参照.レポートPDFの表紙には,氏名,レポートの種類(2 or 3),提出日を明記すること.
- 形式や分量は自由であるが,あまりに内容の薄いレポートは再提出を求めることがある.最低限,以下を含めること.
- 各プログラムの設計方針
- 各部の実装の詳細な説明.ただし,プログラムへの説明はソースコード中にコメントとして含めること.
- 実装にあたって工夫した点
- 感想(難しかった点や実験への要望)
- インタプリタをテストする課題では,新たに追加した機能を試すのに十分と思われるテストプログラムを自分で考え,そのテストプログラムの意図(どういう機能を試しているものか)も説明するようにせよ.
テストの走らせ方
clone したリポジトリには OCaml の標準的なビルドシステムである dune を用いてテストを行うためのコードが含まれている.課題を解いたら,以下に従って手元でテストを行い,これを通してから push すること.
- test/dune ファイルをエディタで開いて,対応する問題番号の頭のセミコロンを削除する.(セミコロンが dune ファイルのコメントになっている.)
- リポジトリのディレクトリで dune runtest を実行し,すべてのテストが通っていることを確認する.
その他の情報
実験資料
3回生講義「プログラミング言語処理系」講義資料 (link)
(前期期間中,講義資料は随時アップデートされる可能性があるため,常に最新版を参照するようにされたい.)
参考資料
一部記述が古い可能性があります.不明な点があれば質問してください.
- OCaml環境設定情報(講義「プログラミング言語」ホームページの一番下)link
- 参考書「プログラミング in OCaml 〜関数型プログラミングの基礎からGUI構築まで〜」(link)
- OCaml公式マニュアル (link)
- Menhir公式ホームページ (link)
連絡用メールアドレス
le3soft atmark fos dot kuis dot kyoto-u dot ac dot jp
(atmark を @ に,dot を . に置換する.教員と TA 全員に届きます.)
スタッフ
教員・職員
TA
- LEE Jaeyoung
- 藤原 佑輔
- 吉岡 拓真
- 松本 翼
- 近藤 拓未