Giter Club home page Giter Club logo

losetta's People

Contributors

matsu-zen avatar taiseiue avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

taiseiue

losetta's Issues

デリゲートのスコープの問題[FEATURE_REQUEST]

デリゲートを使ってイベントを実装しているとき、C#のように次のように記述したい時がある。

var count = 0;
onclick += _=>print(count++);

しかしこのコードは期待通りに動作しない。なぜなら、onclickのスコープは呼び出し元にあって定義したところのスクリプトにはないからである。

alice update実行時にエラーが発生する[BUG]

概要

alice update実行時にファイル名:/usr/local/bin/.alice/updateないか、存在しません エラーが発生する。
また、更新自体は正常に完了しているようである。にもかかわらず、更新はユーザーによって取り消されましたと表示される。

再現方法

次のコマンドで更新を実行する

sudo alice update --args force

実際の出力

環境の判定: OS:Linux,アーキテクチャ:x64
https://api.wsoft.ws/download/detail?id=WS144&feature=version から最新バージョンを取得しています...
最新バージョン : 0.9.15.0
この実装よりも新しい実装が公開されています。
更新を実行しますか?(Y/N)>>y
https://download.wsoft.ws/WS144/Download から最新バイナリをダウンロードしています...
ダウンロードが完了しました。
0.9.15.0 に更新しました
 ファイル名:/usr/local/bin/.alice/updateないか、存在しません 13行 コード:var download_id="";
|Local|      Name       |  Type   |                            Content                            |
|Local|      path       | STRING  |                     /usr/local/bin/alice                      |
|Local|       tmp       | STRING  |                   /usr/local/bin/alice.old                    |
|Local|       url       | STRING  |           https://download.wsoft.ws/WS144/Download            |
|Local|   version_url   | STRING  | https://api.wsoft.ws/download/detail?id=WS144&feature=version |
|Local|   new_version   | STRING  |                           0.9.15.0                            |
|Local|      force      | BOOLEAN |                             true                              |
|Local|      check      | BOOLEAN |                             false                             |
|Local| target_filename | STRING  |                           {0}alice                            |
|Local|   download_id   | STRING  |                             WS144                             |
|Local|      iswin      | BOOLEAN |                             false                             |
|Local|    platform     | STRING  |                             Linux                             |
|Local|      arch       | STRING  |                              x64                              |

更新はユーザーによって取り消されました

デリゲート内で演算のみを行うとその結果が反映されない[BUG]

概要

デリゲート内で演算のみを行うとその結果が反映されないか、エラーが発生する

影響範囲

古くはAliceScriptRC1でもこの問題が存在することを確認した。Alice2.1以降の問題ではない模様。

実際のコードと出力

>>var increment = x=> x+1;
>>increment(1);
1 // 2が返されることを期待する
>>increment = delegate(x){return x+1;}
>>increment(1);
1 // 2が返されることを期待する
>>var addperiod = x=>x+".";
>>addperiod("Hello");
エラー0x003: 次の演算子を処理できませんでした。[+] 0行  ファイル名: // Hello.が返されることを期待する

Try-Catch構文が使用できない

Alice2.0のすべての実装でtry-catch構文が使えない

Catch式が引数を持つ場合

try
{
   print("Hello,World!");
}
catch(e)
{
   print(e);
}

出力

Hello,World!
エラー0x01f: Catchステートメントがありません

Catch式が引数を持たない場合

try
{
   print("Hello,World!");
}
catch
{
}

出力

エラー0x01f: Catchステートメントがありません
エラー0x020: 次のブロックを実行できませんでした [print("ERROR");};] 
エラー0x000: Index was outside the bounds of the array. 

文字列補間中にスタックトレースが追加されない

概要

文字列補間中にスタックトレースが追加されない

該当コード

期待する動作は以下の通り。

print($"{err;}");

スタックトレース
場所 Literal
場所 print

でも現実はこう。

スタックトレース
場所 Literal

アプリケーションが任意コードを実行できてしまう

概要

