はじめに 2 /21 ドキュメントの重要性 開発や保守の効率化 ( プログラムの改変 ) ソフトウェアの品質向上 ( プログラムの利用 ) Fortran による数値モデルのドキュメント 数理 離散化ドキュメント :: TeX 数式の記述に最適 リファレンスマニュアル :: HTML Web からの

Similar documents
( 大 ) 目標 2 /25 可読性 可変性に優れた大気大循環モデル (GCM) を作る 可読性 : ソースコードの読み書きが簡単 可変性 : 物理過程の交換や分離, 力学過程の変更が簡単 こんな GCM にできると良いな お手軽に動かせる GCM カスタマイズが簡単にできる GCM

2 /13 仮想的な湿潤惑星の計算 計算条件を手軽に変更 大気組成 入射太陽放射量 重力加速度 大気圧 自転周期 etc. 可変性 可読性に優れた大気大循環モデル 何を計算しているか ソースコードを読んで分かる スキームの交換や分離が容易にできる

はじめに 大気大循環モデル (General Circulation Model: GCM) による惑星大気の比較実験

はじめに Doxygen イントロダクション Doxygen とは? Doxygen の主な特徴 数値モデル開発における Doxygen の利用 dcmodel におけるドキュメンテーション方法 Doxygen と RDoc の比較 シンタックス生成されるドキュメント IGModel における Do

目次 2 /14 はじめに : DCPAM とは? これまでの活動と今回の主題 オブジェクト指向型のモジュール設計 プログラムのテスト実行の半自動化 モジュール雛形作成ツールの整備 モデルの実装の現状

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Microsoft PowerPoint - prog03.ppt

Fortran 勉強会 第 5 回 辻野智紀

JavaプログラミングⅠ

JavaプログラミングⅠ

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

PowerPoint プレゼンテーション

Web データ管理 JavaScript (1) (4 章 ) 2011/12/7( 水 ) 湘南工科大学講義資料 Web データ管理 (2011) 阿倍 1/21

Microsoft PowerPoint - 09.pptx

プログラミング実習I

2 概要 市場で不具合が発生にした時 修正箇所は正常に動作するようにしたけど将来のことを考えるとメンテナンス性を向上させたいと考えた リファクタリングを実施して改善しようと考えた レガシーコードなのでどこから手をつけて良いものかわからない メトリクスを使ってリファクタリング対象を自動抽出する仕組みを

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

Prog1_6th

V8.1新規機能紹介記事

Microsoft Word 基_シラバス.doc

Java言語 第1回

Microsoft PowerPoint - prog04.ppt

Program Design (プログラム設計)

PowerPoint プレゼンテーション

コードテンプレートフレームワーク 機能ガイド 基礎編

VelilogHDL 回路を「言語」で記述する

PowerPoint プレゼンテーション

Microsoft PowerPoint - chap10_OOP.ppt

PowerPoint プレゼンテーション

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

Prog1_10th

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

GSLetterNeo vol 年 7 月 形式手法コトハジメ TLA + Toolbox を使って (2)- 熊澤努 sra.co.jp はじめに GSLetterNeo Vol.130 で TLA + Toolbox を紹介しました 今回からより詳しく T

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

プレポスト【問題】

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

Microsoft PowerPoint - ruby_instruction.ppt

新版 明解C++入門編

オブジェクト指向プログラミング・同演習 5月21日演習課題

Java講座

memo

Prog2_12th

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Java知識テスト問題

4-4- 基スクリプト言語に関する知識 コードの作成や修正が容易とされるスクリプト言語を学習し アプリケーション開発の手法を習得する 本カリキュラムでは まずスクリプト言語に位置づけされる Perl PHP Python JavaScript Ruby といった Ⅰ. 概要プログラミング言語の特徴に

Microsoft PowerPoint ppt

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

Microsoft PowerPoint - prog08.ppt

PowerPoint プレゼンテーション

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

PowerPoint プレゼンテーション

演習1

JavaプログラミングⅠ

デジタル表現論・第6回

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

Microsoft Word - Javacc.docx

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

プログラミング入門1

メディプロ1 Javaサーブレット補足資料.ppt

プログラミング基礎I(再)

PowerPoint プレゼンテーション

Prog1_15th

