Code Monkey home page Code Monkey logo

clover2's Introduction

I am a free software programmer.

Visitor Count

clover2's People

Contributors

ab25cq avatar hsk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

hsk gkatz99

clover2's Issues

4.2.5でテストが通らない

今4.2.5を試してみましたが、 i686, armv7hl, ppc64 でテストが通りません。
i686, armv7hl:

code/main.cl 70: field index is invalid(1). Field index is 2 at String.equals(code/TryTest.clcl 47)
script file(code/main.cl) is abort
make: *** [Makefile:568: test] エラー 1

ppc64:

+ env LANG=ja_JP.utf8 make test
PWD=`pwd`; ./cclover2 CLParser.clcl
CLParser.clcl 95: method not found(6)
CLParser.clcl 95: CLNodeTreeBase.initialize(0 prametors) is not found
CLParser.clcl 95: The different type between left type and right type(2). CLNodeTreeBase and int
CLParser.clcl 117: method not found(6)
CLParser.clcl 117: CLNodeTreeBase.initialize(0 prametors) is not found
CLParser.clcl 117: The different type between left type and right type(2). CLNodeTreeBase and int
CLParser.clcl 156: method not found(6)
CLParser.clcl 156: CLNodeTreeBase.initialize(0 prametors) is not found
CLParser.clcl 156: The different type between left type and right type(2). CLNodeTreeBase and int
CLParser.clcl 195: method not found(6)
CLParser.clcl 195: CLNodeTreeBase.initialize(0 prametors) is not found
CLParser.clcl 195: The different type between left type and right type(2). CLNodeTreeBase and int
Parser error number is 0. Compile error number is 8
cclover2 can't compile (null)
make: *** [Makefile:444: parser] エラー 1

https://koji.fedoraproject.org/koji/taskinfo?taskID=27872220
見てもらえないでしょうか。

12.0.0がビルド出来ない

今になって12.0.0がリリースされている事に気付いたのですが、Fedora 37でビルド出来ないようです

clang -o iclover2 src/interpreter.o src/buffer.o src/debug.o src/xfunc.o src/klass.o src/constant.o src/code.o src/alignment.o src/utf.o src/vm.o src/script.o src/object.o src/array.o src/string.o src/block.o src/regex.o src/integer.o src/byte.o src/short.o src/long.o src/float.o src/pointer.o src/char.o src/bool.o src/hash.o src/list.o src/tuple.o src/carray.o src/type.o src/stack.o src/heap.o src/exception.o src/native_method.o src/class_system.o src/class_clover.o  src/clover_to_clang.o src/class_thread.o src/parser.o src/node_type.o src/node.o src/cast.o src/vtable.o src/script_ctime.o src/node_block.o src/node_block_type.o src/class_compiler.o src/klass_compile_time.o src/method_compiler.o src/module.o src/class_clover_compile_time.o -Isrc/ -I. -L . -I/usr/include -L/usr/lib64 -fPIC -rdynamic -O2 -flto -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS --config /usr/lib/rpm/redhat/redhat-hardened-clang.cfg -fstack-protector-strong   -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -DPREFIX="\"/usr/\"" -I/usr/local/include -L /usr/local/lib -DENABLE_INTERPRETER -Qunused-arguments -lutil -lncursesw -lreadline -ldl -lm -lpcre -lrt
PWD=`pwd`; ./cclover2 -core Fundamental.clcl
PWD=`pwd`; ./cclover2 -core String.clcl
String.clcl:881: There is no field(tv_sec) in this class(timespec)(6)
String.clcl:881: There is no field(tv_nsec) in this class(timespec)(6)
Parser error number is 0. Compile error number is 2
cclover2 can't compile (null)
make: *** [Makefile:58: SortableArray.oclcl] Error 1

11.0.0 はコンパイルが通ることは確認しました。

3.6.1で、s390xで(だけ)テストが通らない

3.6.1でs390xでだけテストが通りません(ppc64は通ります。)
https://koji.fedoraproject.org/koji/taskinfo?taskID=25103273