Interpreter_Processを使って実行したアプリケーションが別の権限を使用して任意のコードを実行したり、ライブラリを読み込んだりできてしまう(また、それを防ぐ手段がない)。

該当コード

次のコードは、Interpreter_Processを使ってユーザー入力の式を計算するプログラムである。悪意のあるコードを含むライブラリをwrong.iceとする。

using Alice.Console;
using Alice.Interpreter;
// 標準入力から[2+3]などの式を受取る
var exp_str = read();
// 例えば、[5]などと評価される
var result = interpreter_process(exp_str);
// 出力例 2+3 = 5
print("{0} = {1}",exp_str,result);

このプログラムで次のように実行する。

>>import("wrong.alice");
import("wrong.alice"); = 

このとき、wrong.aliceがインタプリタのpublic領域を変更することがありうる。これによって後続の処理がwrong.aliceによって書き換えられ、重大な脆弱性へとつながる恐れがある。

関数の引数型強制を導入したい

概要

関数の引数に、とくていの型のみを受け入れるような仕組みが欲しい。

想定されるコード

function test(string str){
    print(str.type);
}
test(1);// ここで例外発生

Alice.Drawing名前空間を削除したい

概要

Alice.Drawing名前空間とそれに所属するクラスは、今までデバッグ目的にしか使用されたことがなく、今後もAlice.RuntimeでGUIをサポートしないのならば不必要で、それなのにファイルサイズやメモリに悪影響を与えている。

ラムダ式内でメソッドを呼び出せない[BUG]

概要

