[質問]メインのビルド環境についてNo.38959
fzok4234 さん 21/05/24 08:46
 
おはようございます。

現在、秀丸エディタの動作環境にWindows 98/Me/NT4.0などの古いOSが含まれており
ますが、ビルドに
用いるVisual Studioはどのバージョンを用いられているのでしょうか?

調べてみると、Windows 98/Me/NT4.0で動作するバイナリをコンパイルできるC/C++コ
ンパイラの最後の
バージョンがVisual C++ 2005とのこと(cf.
https://ja.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#%E8%A3%BD%E5%93%81%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%A8%E5%86%85%E9%83%A8%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3
)です。もしかして、これほど古い開発環境を未だにメインのコンパイラとして使用
しているために最新の
・C/C++標準関数。
・Windows API。
・サードパーティのライブラリ。
などが使用できない状態に陥っていて、その結果、以下のような良くない事例が多数
存在しているのでは
ないでしょうか?

 A. ユーザーからの機能の追加/改善の要望を「これは仕様とします。」などと述べ
てやんわりと断って
    しまったり、「対応できないことを誤魔化す」意図でユーザー側でのマクロの実
装例を提案した。
 B. 把握しているが修正困難な不具合が存在しており、いつ顕在化してもおかしくな
い「時限爆弾」と
    なっている。
 C. モダンなテキストエディタに求められる最新技術を実装できない。例えば、
      ・Language Server Protocolなどの言語パーサ呼び出しを用いた強調表示や単
語補完など。
      ・よく使う定型句を自動入力するコードスニペット機能。
    などといった機能を実現できず、ライバルのエディタに差をつけられてしまう。
特に近年はMicrosoftの
    高機能エディタ「VS Code」が急激にシェアを伸ばしており、これを追いかける
他の零細エディタに
    先陣を切られて秀丸エディタ側が大きく後れを取るリスクがある。
 D. 一般的なアプリで近年行われている機能/仕様のモダン化ができない。例えば、
      ・特にx64版秀丸エディタにおいて内部で扱う整数値やメモリ容量の64bit化。
      ・各種バッファにおいて、固定長配列やmalloc()したヒープ領域へのポインタ
加算によるアクセスを
        廃止してstd::vectorなどに置き換えて、バッファオーバーフローのリスク
を無くすとともに
        固定長バッファを可変長バッファに改善する。
      ・各種設定ファイルの形式にXMLやJSONといった階層ツリー構造で各種処理系
で操作可能な規格を
        採用する。
    などを実行できない。
 E. コードのリファクタリングなどが進まず開発体制における時代遅れなアンチパ
ターンを放置している。
    例として
      ・固定長バッファサイズなどの数値定数の同一値を複数個所に直接ハードコー
ドする。
      ・似たような手続きやオブジェクトを汎用的な単一の関数やクラスとして実装
せずに「コピペして
        改変」で済ませる。
      ・現在では使用が推奨されず将来廃止される恐れのあるObsoleteAttributeな
標準関数やAPIを使用し
        続ける。
    などが平然と行われている。
 F. レガシーな関数/APIやデータ書式しか使えない状態で時代の変化に伴う秀丸エデ
ィタのモダン化を行う
    ために、
      ・レガシー関数/APIだけで無理やり新機能を実装したため歪なコーディングと
なりコードの可読性や
        保守性が悪くなった。
      ・内部データ書式をShift-JISエンコードなどの既存のレガシー書式を無理や
り拡張した独自書式に
        したため、UTF-16エンコードなどの規格化されたモダン書式と違ってフレー
ムワークやOSによる
        サポートがないために、この書式のパーサを自前で実装したものの不具合が
頻発して「四角い
        車輪の再発明」状態となった。
    という犠牲を強いられている。

もちろん、Windows 98などのレガシーOSは工作機械の制御などの目的で未だ現役使用
されている現場が
あるため、そのサポートを打ち切るわけにはいきません。しかし、そのためにレガ
シーコンパイラで
秀丸エディタをビルドし続けて開発体制のモダン化を犠牲にすることは決して良いこ
ととは思えません。
なぜなら、このことにより時代の変化に伴う機能の追加/改善が困難となり、結果的に
・レガシーOSを使用する極少数のユーザーを守るために、少なくともWindows 7以降
のモダンOSを使用する
  大多数のユーザーを犠牲にする。
という民主主義社会においてあるべからざる状況につながるからです。

理想としては、最新のVisual Studio 2019をメイン開発環境にして最新技術に対応で
きる体制を保ちつつ、
ビルド時にレガシーOSでも動作可能なバイナリを生成できるよう注意を払って、
・モダンOSユーザーにもレガシーOSユーザーにも平等に利益をもたらす開発体制をと
っている。
と堂々と公言できるようにすることだと思うところでございます。



[ ]
RE:38959 [質問]メインのビルド環境についNo.38960
でるもんたいいじま さん 21/05/24 09:40
 
でるもんた・いいしまです。

ちょっとこころところコロナ関連の問題でフラストレーションがたまっているので、
キツい言葉になるかもしれませんがご容赦ください。

一言でいえばこのすべてのご提案

「余計なお世話です。」

VS codeを使いたい人がいれば使えばいいし、秀丸はコーディング専用のアプリでは
ないし、そもそも秀丸のユーザーが今すぐ指数関数的に減っていくという見通しもあ
りません。

> 固定長配列やmalloc()したヒープ領域へのポインタ加算によるアクセスを
> 廃止してstd::vectorなどに置き換えて、
> 固定長バッファを可変長バッファに改善する。

それがどれだけ高いコストを要する作業なのか全く理解する頭がない時点で、議論の
余地はありません。
短期的には大量のエンバグを生んで、迷惑がかかるでしょう。
みずほ銀行が今のシステムに行きつくまでの30-40年間の歴史をきちんと学ぶだけで
も、いくらでも教訓は得られるはずです。

ありにおっしゃるようなものを作るとしたら、「新秀丸エディタ」なる新しいアプリ
をスクラッチから作り直して、動作環境はWindows 10のx64版のみ、としないと安心
して「旧」のほうを使えません。

