{"updated":"2025-01-21T13:51:48.414193+00:00","metadata":{"_oai":{"id":"oai:ipsj.ixsq.nii.ac.jp:00095398","sets":["6164:6805:6806:7278"]},"path":["7278"],"owner":"10","recid":"95398","title":["Beautiful Error Handling"],"pubdate":{"attribute_name":"公開日","attribute_value":"2013-01-11"},"_buckets":{"deposit":"d5a4a2f5-097c-458c-a498-9b7c464bfbbe"},"_deposit":{"id":"95398","pid":{"type":"depid","value":"95398","revision_id":0},"owners":[10],"status":"published","created_by":10},"item_title":"Beautiful Error Handling","author_link":["0","0"],"item_titles":{"attribute_name":"タイトル","attribute_value_mlt":[{"subitem_title":"Beautiful Error Handling"},{"subitem_title":"Beautiful Error Handling","subitem_title_language":"en"}]},"item_keyword":{"attribute_name":"キーワード","attribute_value_mlt":[{"subitem_subject":"セッション1","subitem_subject_scheme":"Other"}]},"item_type_id":"18","publish_date":"2013-01-11","item_language":{"attribute_name":"言語","attribute_value_mlt":[{"subitem_language":"jpn"}]},"item_18_text_3":{"attribute_name":"著者所属","attribute_value_mlt":[{"subitem_text_value":"株式会社Preferred Infrastracture"}]},"item_18_text_4":{"attribute_name":"著者所属(英)","attribute_value_mlt":[{"subitem_text_value":"Preferred Infrastructure","subitem_text_language":"en"}]},"item_publisher":{"attribute_name":"出版者","attribute_value_mlt":[{"subitem_publisher":"情報処理学会","subitem_publisher_language":"ja"}]},"publish_status":"0","weko_shared_id":-1,"item_file_price":{"attribute_name":"Billing file","attribute_type":"file","attribute_value_mlt":[{"url":{"url":"https://ipsj.ixsq.nii.ac.jp/record/95398/files/IPSJ-SPRO2012003.pdf"},"date":[{"dateType":"Available","dateValue":"2013-01-11"}],"format":"application/pdf","billing":["billing_file"],"filename":"IPSJ-SPRO2012003.pdf","filesize":[{"value":"1.6 MB"}],"mimetype":"application/pdf","priceinfo":[{"tax":["include_tax"],"price":"0","billingrole":"5"},{"tax":["include_tax"],"price":"0","billingrole":"6"},{"tax":["include_tax"],"price":"0","billingrole":"44"}],"accessrole":"open_date","version_id":"72f2ba87-8fc9-4780-af9d-ff773682f519","displaytype":"detail","licensetype":"license_note","license_note":"Copyright (c) 2012 by the Information Processing Society of Japan"}]},"item_18_creator_5":{"attribute_name":"著者名","attribute_type":"creator","attribute_value_mlt":[{"creatorNames":[{"creatorName":"田中, 英行"}],"nameIdentifiers":[{}]}]},"item_18_creator_6":{"attribute_name":"著者名(英)","attribute_type":"creator","attribute_value_mlt":[{"creatorNames":[{"creatorName":"Hideyuki, Tanaka","creatorNameLang":"en"}],"nameIdentifiers":[{}]}]},"item_resource_type":{"attribute_name":"資源タイプ","attribute_value_mlt":[{"resourceuri":"http://purl.org/coar/resource_type/c_5794","resourcetype":"conference paper"}]},"item_18_description_7":{"attribute_name":"論文抄録","attribute_value_mlt":[{"subitem_description":"今日に於いても、プログラマにとってエラーハンドリングは頭の痛い問題である。正しいエラーハンドリングを行うことは、堅牢なソフトウェアを構築する上で大変重要な問題であるが、適切な抽象化が行われてきたとは言い難い状況にある。現在広く用いられている手法としては、古くからのエラーコードによるものと、例外によるものがある。エラーコードによる手法には大きく2つの問題がある。エラー処理のためのコードがコードのあらゆる部分に組み込まれ、コードの見通しが非常に悪くなることと、エラーを無視するのが非常に容易なので、予期せぬエラー処理漏れを犯しやすいことである。一方で例外を用いる方法は、正しいリソース管理とともに用いられる必要がある。メモリの管理をGCに任せた場合でも、GCの管轄外のリソースは正しく処理されないといけない。これを怠れば、多くの場合深刻なバグを引き起こすことになる。このような処理をもれなく記述すると、往々にして例外捕捉のために深いネストが必要となる。例外処理を正しく行うには、例外の正しい伝搬も必要であるが、これをきちんと行うのはかなり面倒なため、いわゆる例外の握りつぶしが横行する結果となるケースも少なくない。いずれの方法でも、エラーを正しく処理できているかどうかは簡単には推論できない。コードをじっくり観察する必要がある。かくして現代のプログラマは、退屈で面倒な、容易に間違いを犯し得る、そして何より「美しく」ないコードを神経をすり減らしながら書かなければならない状況にあり、また、ともすればそれを良しとする風潮すら見受けられる。しかしながらそれは解決できる問題であり、単にプログラミングモデルからくる制限に他ならないと考える。本発表では、モナドによってエラー処理の抽象化を行うための手法を紹介する。それとともにエラー処理に欠くことのできない、リソース管理の抽象化もあわせて紹介する。モナドを用いて、例外処理のための雑多のコードを、いわゆる「モナドの床下配線」によって隠蔽する方法を、実際のHaskellにおける応用例とともに見てゆく。それにより、エラーの通知側とそれを受け取って処理する側が完全に分離され、用途にマッチしたエラーハンドリングを自由に記述できるようになる。最終的に、正しいエラーハンドリングを美しく行えることを示す。","subitem_description_type":"Other"}]},"item_18_biblio_info_10":{"attribute_name":"書誌情報","attribute_value_mlt":[{"bibliographicPageEnd":"26","bibliographic_titles":[{"bibliographic_title":"夏のプログラミング・シンポジウム2012「ビューティフルコード」報告集"}],"bibliographicPageStart":"17","bibliographicIssueDates":{"bibliographicIssueDate":"2013-01-11","bibliographicIssueDateType":"Issued"}}]},"relation_version_is_last":true,"weko_creator_id":"10"},"created":"2025-01-18T23:42:30.272042+00:00","id":95398,"links":{}}