ganbaruprogrammer

プログラマー、がんばる

VB6のコードリーディングのためにやったあれこれ(2018年版)

VB6で書かれたコードを読む必要があったので頑張ってみた記録

前提

サクラエディタ

シンタックスハイライトが効いているのでなんとか読めるが
コメントアウトされたコードの残骸が多く辛い。

関数にぴょんぴょん飛びたいのでctagでタグジャンプを試したがうまく行かなかった。
最終的にはgrepのちから技で解決。

Visual Studio Code

もうちょっと現代風な感じでコードを見てみたかったので試した。

やはりと言うかなんというか、先駆者を発見したので全力で乗っかる
VSCodeのシンタックスハイライトと拡張子の関連付け - 頭ん中

プロジェクトフォルダごと取り込んで
串刺し検索するとそこそこいい感じにはなった。

Visual Studio + (拡張)

VisualStudio でソースコード変換系(VB6→VB.NET)の記事が多く引っかかるが
おもしろい拡張が見つかったのでご紹介

Visual Studio のMarketplace から以下の拡張を入れることで
VB6のプロジェクトのまま Visual Studio で開くことができる

この拡張を入れることによってできることは意訳すると
だいたいこんな感じ

できる/使える

できない/使えない

  • 定義へジャンプ
  • フォーム デザイナ 画面
  • Visual Studio 単体でのコンパイル
    (ただし、VB6開発環境がインストールされている場合はPath指定してコンパイルできる様子、未検証)

定義へジャンプができないのがおしい
でも、コードがめちゃくちゃ長いと関数単位で閉じる機能だけでも便利かもしれない。

おまけ

これのサクラエディタ版か Mery版あたりのやつがあれば便利かもしれない
VB6のソースを Javaっぽく変換する秀丸マクロ

ブロッキングチェーンを勉強しています。

仮想通貨とか分散型台帳技術の方が検索で引っかかるけど
それとはちょっと違う話。

What is "ブロッキングチェーン"?

SQLServer でちょいちょい起こるロック待ちの連鎖のこと。
SQLServer の ロック思想上、ロック待ちは必ず発生するのでそれ自体は問題ない。 が、長いこと リソースをロックされているといろいろ困る、というかすごい困ってる。

すべてはロック思想の違いによる

このあたりの挙動は同じく商用DBである Oracle と比べると理解しやすい。

以下、いろいろ参考記事
* DBMSのロック・分離戦略と同時実行制御 - マイクロソフト系技術情報 Wiki
多バージョン法とロック法の項目を参照

READ COMMITTED   ・・・   COMMIT 済みのデータだけを読み取る
SQL Server および Oracle のデフォルト設定

トランザクション分離レベルが"Read Commited"の場合 例えば、あるテーブルに対してデータ更新中のときにデータ参照を行うと

SQLServer の場合 データ更新中?てことはコミットが済んだらそいつが最新データか。よっしゃちょっと待っとくわー
Oracleの場合 データ更新中?まぁでも既にコミット済みのあるじゃん、もらってくよー

といった感じの動きになる。

まとめ

snapshot オプションを ONにするとOracleぽい挙動になるとか 最近のSQLServer だとインメモリでよろしくできるらしい。
でも、ほいほいオプション変えたりバージョン上げたりは難しいので
更新系のトランザクションを短くするとか
ロックタイムアウト値を設定するなどでがんばるしかない。頑張る。