とすると、価格は1ヶ月千円、問い合わせ1件につき追加料金数千円(新秀丸のバグと
判明した場合でも補償なし)、のサブスクリプションにでもしないと開発資金は到底
賄えません。

fzok4234さんが音頭を取って新しい会社を作って、秀丸のシェアを食いに行くつもり
でエディタを作ったらどうですか?

私の目には、安全地帯からヤジを飛ばしているだけのように思います。

[ ]
RE:38959 [質問]メインのビルド環境についNo.38965
でるもんたいいじま さん 21/05/24 10:48
 
でるもんた・いいじまです。

各論。

> 調べてみると、Windows 98/Me/NT4.0で動作するバイナリをコンパイルできる
> C/C++コンパイラの最後のバージョンがVisual C++ 2005とのこと

「設定をいじらずに」コンパイルできる最後のバージョンが2005ですね。
あとはランタイムライブラリのDLL次第ですか。

>  B. 把握しているが修正困難な不具合が存在しており、
> いつ顕在化してもおかしくない「時限爆弾」となっている。

具体的には?

>  C. モダンなテキストエディタに求められる最新技術を実装できない。例えば、
>  ・Language Server Protocolなどの言語パーサ呼び出しを用いた強調表示や
> 単語補完など。
>  ・よく使う定型句を自動入力するコードスニペット機能。
>  などといった機能を実現できず、

そんなものはVisual C++のバージョンとは無関係ですが?
極論、MinGW派の人は自前でそういうライブラリを用意して対応しているわけです。

LSPもスニペットも確かに有用ですが、今まで秀丸を使ってきた人たちの感覚からす
れば「辞書の類はパブリックなものがあると大いに助かるが、書式についてはマクロ
で自分の好みにカスタマイズできなければ論外どころか有害」です。

私なんか、Excelのマクロを書いていてもいちいちエラーのモーダルダイアログが出
るのが我慢ならないのですよ。

あるいはLSPでいうと、閉鎖された環境でアプリが勝手に外部と通信をされては困る
ケースも多々あるわけです。機密保持のためコーディング用のPCは特定のサイトを除
きWebブラウジング禁止、なんていう運用のオフィスも結構あるわけで。

> ライバルのエディタに差をつけられてしまう。

その話は解決済。

> D. 一般的なアプリで近年行われている機能/仕様のモダン化ができない。

「一般的なアプリ」の定義は?
「近年」とは具体的に何年から?
漠然と「自分の脳内常識は世界全体の公理」という態度で議論を吹っ掛けてくること
に対して我慢がならないのですよ。(ちょっとここのところ色々とあるので…。)

> ・特にx64版秀丸エディタにおいて内部で扱う整数値やメモリ容量の64bit化。

Windows自体がそもそも32bitアプリのために無茶をしています。
UNIX系OSでは「32bitバイナリのみで提供されるアプリ・ライブラリ以外はすべて64b
itでビルドしなおす」という方向に走りましたけど、Windowsでそれはできません。
OSがギリギリまで互換性を確保し続けようとしている時点で、そちらと折り合いをつ
けていくことが最優先です。

#というか、35年前のバイナリの動作が条件付きながらも今のOSの
#カーネルでサポートされている、という時点で、Microsoftの
#基本的な姿勢は「互換性を重視し、需要が十分少なくなって
#移行先が確定したものを切り捨てる」です。

> ・各種バッファにおいて、固定長配列やmalloc()したヒープ領域への
> ポインタ加算によるアクセスを廃止してstd::vectorなどに置き換えて、

まず、性能の件はそんなに問題にはならないということを前提にしますね。仮に問題
になるとすれば、重い部分の内側だけを生ポインタでゴリゴリ最適化して、その計算
を関数なり演算子なりの形でカプセル化してしまうだけのことですから。

でも、「データの内部構造を完全に新しくする」ということがどれだけハイリスクだ
かわかっていますか?コードを書き換えて、コンパイラの型チェックでエラーもウ
ォーニングも出なかったからはい安心、とはいきませんよ。

> バッファオーバーフローのリスクを無くすとともに
> 固定長バッファを可変長バッファに改善する。

それは「これから新規の機能を追加する場合」「どこかで何かが問題になった場合」
の話。

それと、たとえば何かの文字列データをchar[](あるいはWCHAR[])ではなくstd::st
ringで保存したからハイ安心、という発想は秀丸にはありません。マクロでもDLLで
も何でもいいですが、意図的にこの変数にGB単位の巨大データを突っ込んで、アプリ
側で完全にその可能性をノーチェックだったとすれば、アプリのハングアップ、DoS
アタックのリスクを背負います。

char[]とstd::stringとどちらが効果的か、というのはケースバイケースで決める話
です。

> ・各種設定ファイルの形式にXMLやJSONといった階層ツリー構造で
> 各種処理系で操作可能な規格を採用する。
> などを実行できない。

これも実現すること自体はコンパイラとは関係ありません。
もしコンパイラの標準ライブラリにその機能がなければフリーのものを持ってくるだ
けです。

問題は「既に内部構造として固定長バッファやハードコードの構造体などが使われて
いるものが多数あり、それらを無防備にJSONへ置き換えるのは無理」という話です。

先日ご要望があった「レジストリに保管されている内容を編集したい」ということだ
けであれば、既存の秀丸のパッケージにバンドルする形で「レジストリに入っている
データ」「設定バックアップで書き出したレジストリ形式のデータ」「手作業で編集
可能なJSON等のデータ」の相互変換ツールを別途作ってもらえばそれで済む話です。

その話であれば、いったんfzok4234さんが現状のレジストリの仕様を担当さん(秀ま
るおさん?)から開示してもらって、その仕様を前提にした変換ツールを実際にfzok
4234さんが作ってみてはいかがですか?そのバイナリを「ベータ版」として一般公開
してみて、好評であればサイトー企画さんのほうでWindows 9x/NT対応のための最低
限の修正を入れてもらってサイトー企画名義で公開、と。

>  E. コードのリファクタリングなどが進まず開発体制における
> 時代遅れなアンチパターンを放置している。