Closure test12...OK
ParserTest
code/main.cl 4: Null pointer exception at System.fread(code/main.cl 4)(code/ParserTest.clcl 5)(CLParser.clcl 310)(/builddir/build/BUILD/clover2-3.6.1/clover2/File.clcl 463)(/builddir/build/BUILD/clover2-3.6.1/clover2/File.clcl 478)
script file(code/main.cl) is abort
(null) 0: Null pointer exception at System.fclose(/builddir/build/BUILD/clover2-3.6.1/clover2/File.clcl 411)(/builddir/build/BUILD/clover2-3.6.1/clover2/File.clcl 422)
make: *** [Makefile:393: test] Error 1

Fedoraでは、一旦s390xは除いてupdateを出そうと思います

拡張ライブラリが書きづらい

ちょっとユーザー増えない理由がライブラリが少ないせいだと分かりました。
現状だと単なるシェルと同じことしか出来ません。外部プログラムの実装、文字列処理など。
その理由は拡張ライブラリが書きづらいからです。

書きづらい点1。GCがcompactionしていてGCのヒープから取ってきたメモリの位置が変わる。
書きづらい点2。オブジェクトがClover2スタック上に無いと消えてしまう。

解決策 --> boehmGCを使う。もしくは自前でRubyのGCを真似た実装を作ってみる

どっちが良いんでしょ。。。。

とりあえず、boehmGC使ってみます。パフォーマンスはこの際飾りです。
ユーザビリティが上がれば拡張ライブラリを書いてくれる人が出てくるはずです。
作った拡張ライブラリをclover-lang.orgにアップロードできるようにして、RubyのGemのような
仕組みも考えていきます。

また僕自身がライブラリをあまり書いていないせいです。
Thread, Socketクラスが無いのは前から気になってました。とりあえず、Rubyの基本ライブラリを真似てRubyが実装している基本ライブラリは全部実装してみます。Thread, Socket含む。他のライブラリは拡張ライブラリを書きやすいようにして他のユーザーからの貢献を待ちます。

big endianでテストが成功しない

報告しておこうと思いますが、今のgit headで、big endianでテストが成功しません。

https://koji.fedoraproject.org/koji/taskinfo?taskID=24690531
ppc64. s390x:

ParserTest
code/main.cl 4: Buffer size is smaller than the size value of argument at System.read(code/main.cl 4)(code/ParserTest.clcl 5)(CLParser.clcl 308)(/builddir/build/BUILD/clover2-93d24a620cb730a5578a6be8cdd00a28d2cc53cd/File.clcl 432)(/builddir/build/BUILD/clover2-93d24a620cb730a5578a6be8cdd00a28d2cc53cd/File.clcl 446)
script file(code/main.cl) is abort
make: *** [Makefile:392: test] Error 1

.が含まれるディレクトリ内での拡張子取得バク対策

PPAファイルを作ろうと思うと、バージョン番号付きのファイルを作ることになるのですが、

cclover2 /home/sakurai/git/clover2-3.1.8/code/TestDep.clcl
/home/sakurai/git/clover2-3.1.8/code/TestDep.clcl 1: undeclared variable class
と表示されてループになります。
原因を調べた所、拡張子取得のアルゴリズムに問題がありました。修正よろしくお願いします。

3.6.0のテストが通らない

3.6.0ですが、少なくともFedora 27, 28でテストが通りません。
https://koji.fedoraproject.org/koji/taskinfo?taskID=25064750

PWD=`pwd` ./cclover2 code/SystemCallTest.clcl
code/SystemCallTest.clcl 21: invalid utf-8 character. mbtowc
code/SystemCallTest.clcl 21: invalid utf-8 character. mbtowc
code/SystemCallTest.clcl 21: invalid utf-8 character. mbtowc
Parser error number is 3. Compile error number is 0
cclover2 can't compile (null)
make: *** [Makefile:392: test] Error 1

3.7.6でテストが通らない

3.7.6とgit head ( 2b30ac5 ) でテストが通りません。

