トップ «前の日記(2019-12-12) 最新 次の日記(2019-12-20)» 編集

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

2019-12-17 [長年日記]

_ [SAD]range check

rlist pointerのrange更新コードを追加したので、添字検査を有効にして試してみたが、色々あってまともに添字検査が出来ない罠

  • ilist(i, addr)系の参照でiが走るループが引っかかる
    • 領域は割付済みだが、Fortran配列の添字的には境界外なのも事実
    • ローカルにpointer参照を割り付けるのがFortran的には正しい?
  • シンボル・文字列処理回りで、長さ付きcharacter・characterの配列・C_INT8_T配列を同一視して受け取るAPIが引っかかる
    • 特に別の型に複製する部分が酷いことになる
    • interface宣言付きで、コンパイル時にtype dispatchする or C_LOC経由で明示的に memcpyに渡す
      • C_LOCを使う場合、target属性が必要(面倒くさいことに)
  • 無効参照(addr = 0な参照)のdereferenceを渡しているケースがある
    • 例えば、non-real typeなSAD objectに付随するrval部の参照
    • 正しくハンドルするには、参照の差し替え or type dispatchして即値渡しなので、conditional branchが増える
      • 3項演算子が無いので、コードが太る
      • C++のように、右辺値・左辺値を区別したoverloadが出来ないので、参照側で透過的な扱いが出来ない
      • 参照の生ポインタを透過的に渡すのであれば、NULLテストでおしまいなのだが…

一応、typo等に伴う無効参照等のバグが何件かかかっているので、無駄ではないがすぐに修正出来ない部分のrange checkを無効化するコストが高いのが難


カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記