Microsoft PowerPoint L07-Imperative Programming Languages-4-students ( )

kiso2-03.key

JavaプログラミングⅠ

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

PowerPoint Presentation

メソッドのまとめ

Source Insight

Prog1_2nd

インテル(R) Visual Fortran コンパイラ 10.0

Microsoft PowerPoint - class2-OperatorOverLoad.pptx

7th CodeGear Developer Camp

C#の基本

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

Microsoft PowerPoint - 計算機言語 第7回.ppt

bebras_slide.pptx

基礎プログラミング2015

図 1 アドインに登録する メニューバーに [BAYONET] が追加されます 登録 : Excel 2007, 2010, 2013 の場合 1 Excel ブックを開きます Excel2007 の場合 左上の Office マークをクリックします 図 2 Office マーク (Excel 20

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i

XMLとXSLT

Microsoft PowerPoint - widget.ppt

解きながら学ぶC++入門編

とても使いやすい Boost の serialization

C#の基本2 ~プログラムの制御構造~

PowerPoint プレゼンテーション

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

情報処理Ⅰ


Microsoft PowerPoint - prog03.ppt

Si 知識情報処理

2. 目的 1RationalRose を利用する場合にプログラム仕様書としての最低限必要な記述項目を明確にする 2 プログラム仕様書として記載内容に不足がない事をチェックする 3UML の知識があるものであれば 仕様書の内容を理解できること 4Rose にて入力した内容を SoDaWord を利用

演習2

プログラミング入門1

プログラミング実習I

Transcription:

RDoc を用いた数値モデル のドキュメント生成 森川靖大 ( 北大理 ) 石渡正樹 ( 北大地球環境 ) 堀之内武 ( 京大生存圏研 ) 小高正嗣 ( 北大理 ) 林祥介 ( 北大理 ) /21 1

はじめに 2 /21 ドキュメントの重要性 開発や保守の効率化 ( プログラムの改変 ) ソフトウェアの品質向上 ( プログラムの利用 ) Fortran による数値モデルのドキュメント 数理 離散化ドキュメント :: TeX 数式の記述に最適 リファレンスマニュアル :: HTML Web からの参照に最適 ハイパーリンクが便利

リファレンスマニュアルの作成 3 /21 何が厄介かというと... プログラムとマニュアルを別々に用意するのは面倒 プログラムで書いたものをもう一度書くのは面倒 Java, Ruby には JavaDoc, RDoc があるが Fortran にはドキュメントを自動生成する標準的な方式が無い これまでの工夫の一例 XML を用いた FMS (GFDL) の試み 本研究では RDoc を用いた Fortran ソースコードの自動解析

XML を用いた FMS (GFDL) の試み 4 /21 Fortran95 に XML のドキュメントを埋め込む FMS (Flexible Modeling System: GFDL) で試行 FMS 謹製のツールで HTML へ変換 Fortran95 ソースコード modulemodule_name_mod!<overview>! module_name_mod の概要!</OVERVIEW> implicitnone private public::module_name_init,module_name_end!<subroutinename= module_name_init">!<overview>! モジュールの初期化!</OVERVIEW>!<TEMPLATE>! module_name_init(inchar,outint)!</template>!<inname= inchar TYPE= character >! 文字型の入力変数!</IN>!<OUTNAME= outint TYPE= integer >! 整数型の出力変数!</IN> subroutinemodule_name_init(inchar,outint) character(*),intent(in)::inchar integer(intkind),intent(out)::outint endsubroutinemodule_name_init!</subroutine> endmodulemodule_name_mod!<subroutinename= module_name_init">!<overview>! モジュールの初期化!</OVERVIEW>!<TEMPLATE>! module_name_init(inchar,outint)!</template> :!</SUBROUTINE> XML でコメントを記述する このコメント部分を抜き出し XML から HTML マニュアルを作成

XML を用いた FMS (GFDL) の試み 5 /21 Fortran95 に XML のドキュメントを埋め込む 利点 プログラムとマニュアルを同じファイルで管理 XML により 構造的なマニュアルを作成可能 欠点 XML のタグで Fortran コードが汚くなる XML の手書きは面倒 手続き名や引数をコードとマニュアルで 2 度書く必要あり ソースコード自動解析の必要性

RDoc とは 6 /21 何ぞや? Ruby で書かれたソースコードからドキュメントを自動生成する Ruby の標準ライブラリ Fortran 90/95 の解析も可能 ソースコード解析機構とマニュアル生成機構が分離しているため 他の言語で書かれたソースコードも解析可能 標準で C および Fortran95 用の解析機構が付属 利点 FMS と同様な利点を維持し ( マニュアルのソースへの埋め込み ) 欠点を克服 ( タグの簡素化 2 度書き解消 )

Fortran95 Parser ( オリジナル版 ) 7 /21 Fortran90/95 の文法を解釈 RDoc のタグは XML に比べとても簡潔 別ファイル内のモジュール等へ自動的にリンク作成 Fortran95 ソースコード!=Modulemodule_name_mod:Samplemodule!Authors::YasuhiroMORIKAWA!!Thismoduledependsbase_modmodule! modulesample_mod usebase_mod implicitnone private public::sample_init,sample_end,const real(8)::const=3.14 subroutinesample_init(inchar,outint) character(*),intent(in)::inchar integer(intkind),intent(out)::outint endsubroutinesample_init subroutinesample_end(err) logical,intent(inout)::err endsubroutinesample_end endmodulesample_mod!=module..!authors::.. 1 usebase_mod 2 : modulemodule_.. : subroutinemo.. : endsubrou.. endmodulemodu.. 1 RDoc のタグは = や :: で表記 2 module 文, use 文, subroutine 文を解釈 別ファイルのモジュールへのリンクを自動で作成

Fortran95 Parser ( オリジナル版 ) 8 /21 Fortran90/95 の文法を解釈 RDoc のタグは XML に比べとても簡潔 別ファイル内のモジュール等へ自動的にリンク作成 Fortran95 ソースコード!=Modulemodule_name_mod:Samplemodule!Authors::YasuhiroMORIKAWA!!Thismoduledependsbase_modmodule! modulesample_mod usebase_mod implicitnone private public::sample_init,sample_end,const real(8)::const=3.14 subroutinesample_init(inchar,outint) character(*),intent(in)::inchar integer(intkind),intent(out)::outint endsubroutinesample_init subroutinesample_end(err) logical,intent(inout)::err endsubroutinesample_end endmodulesample_mod Rdoc Files sample.f90 base.f90 Class sample_mod In: sample.f90 [source] sample_end (err) [source] HTML のリファレンスマニュアル Classes sample_mod base_mod Module sample_mod : Sample module Authors: Yasuhiro MORIKAWA This module depends base_mod module Methods sample_init sample_end Included Modules base_mod Public instance methods sample_init (inchar, outint) Methods sample_init sample_end a a a ハイパーリンク

Fortran95 Parser の問題点 9 /21 解析機能の不足 サブルーチンの引数の型を表示できない

Fortran95 Parser の問題点 10 /21 解析機能の不足 サブルーチンの解説コメントを表示できない

Fortran95 Parser の問題点 11 /21 解析機能の不足 public, private を区別できない (( 全て public 扱いになる ))

Fortran95 Parser の問題点 12 /21 解析機能の不足 そもそも表現できない要素いろいろ 関数 関数 (function 文 )) モジュールが公開する変数,, 定数定数 構造体 (type 文 )) 利用者定義演算子 (operator) 利用者定義代入 (assignment) 総称手続き (interface 文 )) etc etc