+ cd clover2
+ make test
PWD=`pwd`; ./cclover2 CLParser.clcl
Clover2 can't load class Array because of class file
Clover2 can't load class EqualableArray because of class file
Clover2 can't load class SortableArray because of class file
Clover2 can't load class HashItem because of class file
It is not enough memory
make: *** [Makefile:298: parser] エラー 1

確認すると、3.7.5 ( a55cc76 )の段階で既にテストが通りません。

オブジェクトファイル名の拡張子の統一をして消しやすくしてほしい

OCaml ですと、生成されるファイル名が *.cmi *.cmo *.cmx *.cma など統一された名前なので、様々なファイルを
rm .cm で消すことが出来て便利です。

残念ながら cloverのコンパイル時に生成されるクラスファイル名とメインファイル名が現状は、.cloと.clclです。
これを例えば、.cloと.clocなどにしてもらうと、

rm .clo

で全て消すことが出来て便利ではないかと思います。

*.ocl *.occ でも良いのですがとにかく統一されていると便利だろうと思いますので、検討お願いします。

Wikiのページ分割

こんにちは。

Wikiについてなのですが、1ページにすべての内容を入れると長くなってやや可読性に欠けるかと思います。
トピックごとに別ページに分けてみてはいかがでしょうか?

Javacのようにコンパイル時に必要なクラスファイルがない場合に、ソースがあればコンパイルしてください

Pull Request もした内容ですが、Javacは1つのJavaファイルを指定するだけで自動的に依存解析をして必要なファイルをすべて辿ってコンパイルしてくれて便利です。ghcなども辿ってくれます。

Clover2にも同様の機能があれば、便利でしょうし、コマンドラインで気軽に使ってもらうにはあったほうが良い機能だと思います。

実装方法

①コンパイル時にクラスファイルをロードしようとしたときにクラスファイルがなかったら、クラスファイルに対応するソースファイルをコンパイルするようにする。
②Dep1ファイルがDep2ファイルを参照し、Dep2ファイルがDep1ファイルを参照していると無限ループに陥るので依存の相互再帰がある場合は、その情報を何かしらの形で保存し再入チェックを行い、再入があった場合はエラーとする。
③system関数を使った場合はプロセス間の情報共有が必要になるのでファイルを用いてコンパイルするファイル名を記録する。ファイル名は絶対パスだったり、相対パスだったりするので、パス情報は消してファイル名だけで扱う。

以上のようにすることで依存情報を解析しながらコンパイルすることが出来ます。

文法

消したようなのでもう協力しません。
さようなら。

sudo make uninstall && make && make testだとエラーになる。

PPAというかdebファイルを作る場合は configure && make && make test && make install
の順番でテストが行われます。現状make testはインストール前提になっているのでインストールされていない場合でもうごく対策をお願いします。

インターフェイスの型を見てくれません。

# E.clcl
interface E {
    def eval():int;
}

class EInt {
    i:int
    def initialize(i:int) {
      self.i = i
    }

    def eval():int {
        return self.i;
    }
}

class EAdd {
    l: E;
    r: E;
    def initialize(l:E,r:E) {
      self.l = l;
      self.r = r;
    }

    def eval():int {
        return self.l.eval() + self.r.eval();
    }
}

class EMul {
    l: E;
    r: E;
    def initialize(l:E,r:E) {
      self.l = l;
      self.r = r;
    }
    def eval():int {
        return self.l.eval() * self.r.eval();
    }
}
# E.cl
def ef(e:E):int {
  if (e.is("EInt")) {
    return e.i;
  } elif (e.is("EAdd")) {
    # return ef(e.l)+ef(e.r); error
    return e.l.eval()+e.r.eval();
  } elif (e.is("EMul")) {
    # return ef(e.l)*ef(e.r); error
    return e.l.eval()*e.r.eval();
  } else {
    return 0;
  }
}

println(new EMul(new EInt(10),new EAdd(new EInt(1),new EInt(2))).eval().toString())
println(ef(new EMul(new EInt(10),new EAdd(new EInt(1),new EInt(2)))).toString());
$ clover2 E.cl

は動くのですが、コメントの箇所を外すとエラーになります。

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.