Viivi の既知の問題 < Viivi の小部屋 < 入り口 / Entrance


Viivi の既知の問題


公開後に見つかった問題

  1. [修正済み]
    [バグ情報 #0] (Twitter にて報告済み) ID: F59513. 内容: 選択点灯が終了状態で機能しない.

    現在: 修正済み.

  2. [未修正]
    [バグ情報 #1] 内容: 複素数の位相計算が正しくない (sqrt, asin, acos, atan).

    現在: 修正中.

公開時に見つかっていた問題

  1. [未解決]
    日本語環境ではデフォルトでまぬけな Swing フォントが使われる.


    Linux の英語環境では トップページ入り口 の背景にあるように かっこいい表示になるのですが, Windows や Linux などの日本語環境ではデフォルトで使われる Swing フォントが美しくありません.
    これは Viivi の問題ではなく,Java 環境の設定の問題だと思われます.
    日本語環境でも美しいフォントを使う Java の設定方法をご存知の方はその方法をお教えください.
    (これは非ヨーロッパ言語のほかのロケールについても一般的に起きている可能性があります.)

    [補足: 一時的な回避案]
    Viivi を Ubuntu などの Linux 上の日本語環境で走らせている場合には, この問題を一時的に回避する方法があります.
    Viivi に英語環境 LANG=C を指定して
    などのように立ち上げ,コントローラが表示されたら コントローラ右上の「Language」メニューから 日本語「ja [Japanese]」 を選択します.
    これで一時的に日本語環境でも美しいフォントを使うことが可能です.
    ただし安定した実行を保証するものではないのでご注意ください.

  2. [未解決]
    Viivi のコードと無関係な Exception がたまに出る.

    Viivi を立ち上げた shell 窓や COMMOND 窓に, Viivi のソースコードを含まない履歴をもつ Exception がたまに 出力されることがあります.
    これについては Exception 履歴に Viivi のコードが全く含まれていないため対処方法が不明です.

    たとえば下記の Exception では table のどれかが内部的に使っている sorter の使いかたに問題があるように見えます.
    ただし Viivi のコードで sorter を直接操作する箇所はありません.
    これ以外にも,Viivi のコードを全く含まない Exception が 生じることがいくつかあります.

    [例]
    	WARNING: row index is bigger than sorter's row count. Most likely this is a wrong sorter usage.
    	Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0
    		at java.base/java.util.Vector.elementAt(Vector.java:466)
    		at java.desktop/javax.swing.text.DefaultHighlighter.paint(DefaultHighlighter.java:59)
    		at java.desktop/javax.swing.plaf.basic.BasicTextUI.paintSafely(BasicTextUI.java:753)
    		at java.desktop/javax.swing.plaf.basic.BasicTextUI.paint(BasicTextUI.java:917)
    		at java.desktop/javax.swing.plaf.basic.BasicTextUI.update(BasicTextUI.java:896)
    		at java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:797)
    		at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
    		at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5255)
    		at java.desktop/javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:246)
    		at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
    		at java.desktop/javax.swing.JComponent._paintImmediately(JComponent.java:5203)
    		at java.desktop/javax.swing.JComponent.paintImmediately(JComponent.java:5013)
    		at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:865)
    		at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848)
    		at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    		at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain)
    		at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848)
    		at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823)
    		at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772)
    		at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884)
    		at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
    		at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    		at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    		at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    		at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    		at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain)
    		at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    		at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    		at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    		at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    		at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    		at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    		at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    
    

  3. [未解決]
    Hot-Key が使えない.


    作者は Hot-Key を常用する派なので Hot-Key 機能の実装を試みたのですが, 全くうまくできませんでした.
    そのせいでまだ Viivi IDE / VITSE の 操作性を上げられていません.
    Swing の Hot-Key API 関係の bug が原因ではないかと考えています.

    たとえば,今回の版に Hot-Key は全く実装していないのですが, [Alt]+[F] を押すと「ファイル」メニューが選択できてしまい (まあこれはあり得る), [Alt]+[D] を押すとなぜか「設定」メニューが選択されてしまいます (なんで?).
    これ以外にも,Hot-Key とメニュー周りの操作でバグらしき現象を経験しています.

  4. [未解決]
    Break-Point を指定した文字列が parse 後も Token として確定されなかったり, 指定した Break-Point の監視機能がはたらかなかったりすることが, たまにある.


    原因はまだ不明ですが,公開後調べます.

  5. [未修正]
    Viivi kernel が R5RS 規格にまだ完全に準拠していない.

    旧版 (第 00.17.01 版) 公開時までは R5RS 準拠の判定基準に用いるテストコードファイル r5rstest.scm がどこにあるのか不明でした.
    旧版公開後に r5rstest.scm が検索にかかるようになりましたので, 今後このテストコードを完全に評価完了できるように修正します.

    ただし, Viivi IDE の問題の修正を先に優先して行いますので, それが完成してから Viivi kernel の仕上げを行う予定です.

  6. [未修正]
    R5RS 互換性にかかわらず,Viivi kernel はまだ未完成であり, 基本的な問題を含んでいる.


    Scheme プログラミング言語処理系の基本的な機能に関して, 正しくない挙動を確認しています.
    これらについても, Viivi IDE に次ぐ優先度をもって 修正していきたいと思っています.
    より多くのバグ・レポートをいただければ Viivi kernel をより確実に修正できます.
    問題が見つかりましたらどうか <bugs@viivi.io> までご連絡ください.

    ほとんどの問題は現象を知らせていただければ修正できる些細(ささい)なものです.
    しかし一部に作者の理解を超えている本質的な問題も存在します.
    (残念ながら作者は本物の Schemer ではなく,Little Schemer のひとりに過ぎません.)
    それらについては 「教えて,Schemer!」 に記載してありますので, Schemer のみなさま (君のことだよ!) にはこれらの現象について作者に お教えいただきたく,また解決のヒントをいただきたくお願い申し上げます.

  7. [未修正]
    評価点灯および選択点灯のいずれについても,点灯処理がまだ完全ではない.


    公開までに点灯処理を完全にする時間がありませんでした.
    点灯すべき対象が違っている, 直感的には点灯すべきなのに実際には点灯しない, などという正しくない部分が残っています.
    将来の版で正しく点灯するようにします.

  8. [未修正]
    ファイルの入力ポートを開くのに非常に長い時間がかかる.


    この原因は, 読み込む際にファイルのすべての内容を parse してしまっているからです.
    これは誤りですので,今後の版で修正します.

  9. [未修正]
    エラーや注意の出力が 00.17.01 版以前のものよりも簡単になってしまっている.


    現版の公開までに丁寧なメッセージ (エラー回避方法などを含む) を用意できませんでした.
    今後の版で,詳細な情報を提示できるようにして, カスタマイズによる回避方法なども表示するようにします.

  10. [未修正]
    閉じていた表の窓を開き直したときに,最新の状態になっていない場合がある.


    表示前に必ず最新の状態を表示するように表示更新処理を追加します.

    [補足: 一時的な回避案]
    全ての窓を閉じないで表示したままにしておけば,常に最新の状態を表示します.

  11. [未修正]
    循環リストの長さが常に実質要素の個数の負値で返される.
    「実質要素の個数」や「INFINITY のようなシンボル」を返したほうが便利な場合もある.


    将来の版では,オプションで出力をカスタマイズできるようにします.

  12. [仕様]
    どの窓も隠す「_」ボタンでは隠れない.
    どの窓も閉じる「X」ボタンで閉じる.
    コントローラはどのボタンを押しても閉じない.

    これらはすべて仕様です.
    窓を隠したとき,その窓が実際に画面上に表示されているのか,それとも隠されているのかを 判断する方法が Swing にはありません.
    コントローラから窓の表示状態を管理する必要がありましたので 閉じる機能だけを使うことにしました.
    そうすればコントローラはどの窓が開いていてどの窓が隠れている(実際には閉じている)のかを 判断することができます.
    この場合,隠す「_」ボタンは使わないことになりますが, Swing ではこれを非表示にすることもできないため, 窓の上に残骸として残っています.
    閉じるボタン「X」を常に使うようにして, 隠すボタン「_」は無視してください.
    わかりにくい表示で申し訳ありません.

    コントローラだけは見えなくなると IDE の操作が何もできなくなるので 常に画面上に表示するようにしました.

  13. [仕様]
    新版では,メッセージ出力が前版まで対応していたドイツ語に対応していない.


    すべてのメッセージをドイツ語に訳す時間を取れませんでした.
    (特に IDE 上の部品の名称などがわかりません.)
    当面は英語と日本語だけに対応して実装を進めます.
    プログラムが完成したら,メッセージファイルを追加するだけで任意の言語に対応可能です.

  14. [仕様]
    全角空白文字は Scheme の「空白文字」の一種として扱われる.
    したがって, (手続き string->symbol を使わずに) 直接入力するシンボルの中にこの文字を使うことはできない.


    これは, 特に日本の初心者が見えない全角空白文字を空白文字として使った場合に対する配慮です.
    たとえば日本語環境でオフィス系の文書編集ソフトをエディタ代わりに使ったとき, 空白文字として全角空白文字が使われる可能性があります.
    もし全角空白文字をシンボルを構成する文字として認めてしまうと, 見えない文字を含むシンボルができてしまいユーザが混乱する原因になってしまうため, このような仕様にしました.
    Viivi では, 「見えない文字」は (tab 文字,改行文字などと同様に) すべて「Scheme における空白文字」であるとお考えください.

  15. [仕様]
    シンボル call/cc は, 旧版まではあらかじめ手続き #<procedure:call-with-current-continuation> に束縛されていたのに, 新版では未定義である.


    00.18.00 版以降の版での仕様.
    単純化のためにこのようにしました.
    シンボル call/cc を使いたい場合には, 引数コマンド を与えるか,または,あらかじめユーザコードの冒頭で
    のように定義しておく必要があります.


Viivi の既知の問題 < Viivi の小部屋 < 入り口 / Entrance


ご連絡方法

2022/03/02 開設
2022/04/29 更新
Copyright(C) 2003-2022 ilma <ilma@viivi.io> All rights reserved.