問題点の解決に向けて 13 /21 開発者 メンテナに連絡 森川 こうなると嬉しいのだけど と連絡 開発者 メンテナさんに連絡しておいたよ メンテナ やってみてくれます? 森川 (T_T) しょうがないので (?) 自力で改造 見た感じで足りないと思うところから五月雨的に解析機能追加

Fortran95 Parser ( 強化版 ) 14 /21 構造体の解析 要素 要素の型 解説の表示

Fortran95 Parser ( 強化版 ) 15 /21 定数の解析 型 初期値 解説の表示

Fortran95 Parser ( 強化版 ) 16 /21 関数の解析 解説の表示

Fortran95 Parser ( 強化版 ) 17 /21 引数の解析 型 解説の表示

Fortran95 Parser ( 強化版 ) 18 /21 public, private を区別

Fortran95 Parser ( 強化版 ) 19 /21 変数の解析 型 初期値 解説の表示

まとめ 20 /21 RDoc の Fortran95 Parser を改良 数値モデルのドキュメントを簡単に自動生成 モデルを渡す, もらう, 久しぶりに見直すときに是非 (?) 強化版パッチの公開アドレス /library/dcmodel パッチを当てたパッケージ コメントの書法等の解説 メンテナの依頼によりパッチを送付 そのうち Ruby 本体に取り込まれる予定 ( たぶん ) 使用例 /library/gtool4