次のコードを実行すると、item.Convert(number;の位置でエラー0x038: 括弧が不均等ですが出力される

var ary=["0","1","2"];
ary.Select(item=>item.Convert(number));

例外は次の通り

エラー0x038: 括弧が不均等です0

item.Convert(number;
 0行  ファイル名:
|Local| Name |  Type  |  Content  |
|Local| item | STRING |     0     |
|Local| ary  | ARRAY  | [0, 1, 2] |
エラー0x038: 括弧が不均等です0

item.Convert(number;
 0行  ファイル名:
|Local| Name |  Type  |  Content  |
|Local| item | STRING |     1     |
|Local| ary  | ARRAY  | [0, 1, 2] |
エラー0x038: 括弧が不均等です0

item.Convert(number;
 0行  ファイル名:
|Local| Name |  Type  |  Content  |
|Local| item | STRING |     2     |
|Local| ary  | ARRAY  | [0, 1, 2] |

.NETで関数を定義する方法を簡素化したい[FEATURE_REQUEST]

概要

AliceScriptは.NET相互運用機能によって、関数を.NETコードで定義できるが、毎回ライブラリエントリポイントで関数を定義する必要がある。そこで、.NETの機能として提供されている 属性 機能を使って関数の情報を定義し、自動的に読み込まれるようにしたい。

コード例

以下は、C#を用いた想定プラグインの関数である。

using AliceScript;
using AliceScript.Interop;

namespace MyLibrary
{
    [Function("greet",NameSpace= "MyLibrary",ArgMin=1]
    public class GreetFunction : FunctionBase
    {
        public override Invoke(object sender, FunctionBaseEventArgs e)
        {
            string greet = "Hello," + e.Args[0].ToString();
            e.Return = new Variable(greet);
        }
    }
}

# 互換性の維持について
互換性を維持するために、従来のNameSpaceも残した上で、これをマージする

配列の型付けをしたい[FEATURE_REQUEST]

次のコードのように配列の型付けをできるようにしたい。

var num_array = array(number).Activate();

ちなみにこのジェネリクスもどきはarrayキーワードが関数であることを使用している。

newキーワードが使えるようになるともっときれいに書ける。

var num_array = new array(number);

ジェネリクスを使えなくても次みたいなメソッド表現でもいいかも。

var num_array = array.specify(number).Activate();

ここでbyte型とchar型を導入することでC#と近いデータと文字列を使うことができる。

例えば、strchar_arrayは本質的に等価である。

var str = "Hello,World";
var char_array = array(number).Activate();
char_array = "Hello,World";

string型はarray(char)型のエイリアスと言えるようになる。

関数内で変数を宣言したときそれを再帰的に呼び出すとエラーになる

概要

関数内で変数を宣言したときそれを再帰的に呼び出すとエラーになる

該当コード

下記は、入力した値が100を超えるまで二乗を続ける関数f(x)を定義している。

function f(x)
{
    var y = x**2;
    if(y < 100)
    {
         return f(y);
    }
    return y;
}

この関数を定義した上で、下記のように実行するとエラーが出力された。

>>>f(3)
VARIABLE_ALREADY_DEFINED(0x03e): 変数[y]はすでに定義されています
詳細情報: https://a.wsoft.ws/alice/exceptions/0x03e
スタックトレース
  場所 keyword function x();
  場所 custom function f(x);
  場所 custom function f(x);

do-while完了後に0x020エラーが発生する

概要

do-while完了後に0x020エラーが発生する

該当コード

var n=0;
do
{
    print(n++);
}
while(n<5);

また、while末尾の;セミコロンを削除しても結果は同じだった。

if-elseが使用できない

概要

if-elseが使用できない

COULDNT_FIND_OPERATOR(0x02e): 演算子 `else`は定義されていないか、存在しません
詳細情報: https://a.wsoft.ws/alice/exceptions/0x02e
スタックトレース
  場所 command function Alice.print(); 場所 K:\LocalFiles\Docments\WSOFT\Losetta\alice\bin\Debug\net6.0\test.txt:行 1
  場所 command function include();

無名の関数の宣言ができてしまう

Losetta/Alice2.0で無名で関数の宣言ができてしまう。つまり、次のようなコードは実行できる。

function (){/*SOMETHING*/}

一方、次のコードは実行できない。

();

as演算子を使って文字列から数値への変換が失敗したときにINVALID_NUMERIC_REPRESENTATION(0x02b)例外が発生する

概要

as演算子を使って文字列から数値への変換が失敗したときにINVALID_NUMERIC_REPRESENTATION(0x02b)例外が発生するが、もともとas演算子の定義は次の通りだ。SAIMに違反する。

型変換演算子asは、左辺の値を右辺の表す型に変換します。右辺はtype型である必要があり、型変換に失敗した場合はnullを返します。

該当コード

下記のコードをincludeでデバッグした。

print("ユークリッドの互除法を使って最大公約数を計算するサンプル");
print("はじめに、最大公約数を求める自然数を入力してください。");

function InputNaturalNum(str)
{
    write(str+">");
    var ip = read() as number;
    if(ip!=null && ip > 0)
      {
         return ip;
      }else{
         print("有効な自然数を入力してください");
         return InputNaturalNum(str);
      }
}

InputNaturalNum("1つ目の数字");

これに、次のように入力した。

>>include("yu-crid.txt");
ユークリッドの互除法を使って最大公約数を計算するサンプル
はじめに、最大公約数を求める自然数を入力してください。
1つ目の数字>dresf

発生した例外は下の通り。

INVALID_NUMERIC_REPRESENTATION(0x02b): 引数であるdresfは有効な数値の形式ではありません
詳細情報: https://a.wsoft.ws/alice/exceptions/0x02b
スタックトレース
  場所 keyword function GetVar(); 場所 yu-crid.txt:行 6
  場所 custom function InputNaturalNum(str); 場所 yu-crid.txt:行 16
  場所 command function include();

switch式で選択されるより後の条件も実行されてしまう

概要

switch式で、選択されるより後の条件が実行されてしまう。実際のコードと出力を参照されたい。

実際のコード

print("Switch式のテストです");
print("0か1、それ以外のいずれかを入力してください");

var input = read();

switch(input){
    case "0":{
        print("0が入力されました");
    }
    case "1":{
        print("1が入力されました");
    }
    default:{
        print("それ以外が入力されました");
    }
}

print("これでテストは完了です");

実際の出力

>>alice test
Switch式のテストです
0か1、それ以外のいずれかを入力してください
>0
0が入力されました
1が入力されました // これは表示されるべきではない
それ以外が入力されました // これは表示されるべきではない

>>alice test
Switch式のテストです
0か1、それ以外のいずれかを入力してください
>1
1が入力されました
それ以外が入力されました // これは表示されるべきではない

>>alice test
Switch式のテストです
0か1、それ以外のいずれかを入力してください
>2
それ以外が入力されました // この挙動は正しい
これでテストは完了です

while構文が使用できない[BUG]

概要

正しい方法でwhile構文を使用しているにもかかわらず、エラー0x039: 括弧が不均等ですが発生する。

試したコード

以下のどちらのコードも同じエラーが発生した。

while(true)
{
   print("Hello");
}
var condition = true;
while(condition)
{
   print("Hello");
}

下位のスコープで代入が機能しない

次のようなコードを実行した

var count = 0;

while(count < 10)
{
   print(count++);
}

このコードは次のように出力される

0
0
0
0...

次のコードを試してみる

var count = 0;

if(true)
{
  print(++count);
}

print(count);

このコードは次のように出力される

0
1
0

どうやらスコープ内での変数の増減は、スコープ外に出ると取り消されるか、そもそもスコープ内外で書き込み時に別の変数が参照されている可能性がある。

ラムダ式がまったく動作しない[BUG]

概要

式形式のラムダも、ステートメント形式のラムダもまったく動作しない。また、デリゲートの定義中に内容コードが実行されてしまうよう。

式形式のラムダの実際のコード

print("ラムダ式のテストです");

var lambda = ()=>print("Hello,Lambda!");

var zizyo = (x)=>x*x;

lambda();

print(zizyo(2));

print("これでテストは完了です");

ステートメント形式のラムダの実際のコード

print("ラムダ式のテストです");

var lambda = ()=>{print("Hello,Lambda!");};

var zizyo = (x)=>{x*x;};

lambda();

print(zizyo(2));

print("これでテストは完了です");

実際の出力

>>alice test
ラムダ式のテストです
Hello,Lambda!
エラー0x004: 変数:[x]は定義されていないか、存在しません 4行 ファイル名:\.alice\test
|Local|  Name  | Type | Content |
|Local| lambda | NONE |         |
エラー0x004: 変数:[x]は定義されていないか、存在しません 4行 ファイル名:\.alice\test
|Local|  Name  | Type | Content |
|Local| lambda | NONE |         |
エラー0x004: 変数:[x]は定義されていないか、存在しません 4行 ファイル名:\.alice\test
|Local|  Name  | Type | Content |
|Local| lambda | NONE |         |
エラー0x001: 関数:[lambda]は定義されていないか、存在しません 6行 ファイル名:\.alice\test
|Local|  Name  | Type | Content |
|Local| lambda | NONE |         |
エラー0x001: 関数:[zizyo]は定義されていないか、存在しません 8行 ファイル名:\.alice\test
|Local|  Name  | Type | Content |
|Local| lambda | NONE |         |
エラー0x000: Object reference not set to an instance of an object. 8行 ファイル名:\.alice\test
|Local|  Name  | Type | Content |
|Local| lambda | NONE |         |
これでテストは完了です

env_get_environmentvariableがobjectを返す

概要

env_get_environmentvariableが環境変数のリストではなくobjectを返してしまう。

該当コード

private void Env_get_envirnomentVariable_Run(object sender, FunctionBaseEventArgs e)
        {
            if (e.Args.Count > 0)
            {
                e.Return = new Variable(Environment.GetEnvironmentVariable(e.Args[0].AsString()));
            }
            else
            {
                e.Return = new Variable(Environment.GetEnvironmentVariables().Keys);
            }
        }

Alice.Random.random_intがクラッシュする

概要

Alice.Random.random_intに最大最小値をもたせて実行すると、クラッシュする。

最大最小値がいかなる値でも同様にクラッシュする。

再現コード

using Alice.Random;
random_int(1,3);

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.