これは完全にfzok4234さんの邪推ですよね?

>  F. レガシーな関数/APIやデータ書式しか使えない状態で時代の変化に伴う
> 秀丸エディタのモダン化を行うために、

まあ、これは事実です。

>  ・レガシー関数/APIだけで無理やり新機能を実装したため歪なコーディング
> となりコードの可読性や保守性が悪くなった。

あの…「ラッパー」という概念をご存じない?

たとえばマクロのmessage文、最近の環境であれば表示すべき文字列はUTF-16LEに変
換されて、MessageBoxW() で処理されるはずです。一方で、Windows98であれば、Uni
code文字を '?' などに潰した上で MessageBoxA() を呼ぶはずです。

この時どうするかというと、賢い人はこんな関数を用意するわけです:
DWORD hmMessageBoxT(char *msg, 以下略)
{
 if (fpMessageBoxW)
 {
  UTF-16に変換 // もちろんそういう関数は別途存在する
  return fpMessageBoxW(略)
 }
 else
 {
  Unicode文字を潰す関数で処理 // この関数も別途存在する
  return ::MessageBoxA(略)
 }
}

秀丸の内部にはおそらく、こういうラッパーが大量に用意されているはずですよ。

> ・内部データ書式をShift-JISエンコードなどの既存のレガシー書式を
> 無理やり拡張した独自書式にしたため、

これは歴史的に仕方のないことです。何度も指摘していますが、一度決めた内部構造
を途中で変えることがどれだけ大変なのか、全く分かっていないように思えます。

> UTF-16エンコードなどの規格化されたモダン書式と違って
> フレームワークやOSによるサポートがないために、

「フレームワーク」が一体何を示すのか分からないのでそれは置いておくとして、OS
によるサポート。
もし「UTF-16になってさえいればOSの機能が使える」ということなら、堂々と使えば
いいだけのことです。でも使わないのは、「特定の時期以降のOSでないと使えない機
能を標準で要求するのは望ましくない」という考えがあるからだと私は考えています。

> この書式のパーサを自前で実装したものの不具合が頻発して
> 「四角い車輪の再発明」状態となった。

自前がダメなら、フリーなライブラリをカスタマイズして使えばいいだけのことです
ね。
それに、既存の車輪が欠陥品でないという保証だってどこにもありませんよ。 
実際、秀丸の内部には「OSやそのモジュールの不具合に対応するためのトリック」が
優に100件くらいは組み込まれているはずです。

☆ ☆ ☆

ここのところ連日のfzok4234さんの要求を拝見していると、「全く同じ外見、同じ動
作、同じ安定性で、ただし内部構造の全く違うものをスクラッチから、しかもタダで
作れ」という無茶振りをしているようにしか思えません。

[ ]
RE:38960 [質問]メインのビルド環境についNo.38966
秀丸担当 さん 21/05/24 10:51
 

いろいろご心配ありがとうございます。
開発環境については、確かに32bitWindows9xで動作させる関係から古いものを使って
いたりします。
この件だけではないですが、変更するといろいろ動かなくなることは今までにもあっ
て、簡単にはいかないところもあって、かなり慎重になります。
Windows9xのサポートは無くしていきたいところです。
個人的にはバージョン番号が9に近いので、そのタイミングでxp以降としてもいいか
もしれないと思っています。

[ ]
RE:38966 [質問]メインのビルド環境についNo.38967
秀まるお2 さん 21/05/24 11:00
 
 追加でコメントさせていただきますが、一応、最新のビルド環境でないとダメな
ケースでは、その部分だけ別DLLでビルドして対応してる所もあります。最近だと秀
丸メールでのEdgeブラウザのウィンドウ部品(WebView2コントロール)を使う所を別
DLLにしてたりします。

 さらに別件ですが、以前話のあった、HmJre.dllでの「\g<NAME>」関係の対応を今
やってまして、一応、それなりに動く段階にはなりました。

 \g<NAME>が(?<NAME>....)の中にネストして入るパターンも対応しています。

 \k<NAME+level> のようなタグ指定は今のところ対応できなさそうです。

 HmJre.dllの場合、元々、((a+)+)+ のような多重ネストの繰り返しパターンが非常
に重い問題があったんですが、これも改善して、手元のバージョンでは鬼車と同じ程
度の速度で動くようになった所ではあります。ただ、本当に大丈夫かどうか動作検証
が必要で、それに時間がかかりそうではあります。

[ ]
RE:38959 [質問]メインのビルド環境についNo.38968
Iranoan さん 21/05/24 16:00
 
fzok4234 さんこんにちは、Iranoan です
> 調べてみると、Windows 98/Me/NT4.0で動作するバイナリをコンパイルできるC/C++
>コンパイラの最後の
> バージョンがVisual C++ 2005とのこと(cf.
> https://ja.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#%E8%A3%BD%E5%93%81%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%A8%E5%86%85%E9%83%A8%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3
> )です。もしかして、これほど古い開発環境を未だにメインのコンパイラとして使
>用しているために最新の
> ・C/C++標準関数。
> ・Windows API。
> ・サードパーティのライブラリ。
> などが使用できない状態に陥っていて、その結果、以下のような良くない事例が多
>数存在しているのでは
> ないでしょうか?
長いので、以下バッサリ切りました

本題ですが、私はもちろん開発サイドではありませんが、おそらく fzok4234 さんの
問題提起は主客逆転しています
古い開発環境を使っているから最新機能が取り込めないのではなく、古い環境で使い
続けているユーザのために、開発側は古い開発環境を使い続けていた思います
※以前そんな書き込みを見た気がするが見つけられない

私個人としては、MS もサポートを切った古い OS はサポート対象から外してもよい
のではないか? とは思いますが、これは原則、実際にサポートをする開発側が決める
ことだと思います

またユーザー側の意見として「もっと最新のモダンなエディタを使いたい」という要
望を出すのは結構なことだと思います
しかし現実として、そのような書き込みをここで見ることはあまりないんですよね