参考資料 21 /21 数値モデリングプロジェクト dcmodel /library/dcmodel/ オブジェクト指向スクリプト言語 Ruby http://www.ruby-lang.org Fortran からドキュメントを自動生成するツール f90tohtml http://mensch.org/f90tohtml/ f90doc http://theory.lcs.mit.edu/~edemaine/f90doc/ 惑星大気モデル DCPAM /library/dcpam/ FMS (Flexible Modeling System) http://www.gfdl.noaa.gov/~fms/ The FMS Manual http://www.gfdl.noaa.gov/~vb/fmsmanual/

付録 /21 22

XML を用いた FMS (GFDL) の試み 23 /21 Fortran95 に XML のドキュメントを埋め込む FMS (Flexible Modeling System: GFDL) で試行 FMS 特製のツールで HTML へ変換 Fortran95 ソースコード modulemodule_name_mod!<overview>! module_name_mod の概要!</OVERVIEW> implicitnone private public::module_name_init,module_name_end!<subroutinename= module_name_init">!<overview>! モジュールの初期化!</OVERVIEW>!<TEMPLATE>! module_name_init(inchar,outint)!</template>!<inname= inchar TYPE= character >! 文字型の入力変数!</IN>!<OUTNAME= outint TYPE= integer >! 整数型の出力変数!</IN> subroutinemodule_name_init(inchar,outint) character(*),intent(in)::inchar integer(intkind),intent(out)::outint endsubroutinemodule_name_init!</subroutine> endmodulemodule_name_mod HTML のリファレンスマニュアル Modulemodule_name_mod OVERVIEW OVERVIEW module_name_end の概要 module_name_end の概要 PUBLICINTERFACE PUBLICINTERFACE module_name_init: module_name_init: モジュールの初期化モジュールの初期化 PUBLICROUTINES PUBLICROUTINES a.module_name_init a.module_name_init callmodule_name_init(inchar,outint) callmodule_name_init(inchar,outint) INPUT INPUT inchar 文字型の入力変数 inchar 文字型の入力変数 [character] [character] OUTPUT OUTPUT outint 整数型の出力変数 outint 整数型の出力変数 [integer] [integer]

RD を用いた我々のこれまでの試み 24 /21 Fortran95 に RD 形式のコメントを埋め込む rdtool によって RD を HTML に変換 Fortran95 ソースコード!=Modulemodule_name_mod:Samplemodule!*Developers:YasuhiroMorikawa!==Overview!module_name_mod の概要 modulemodule_name_mod implicitnone rdtool!==publicinterface private public::module_name_init,module_name_end!=begin!=end!=begin HTML のリファレンスマニュアル 1 2!==ProcedureInterface!===Subroutinemodule_name_init: モジュールの初期化!NAMELIST を入力し グローバル変数を allocate する subroutinemodule_name_init(inchar,outint,inoutdata)!====input character(*),intent(in)::inchar!====output integer(intkind),intent(out)::outint!=end endsubroutinemodule_name_init endmodulemodule_name_mod

CodeObject 25 /21 ソースコード内の情報を階層的に保持するためのオブジェクト CodeObject : 共通する情報 TopLevel : ファイルの情報 ClassModule : クラス モジュールの情報 AnyMethod: メソッドの情報 継承の関係 CodeObject TopLevel ClassModule AnyMethod

ソースコード CodeObject 26 /21 ソースコード内の情報を TopLevel, ClassModule, AnyMethod へ 個々のファイル毎に クラス モジュール メソッドの定義 クラスの継承関係 クラス モジュールの依存関係を抽出 Source code Parsers TopLevel ClassModule ClassModule AnyMethod AnyMethod AnyMethod AnyMethod TopLevel ClassModule AnyMethod AnyMethod AnyMethod TopLevel

CodeObject マニュアル 27 /21 HTML 等のドキュメントを生成 TopLevel ClassModule ClassModule AnyMethod AnyMethod AnyMethod AnyMethod TopLevel ClassModule AnyMethod AnyMethod AnyMethod TopLevel XML XML Generators HTML HTML Reference manual 全てのオブジェクトを集約した後 リファレンスマニュアルを生成

Fortran95 Parser ( 強化版 ) 28 /21 解析機能の強化の具体例 Fortran95 ソースコード!=Modulesample_mod:Samplemodule!Authors::YasuhiroMORIKAWA! modulesample_mod usebase_mod!!sample_mod の概要 implicitnone private public::sample_init,sample_func,const,type_a private::internal typetype_a! 構造体の解説 integer::counter endtypetype_a! 構造体内部の変数の解説 real(8),parameter::const=3.14! 公開定数 integer,save ::internal! 非公開変数 subroutinesample_init(inchar,outint)! 初期化サブルーチン character(*),intent(in)::inchar! 入力変数 integer(intkind),intent(out)::outint! 出力変数 endsubroutinesample_init functionsample_func(log)result(res)! 関数 logical,intent(in)::log! 論理型入力変数 logical ::res! 論理型の返り値 endfunctionsample_func endmodulesample_mod public::samp... 1 private::inte... typetype_a... 2 real(8),parame.. 3 Integer,save..! 初期化初期化...... 4 char..! 入力入力 5.. integer..! 出力出力.... functionsamp... 6 : endfunction.. 1 公開要素と非公開要素の区別 2 構造体 3 公開定数 公開変数 4 サブルーチン 関数のコメント 5 引数の型 コメント 6 関数

Fortran95 Parser ( 強化版 ) 29 /21 解析機能の強化 解析可能になった要素のリスト 関数 (function 文 ) サブルーチンや関数の引数の型 モジュールが公開する変数, 定数 構造体 (type 文 ) NAMELIST 文 利用者定義演算子 (operator), 利用者定義代入 (assignment) 上記要素のコメント文 総称手続き (interface 文 ) 公開要素と非公開要素との区別 孫引きされている公開要素 大文字小文字の違いを無視

RD を用いた我々のこれまでの試み 30 /21 Fortran95 に RD 形式のコメントを埋め込む RD を用いることでタグが簡潔に rdtool によって RD を HTML に変換 Fortran95 ソースコード!=Modulemodule_name_mod:Samplemodule!*Developers:YasuhiroMorikawa!==Overview!module_name_mod の概要 modulemodule_name_mod implicitnone!==publicinterface private public::module_name_init,module_name_end!=begin!=end!=begin!==procedureinterface!===subroutinemodule_name_init: モジュールの初期化!NAMELIST を入力し グローバル変数を allocate する subroutinemodule_name_init(inchar,outint,inoutdata)!====input character(*),intent(in)::inchar!====output integer(intkind),intent(out)::outint!=end endsubroutinemodule_name_init endmodulemodule_name_mod 1!=begin ~!=end の部!=begin 1 分をマニュアルに反映 :!=end!=end 2コメントには RD の文!=Module.. 2!*Develop.. 法を利用 見出しやリス!==Overview トは = や * で簡潔に表現 3!=begin : subroutine.. 3 引用仕様 ( 引数の名前 char..,int.. と型など ) に関するソー : スコードをそのままマ!=end!=end ニュアルへ

RD を用いた我々のこれまでの試み 31 /21 Fortran95 に RD 形式のコメントを埋め込む 利点 ソースとマニュアルとで 2 度書く手間を軽減 XMLタグと比較してソースが汚れない 欠点 モジュール間の依存関係を解釈不能 複数のファイルを同時に解析しないと不可能 ソース内のタグ ( =begin 等 ) はやっぱりそれなりに汚い ソースコード自動解析の必要性

RDoc によるドキュメント生成の流れ 32 /21 RDoc Generators HTML HTML Generator Generator XML XML Generator Generator CodeObject ソースコード マニュアルの形式に依らないオブジェクト Parsers Ruby Ruby Parser Parser C Parser Parser Fortran95 Fortran95 Parser Parser XML XML Reference manual HTML HTML Source code F95 F95 Ruby Ruby C C