最後に、fzok4234 さんの書き込みは、内容的に難度が高いです
このことから、fzok4234 さんの秀丸歴がどの程度か解りませんが、それとは関係な
く、ここではなく常連さん用の場
・xxxxxxxxxx@maruo.co.jp
・https://www.maruo.co.jp/turukame/3/index.html
のほうが適切だと感じます


---以下の内容はコミュニテックス会議室システムにより付加されました。
本文中のメールアドレスは伏せ字に変換されました。伏せ字にしたくない場合
はメールアドレスを""で囲んで書き込んでください。

[ ]
RE:38966 [質問]メインのビルド環境についNo.38969
Iranoan さん 21/05/24 16:03
 
Iranoan です
先の書き込んでから気がついたのですが、
> 開発環境については、確かに32bitWindows9xで動作させる関係から古いものを使っ
>ていたりします。
> この件だけではないですが、変更するといろいろ動かなくなることは今までにもあ
>って、簡単にはいかないところもあって、かなり慎重になります。
> Windows9xのサポートは無くしていきたいところです。
やはりそうだったんですね(^_^;

[ ]
RE:38966 年寄りの与太話 Re; [質問]メイNo.38970
でるもんたいいじま さん 21/05/24 17:38
 
でるもんた・いいじまです。

> Windows9xのサポートは無くしていきたいところです。
> 個人的にはバージョン番号が9に近いので、そのタイミングで
> xp以降としてもいいかもしれないと思っています。

そうですね、XPはまだまだ外せないと思います。

基本、Microsoftのライフサイクル計画では「製品の初出から10年が寿命」とされて
いますが、実際の現場ではOSの初出から8-9年目くらいにマシンを新調してその古いO
Sを入れて(たとえば業務用アプリの新OS対応が間に合わないとかの理由で)、その
ままハードウェアの物理的耐用年数である10年から15年を経過し…ということはよく
ある話です。

Windows 98は初出から既に23年が経過していますし、今となっては工場用途以外では
ほぼ使い物にならない性能ですし、まだ使っている人たちも「そろそろ潮時」と考え
てもらったほうがいいかもしれません。

☆ ☆ ☆

となると気になるのが、最終バージョンになるV8.99の内部的なバージョン番号です
が、今までの慣例を破ることを提案させてください。

今まで、秀丸のバージョン番号は内部的には5桁の10進数で、「下2桁がベータの版数
を表し、ここが99なら正式版」というルールでした。つまり89901、89902、…が899b
1、b2…を表すことになって、8.99正式版は内部的には89999を充てることになります。

これを8.99に限っては「89900が8.99の初出(表記も8.99.00とする)、以後不具合修
正のみのサポート継続として、修正が出るごとに89901、89902、…とし、数年にわた
って本当に何も修正がなければ正式にサポートを打ち切って以後89999までは欠番」
とするのがいいのではないかと思いました。

MicrosoftからのWindows 4.x 向けパッチなんてもう新規の公開はないはずで、まさ
かバグなんか残っていないと信じたいところですが…。

☆ ☆ ☆

以下余談

ちなみにこのWindows 4.x向けパッチ、近いうちにネイティブ環境でのダウンロード
もできなくなる見込みです。
Windows Updateのサーバに近々TLS1.2を導入する予定だけど、対象のOSはネイティブ
でTLS1.2に対応していないため、ダウンロードしに行こうにもhttpsセッションが張
れない、という事態になるそうです。

最近のOSでもIEのTLS1.2対応は遅くて、Windows7はパッチ適用+レジストリ書き換え
でやっと対応。XP 32bitは組み込み用バージョン(「POSReady」という商品名なので、
商店のレジ周り一式の機能を提供するのかな?)のサポートが今でも続いているので
それ用のパッチを強引に一般のXPマシンにも導入可能、です。

[ ]
RE:38965 [質問]メインのビルド環境についNo.38972
fzok4234 さん 21/05/25 05:27
 
一応申し上げておきますが、今回の投稿はあくまで
 1. ヘルプのページ
    https://help.maruo.co.jp/hidemaru/html/030_Install.html
    に掲載されている秀丸エディタの構成ファイル群のうち、.exeや.dllといった実
行可能な各PEファイルの
    コンパイルを、それぞれどのバージョンのVisual Studioで行っているかを知り
たい。
 2. もし仮に古いコンパイラを使っていれば発生しうるA〜Fの問題を例として挙げ、
この各問題が現時点で
    本当に発生していないかどうかを知りたい。
ということを示した、あくまで
・質問
であり、秀丸エディタの悪いところを一々に列挙して今すぐ改善するよう求める
・要望
・不具合報告
ではありません。また、後半の
> しかし、そのためにレガシーコンパイラで
> 秀丸エディタをビルドし続けて開発体制のモダン化を犠牲にすることは決して良い
>こととは思えません。
> なぜなら、このことにより時代の変化に伴う機能の追加/改善が困難となり、結果的に
> ・レガシーOSを使用する極少数のユーザーを守るために、少なくともWindows 7以
>降のモダンOSを使用する
>   大多数のユーザーを犠牲にする。
> という民主主義社会においてあるべからざる状況につながるからです。
>
> 理想としては、最新のVisual Studio 2019をメイン開発環境にして最新技術に対応
>できる体制を保ちつつ、
> ビルド時にレガシーOSでも動作可能なバイナリを生成できるよう注意を払って、
> ・モダンOSユーザーにもレガシーOSユーザーにも平等に利益をもたらす開発体制を
>とっている。
> と堂々と公言できるようにすることだと思うところでございます。
の記述も、
「〜こととは思えません。」
「〜だと思うところでございます。」
という風に、現在の民主主義社会における製品開発の理想像を思い描いた
・所感
であって、今すぐ改善を求めるような
・要望
・提案
ではありません。

> >  B. 把握しているが修正困難な不具合が存在しており、
> > いつ顕在化してもおかしくない「時限爆弾」となっている。
> 具体的には?

例えば、64bitの整数値を8個のcharとか2個のlong intで無理やり表現していて演算
処理が煩雑になって不具合の
温床になっているとかです。C99では正式に64bit整数のlong long int型が用意され
たが、あいにくVisual C++
2005ではまだC99が使えません。

> LSPもスニペットも確かに有用ですが、今まで秀丸を使ってきた人たちの感覚から
>すれば「辞書の類はパブリックな
> ものがあると大いに助かるが、書式についてはマクロで自分の好みにカスタマイズ
>できなければ論外どころか有害」です。
>
> 私なんか、Excelのマクロを書いていてもいちいちエラーのモーダルダイアログが
>出るのが我慢ならないのですよ。
>
> あるいはLSPでいうと、閉鎖された環境でアプリが勝手に外部と通信をされては困
>るケースも多々あるわけです。
> 機密保持のためコーディング用のPCは特定のサイトを除きWebブラウジング禁止、
>なんていう運用のオフィスも結構あるわけで。

秀丸エディタにLSPやスニペットが実装されるのはまだ先のことですが、もし実装さ
れても既存の正規表現ベースの強調表示などが
なくなるとは考えられず、LSPやスニペットは環境設定で使用する/使用しないをユー
ザーが選択する形になると見込まれます。
故に、使いたくなければ「動作環境」でOFFにすればよいだけの話です。

> > ライバルのエディタに差をつけられてしまう。
>
> その話は解決済。

確かに、「コーディング専用」エディタのVS Codeについて論議することは土俵違い
です。しかし、サクラエディタやNotepad++その他の
比較的「同じ土俵」で対峙している零細エディタまでもがLSPなどでモダン化を図っ
てきたら、さすがに後れを取るまじと対応を
迫られることは十分考えられます。

> > D. 一般的なアプリで近年行われている機能/仕様のモダン化ができない。
>
> 「一般的なアプリ」の定義は?
> 「近年」とは具体的に何年から?
> 漠然と「自分の脳内常識は世界全体の公理」という態度で議論を吹っ掛けてくるこ
>とに対して我慢がならないのですよ。
> (ちょっとここのところ色々とあるので…。)

普通にVectorなどで配布されていたり、ここ
https://www.gigafree.net/
などで紹介されているもののうち、現行OSのWindows 8.1以上での動作を公式にサ
ポートしているものを指します。

> それと、たとえば何かの文字列データをchar[](あるいはWCHAR[])ではなくstd::
>stringで保存したからハイ安心、
> という発想は秀丸にはありません。マクロでもDLLでも何でもいいですが、意図的
>にこの変数にGB単位の巨大データを
> 突っ込んで、アプリ側で完全にその可能性をノーチェックだったとすれば、アプリ
>のハングアップ、DoSアタックの
> リスクを背負います。

確かにこれは迂闊でした。セキュリティ対策が目的ならWCHAR[]などの固定長バッフ
ァの使用も止む無しですね。

> 先日ご要望があった「レジストリに保管されている内容を編集したい」ということ
>だけであれば、既存の秀丸の
> パッケージにバンドルする形で「レジストリに入っているデータ」「設定バックア
>ップで書き出したレジストリ形式の
> データ」「手作業で編集可能なJSON等のデータ」の相互変換ツールを別途作っても
>らえばそれで済む話です。
>
> その話であれば、いったんfzok4234さんが現状のレジストリの仕様を担当さん(秀
>まるおさん?)から開示してもらって、
> その仕様を前提にした変換ツールを実際にfzok4234さんが作ってみてはいかがです
>か?そのバイナリを「ベータ版」として
> 一般公開してみて、好評であればサイトー企画さんのほうでWindows 9x/NT対応の
>ための最低限の修正を入れてもらって
> サイトー企画名義で公開、と。

先日のやり取りで、レジストリの仕様は不変ではなくアップデートに際して変更され
うるものであることがわかりました。
このため、環境設定の操作はレジストリへの直接アクセスではなく下位互換性維持が
徹底されたマクロの構文を介して
行うことが賢明といえます。ただし、「動作環境」などの全項目をマクロで操作でき
るように頼むのはさすがに無茶なこと
ですので、必要になった項目だけをその都度要望するように努めるつもりです。

> > UTF-16エンコードなどの規格化されたモダン書式と違って
> > フレームワークやOSによるサポートがないために、
> >
> 「フレームワーク」が一体何を示すのか分からないのでそれは置いておくとして、
>OSによるサポート。
> もし「UTF-16になってさえいればOSの機能が使える」ということなら、堂々と使え
>ばいいだけのことです。でも使わないのは、
> 「特定の時期以降のOSでないと使えない機能を標準で要求するのは望ましくない」
>という考えがあるからだと私は考えています。

これだと、ほとんどのユーザーが使う現行OSでは利用できる機能であるにもかかわら
ず、今では極少数のユーザーしか使っていない
Windows 98/Me/NT4.0では利用できないという理由だけで、その機能を標準で要求す
るのは悪いことだという結論になってしまいます。
つまり、「一部のマイノリティが使えない機能だから、みんなはこの機能の要求は我
慢しろ。」という民主主義に有らざる暴論を
突き付けることとなります。

> > この書式のパーサを自前で実装したものの不具合が頻発して
> > 「四角い車輪の再発明」状態となった。
>
> 自前がダメなら、フリーなライブラリをカスタマイズして使えばいいだけのことで
>すね。
> それに、既存の車輪が欠陥品でないという保証だってどこにもありませんよ。 
> 実際、秀丸の内部には「OSやそのモジュールの不具合に対応するためのトリック」
>が優に100件くらいは組み込まれているはずです。

Shift-JISエンコード互換の独自エンコードというような既存の書式を拡張したもの
であれば、この方法が有用だと思います。しかし、
上記で挙げたようにlong intを2個くっつけて無理やり64bit整数の代わりに使ってい
るような完全な創作書式となれば、さすがに
「カスタマイズ可能なフリーなライブラリ」すら見つからないかもしれません。


[ ]
RE:38968 [質問]メインのビルド環境についNo.38973
fzok4234 さん 21/05/25 05:29
 
> 本題ですが、私はもちろん開発サイドではありませんが、おそらく fzok4234 さん
>の問題提起は
> 主客逆転しています
> 古い開発環境を使っているから最新機能が取り込めないのではなく、古い環境で使
>い続けている
> ユーザのために、開発側は古い開発環境を使い続けていた思います

この考えは、「一部のマイノリティのために大多数の人が犠牲にならなければならな
い。」という
理論につながるために違和感を覚えます。

実際、「身障者用公衆トイレ」を使ってみれば実感できると思いますが、「障害者に
も健常者にも
使いやすいトイレ」として設計されていることがわかるはずです。決して「マイノリ
ティである
障害者は快適に使えるがマジョリティの健常者には苦痛をもたらす」設計ではありま
せん。

> またユーザー側の意見として「もっと最新のモダンなエディタを使いたい」という
>要望を出すのは
> 結構なことだと思います
> しかし現実として、そのような書き込みをここで見ることはあまりないんですよね

実のところ、秀丸エディタにおいて正規表現によるパターンマッチングでの強調表示
やアウトライン定義の
実装は、大変骨の折れる作業であるとともに誤認識も多発してしまいます。そのよう
な中でVS Codeが
Language Server Protocolという強力な言語解析機能を搭載してきたため、つい「浮
気心」を起こして
しまった次第であります。

> 最後に、fzok4234 さんの書き込みは、内容的に難度が高いです
> このことから、fzok4234 さんの秀丸歴がどの程度か解りませんが、それとは関係
>なく、ここではなく常連さん用の場
> ・xxxxxxxxxx@maruo.co.jp
> ・https://www.maruo.co.jp/turukame/3/index.html
> のほうが適切だと感じます

ここは「β版」専用の気がしますが...
一応、β版の不具合はこちらに書くようにしています。


[ ]
RE:38970 年寄りの与太話 Re; [質問]メイNo.38974
fzok4234 さん 21/05/25 05:30
 
やはり、Windows 98/Me/NT4.0への対応はモダン化の足を引っ張っていたみたいですね。

> となると気になるのが、最終バージョンになるV8.99の内部的なバージョン番号で
>すが、今までの慣例を
> 破ることを提案させてください。
>
> 今まで、秀丸のバージョン番号は内部的には5桁の10進数で、「下2桁がベータの版
>数を表し、ここが99なら
> 正式版」というルールでした。つまり89901、89902、…が899b1、b2…を表すこと
>になって、8.99正式版は
> 内部的には89999を充てることになります。
>
> これを8.99に限っては「89900が8.99の初出(表記も8.99.00とする)、以後不具合
>修正のみのサポート継続として、
> 修正が出るごとに89901、89902、…とし、数年にわたって本当に何も修正がなけれ
>ば正式にサポートを打ち切って
> 以後89999までは欠番」とするのがいいのではないかと思いました。
>
> MicrosoftからのWindows 4.x 向けパッチなんてもう新規の公開はないはずで、ま
>さかバグなんか残っていないと
> 信じたいところですが…。

一部の工作機械の制御用マシンのユーザーは今後こちらの「保守」版での対応という
ことでしょうね。


[ ]
RE:38970 年寄りの与太話 Re; [質問]メイNo.38975
秀丸担当 さん 21/05/25 09:41
 

バージョン番号については、8.99にするときは言われているようにβ番号に相当する
最下位2桁は正式でも99未満にしたほうがいいかもしれません。
ご意見参考にします。
念のため8.99自体を空けておいて8.98の次が9.00でもいい気がします。

[ ]
RE:38967 [質問]メインのビルド環境についNo.38977
fzok4234 さん 21/05/25 10:06
 
> 追加でコメントさせていただきますが、一応、最新のビルド環境でないとダメな
>ケースでは、その部分だけ
> 別DLLでビルドして対応してる所もあります。最近だと秀丸メールでのEdgeブラウ
>ザのウィンドウ部品
> (WebView2コントロール)を使う所を別DLLにしてたりします。

メインのhidemaru.exeとは違うビルド環境の適用のために別DLLに分けるという「裏
技」があること勉強に
なりました。

> さらに別件ですが、以前話のあった、HmJre.dllでの「\g<NAME>」関係の対応を今
>やってまして、一応、
> それなりに動く段階にはなりました。
> \g<NAME>が(?<NAME>....)の中にネストして入るパターンも対応しています。
> \k<NAME+level> のようなタグ指定は今のところ対応できなさそうです。

わざわざ小生の要望への対応ありがとうございます。

> HmJre.dllの場合、元々、((a+)+)+ のような多重ネストの繰り返しパターンが非常
>に重い問題が
> あったんですが、これも改善して、手元のバージョンでは鬼車と同じ程度の速度で
>動くようになった所では
> あります。ただ、本当に大丈夫かどうか動作検証が必要で、それに時間がかかりそ
>うではあります。

正規表現なんてHmJre.dllであれ鬼雲であれ.NET FrameworkのSystem.Text.RegularEx
pressions.Regexであれ
繰り返しの入れ子に関してはそのパフォーマンスはどれも同じものだと思い込んでお
りました。改良版HmJre.dllや
鬼雲などは現行のHmJre.dllよりも軽いとのことなら、検索パターンをより正確なも
のに変えてもよいだろうと
思います。


[ ]
RE:38966 [質問]メインのビルド環境についNo.38978
fzok4234 さん 21/05/25 14:49
 
こちら側の書き方が周囲の人から見て「無茶な要望の列挙」のように見えているよう
でした。そこで改めて、
より「質問アンケート」っぽく見える書き方で再度投稿いたします。

 1. Windows 98/Me/NT4.0で動作可能なバイナリを生成可能なC/C++コンパイラはVisu
al C++ 2005とのことで、
    これを含んでいるVisual Studio 2005は2016/04/12をもってサポートが切れてい
ます。また、現在サポートが
    継続しているもので最も古いものはVisual Studio 2012です。秀丸エディタはWi
ndows 98/Me/NT4.0での動作を
    サポートしていますが、メインのhidemaru.exeのコンパイルに使用しているVisu
al Studioのバージョンは
    何でしょうか?
    (                                )
 2. 秀丸エディタに最新技術を取り込むために切り出した別DLLのコンパイルに使用
しているVisual Studioの
    バージョンは何でしょうか?
    (                                )
 3. Visual Studioが古いことで、最新の
      ・C/C++の構文や標準関数
      ・Windows APIの関数やデータ型
      ・サードパーティのライブラリ
    などがどうやっても利用できない(最新のVisual Studioで別DLLに切り分けても)
ケースは存在するでしょうか?
    (Yes/No)
 4. 不具合対策の質問です。Yes/Noでお答えください。
       4.1. ソースコード上で不具合の存在を把握しているが、修正するためには新
しいVisual Studioが必要なため
            放置している。
            (Yes/No)
       4.2. 現在では使用が推奨されていなかったり、将来廃止される恐れがあった
り、既に廃止された標準関数や
            APIなどの使用を継続しているが、これを中止して最新の代替手段を導
入するためには新しいVisual Studioが
            必要である。
            (Yes/No)
       4.3. 冗長なコードの記述でスパゲッティ化がかなり進行しており、これを解
決するためのより簡潔な記述を
            するためには新しいVisual Studioでないと利用できない構文や関数な
どを使用する必要がある。
            (Yes/No)
       4.4. 識別子への不適切な命名などの解消すべき問題を抱えているが、解決す
るためには新しいVisual Studioに
            搭載された「リファクタリング」機能を使わないといけない。
            (Yes/No)
       4.5. Gitなどのバージョン管理システムを用いていないため、
              ・旧バージョンのコードのコメントアウト
              ・変更履歴をコメントに記述
            といった不適切なコメントが多くてコードが読み辛くなったり、コメン
トの維持に徒に労力を費やしている。
            (Yes/No)
       4.6. 固定長バッファサイズの整数値などの同一値をコードの複数個所に直接
ハードコードしてしまっており、
            値の変更には複数個所を同時に変更しなければいけない。
            (Yes/No)
       4.7. 似たような手続きやオブジェクトを汎用的な単一の関数やクラスといっ
た再利用可能なコンポーネントとして
            実装せずに、「コピペして改変」で済ませてしまったために機能の追加
/改善は複数個所を同時に変更しなければ
            いけなくなった。
            (Yes/No)
 5. 最新技術への対応に関する質問です。
       5.1. 特にx64版秀丸エディタにおいてですが、64bitの整数値やポインタを、
C99で採用されたlong long int型などの
            現行のC/C++標準関数やWindows APIで直接利用可能な標準のデータ型を
用いずに、32bit整数のlong int型を2個
            並べて無理やり表現するなどの独自形式を用いていませんか?
            (Yes/No)
       5.2. エディタ本文文字列が、UTF-16エンコードなどの現行のWindowsやVisua
l Studioで普通に扱える標準のデータ型では
            なく、今ではレガシー規格となったShift-JISエンコードを拡張した独
自形式を用いているようなのですが、
            このことが足枷となって実装が困難となっている最新技術や発生しうる
不具合がもしあればご提示願います。
            (                                                              
                                   )
       5.3. 上記5.1や5.2以外に、古いWindowsやVisual Studioに起因する非標準な
独自形式が未だに用いられていて現行の
            標準形式に置き換えることが困難である事案がもしあれば具体例の列挙
をお願いします。
            (                                )
            (                                )
            (                                )
            (                                )
       5.4. 今後、新たに設定を外部テキストファイルに保存する際に、XMLやJSON
といったモダンな階層ツリー構造の
            ファイル形式を採用するためには新しいVisual Studioが絶対必要な状
態となっていませんか?
            (Yes/No)
       5.5. Language Server Protocolやコードスニペットなどモダンなテキストエ
ディタに求められる機能のうち、実装の
            ためには新しいVisual Studioが絶対必要なものがもしあれば列挙をお
願いします。
            (                                )
            (                                )
            (                                )
            (                                )
 6. ユーザーからの機能追加/改善の要望への応対に関する質問です。
       6.1. 今までに「これは仕様とします。」などと述べてやんわりと断ってきた
要望の中で、断った本当の理由が実装の
            ためには新しいVisual Studioの導入や古いWindowsのサポート打ち切り
が絶対必要だったものがもしあれば列挙を
            お願いします。
            (                                )
            (                                )
            (                                )
            (                                )
       6.2. 今までにユーザー側でのマクロの実装例を提案して秀丸エディタ本体へ
の実装を見送った要望の中で、実装の
            ためには新しいVisual Studioの導入や古いWindowsのサポート打ち切り
が絶対必要だったものがもしあれば列挙を
            お願いします。
            (                                )
            (                                )
            (                                )
            (                                )


[ ]
RE:38978 [質問]メインのビルド環境についNo.38980
秀丸担当 さん 21/05/25 16:24
 

申し訳ありませんが、特別な理由が無い限りはそこまで細かい内部情報を公開する必
要は無いと思うので、すみませんがそれ以上はお返事できないです。
今後Windows9xをサポートしていかなくなることで、またいろいろ変えられると思い
ます。
ちなみにストアアプリ版は新しめのVisualStudioだったり、VisualStudioとは関係無
しにbinのパスだけけSDKを指定したり、いろいろ臨機応変なところがあったりします。

[ ]
RE:38980 [質問]メインのビルド環境についNo.38981
fzok4234 さん 21/05/25 16:59
 
> 申し訳ありませんが、特別な理由が無い限りはそこまで細かい内部情報を
> 公開する必要は無いと思うので、すみませんがそれ以上はお返事できないです。

このようなことを知りたい動機は、他者からの「Windows 98のような古いOSへの
サポートができなくなることも含めて、このようなモダン化を求めるのは無茶な
要望である。」という指摘があったためで、開発側が現時点で対応できないことを
こちら側で前もって把握しておいて、今後の機能改善要望や不具合修正の投稿の際に
配慮を行いやすくするためです。

例えば、新しいVisual Studioを導入しないと設定ファイルとしてのXMLやJSONの採用が
できないと前もってわかっていれば、当面は「秀丸エディタ上の○○を外部ファイルに
保存できたらよいと思うが、その時のファイル形式はXMLやJSONにしてほしい。」という
要望を差し控えることができるわけです。

> 今後Windows9xをサポートしていかなくなることで、またいろいろ変えられると思
>います。

一応、古いOSのサポートは未来永劫続くものと見做しておりました。やはり秀丸エデ
ィタとはいえ
「時代の変化」には勝てないみたいでしたね。



[ ]
RE:38972 [質問]メインのビルド環境についNo.38984
星くず彼方に さん 21/05/27 03:24
 
>例えば、64bitの整数値を8個のcharとか2個のlong intで無理やり表現していて演算
>処理が煩雑になって不具合の
>温床になっているとかです。C99では正式に64bit整数のlong long int型が用意され
>たが、あいにくVisual C++
>2005ではまだC99が使えません。

細かい話ですが、long long は Visual C++ 2003 から使えます。
また、それ以前から MS拡張として __int64 という64bit整数型がありました。
そのため、64bit整数を分割せずそのまま扱えます。

もちろん実際にどうしてるかはわかりませんが。

[ ]
RE:38973 [質問]メインのビルド環境についNo.38985
石田 さん 21/05/28 03:28
 
(FastCopy や IP Messenger for Win など、日本より海外での利用者が多いソフト
開発者さんは、
秀丸一択のようです。最近作者さんのTwitterを見ていたら、秀丸はWin98からWin1
0までサポート
しているすごいエディタだ=cなんて書き込みを読みました。)

[ ]
RE:38985 [質問]メインのビルド環境についNo.38986
こみやんま さん 21/05/28 05:01
 
>(FastCopy や IP Messenger for Win など、日本より海外での利用者が多いソフト
>開発者さんは、
>秀丸一択のようです。最近作者さんのTwitterを見ていたら、秀丸はWin98からWin
>10までサポート
>しているすごいエディタだ=cなんて書き込みを読みました。)

>(FastCopy や IP Messenger for Win など、日本より海外での利用者が多いソフト
>開発者さんは、
>秀丸一択のようです。最近作者さんのTwitterを見ていたら、秀丸はWin98からWin
>10までサポート
>しているすごいエディタだ=cなんて書き込みを読みました。)

fzok4234 さんの懸念とも関係しますが、
秀丸エディタが、他のエディタと比べ「積極的なアクティブユーザーを減らしていっ
ている」、というのは
多角的に考えても、かなり高い確率で事実と思いますよ。

https://trends.google.co.jp/trends/explore?date=all&geo=JP&q=%E7%A7%80%E4%B8%B8
https://trends.google.co.jp/trends/explore?date=all&geo=JP&q=%E3%82%B5%E3%82%AF%E3%83%A9%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF
https://trends.google.co.jp/trends/explore?date=all&geo=JP&q=Vim
https://trends.google.co.jp/trends/explore?date=all&geo=JP&q=Emacs
https://trends.google.co.jp/trends/explore?date=all&geo=JP&q=Visual%20Studio%20Code
https://trends.google.co.jp/trends/explore?date=all&geo=JP&q=python
https://trends.google.co.jp/trends/explore?date=all&geo=JP&q=Ruby
https://trends.google.co.jp/trends/explore?date=all&geo=JP&q=Perl
https://trends.google.co.jp/trends/explore?date=all&geo=JP&q=Github
https://trends.google.co.jp/trends/explore?date=all&geo=JP&q=facebook
https://trends.google.co.jp/trends/explore?date=all&geo=JP&q=twitter

Googleトレンドが減っているからといって必ずしてもユーザー数が減っているものと
直結させる気はありませんが、
(なぜなら、新規興味者の検索の意味合いが大きいため)
「日々アクティブにその対象に対して働きかける人の増減」という意味では十分その
傾向を推し量るバロメーターになります。

例えば、PerlとPythonは登場時期が4年ほどしか違いがありませんが、Perlは2004年
以降、積極的なアクティブユーザーは減らしているであろうこと、
Perlから本の数年後に遅れて登場したPythonは人気が横ばいな時がありながらも2014
年あたりから新規参入者がおそらく大きく増え続けているであろうこと
Rubyは2010年あたりまでは、Ruby on railsで人気を博したが、それ以降、徐々にア
クティブユーザーや活動が減っているのではないか、ということも
上記リンクのURLからわかります。

例えば、EmacsとVimでは、Emacsの方が人が減っている、
すくなくとも積極的活動をするアクティブユーザーや新規参加者は、Vimと比べても
減少傾向であろうことがわかりますし、
Visual Studio Code と サクラエディタ と 秀丸 と EmEditor では、
Visual Studio Code が大きく伸びている一方、
秀丸とEmEditorといった料金が要るプロプライエタリは新規購入者増加数や積極的ア
クティブユーザーはこの15年ほどはおそらく継続して減少し、その減少具合はサクラ
エディタより比率としては大きいであろうこともわかります。
(このことはマクロ登録数が年々の指数的に極端なほど減少し、新規登録者の登場が
皆無になっていることからも容易に感じとれます。)

Facebookはアカウントこそ成長率を鈍化させながらも増えていっているものの、
積極的な投稿、継続的な投稿は年々減少しているのではないかと見て取れますし、
Twitterの方は、古いユーザーから新しいユーザーまで、コンスタントにアクティブ
な活動がポツポツと特に減少することもなく継続しているのであろうこともわかりま
す。


最終的には「人気なんぞ関係ないので、自分が便利と思うものを好きに使えばいい」
わけですが、
秀丸の全体での人気率みたいなものが昔と変わっていないというのは、まずもってし
てありえないことと思います。

[ ]
RE:38986 [質問]メインのビルド環境についNo.38987
石田 さん 21/05/28 07:07
 
こみやんまさん も fzok4234さん もお好みのエディタを使えば良いだけで、
秀丸公式掲示板に粘着する理由が判りません。小社ではフリーソフトは10年ほど前に
一掃して、システム課や現場も秀丸に一本化しました。システム課は管理職以外入室
不可なので
どんな使い方をしているか分かりませんが、現場では「マクロ資産の長期運用性」に
着目して
秀丸一択です。「秀丸マクロ」が無いと仕事が回りません。商用エディタでも途中で
マクロ仕様を
変えて、一気にユーザ離れを起こしたソフトがあったと思います。

[ ]