duby 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +4 -0
- data/Manifest.txt +68 -0
- data/README.txt +31 -0
- data/Rakefile +37 -0
- data/bin/duby +9 -0
- data/bin/dubyc +9 -0
- data/bin/dubyp +9 -0
- data/examples/appengine/src/com/google/appengine/ext/duby/db/Model.duby +132 -0
- data/examples/appengine/src/com/ribrdb/DubyApp.duby +28 -0
- data/examples/bench_fractal.duby +57 -0
- data/examples/construction.duby +8 -0
- data/examples/edb.duby +3 -0
- data/examples/fib.duby +24 -0
- data/examples/fields.duby +22 -0
- data/examples/java_thing.duby +13 -0
- data/examples/simple_class.duby +12 -0
- data/examples/swing.duby +20 -0
- data/examples/tak.duby +15 -0
- data/javalib/JRubyParser.jar +0 -0
- data/lib/duby.rb +170 -0
- data/lib/duby/ast.rb +340 -0
- data/lib/duby/ast/call.rb +73 -0
- data/lib/duby/ast/class.rb +145 -0
- data/lib/duby/ast/flow.rb +328 -0
- data/lib/duby/ast/intrinsics.rb +46 -0
- data/lib/duby/ast/literal.rb +93 -0
- data/lib/duby/ast/local.rb +77 -0
- data/lib/duby/ast/method.rb +187 -0
- data/lib/duby/ast/structure.rb +44 -0
- data/lib/duby/ast/type.rb +93 -0
- data/lib/duby/c/compiler.rb +134 -0
- data/lib/duby/compiler.rb +261 -0
- data/lib/duby/jvm/compiler.rb +684 -0
- data/lib/duby/jvm/method_lookup.rb +185 -0
- data/lib/duby/jvm/source_compiler.rb +516 -0
- data/lib/duby/jvm/source_generator/builder.rb +368 -0
- data/lib/duby/jvm/source_generator/loops.rb +132 -0
- data/lib/duby/jvm/source_generator/precompile.rb +154 -0
- data/lib/duby/jvm/source_generator/typer.rb +11 -0
- data/lib/duby/jvm/typer.rb +118 -0
- data/lib/duby/jvm/types.rb +326 -0
- data/lib/duby/jvm/types/basic_types.rb +18 -0
- data/lib/duby/jvm/types/boolean.rb +11 -0
- data/lib/duby/jvm/types/factory.rb +151 -0
- data/lib/duby/jvm/types/floats.rb +70 -0
- data/lib/duby/jvm/types/integers.rb +110 -0
- data/lib/duby/jvm/types/intrinsics.rb +157 -0
- data/lib/duby/jvm/types/literals.rb +82 -0
- data/lib/duby/jvm/types/methods.rb +344 -0
- data/lib/duby/jvm/types/number.rb +92 -0
- data/lib/duby/nbcompiler.rb +29 -0
- data/lib/duby/old/compiler_old.rb +845 -0
- data/lib/duby/old/declaration.rb +72 -0
- data/lib/duby/old/mapper.rb +72 -0
- data/lib/duby/old/signature.rb +52 -0
- data/lib/duby/old/typer_old.rb +163 -0
- data/lib/duby/plugin/edb.rb +25 -0
- data/lib/duby/plugin/java.rb +42 -0
- data/lib/duby/plugin/math.rb +84 -0
- data/lib/duby/transform.rb +908 -0
- data/lib/duby/typer.rb +359 -0
- data/test/test_ast.rb +391 -0
- data/test/test_compilation.rb +98 -0
- data/test/test_java_typer.rb +199 -0
- data/test/test_javac_compiler.rb +57 -0
- data/test/test_jvm_compiler.rb +1459 -0
- data/test/test_math_plugin.rb +87 -0
- data/test/test_typer.rb +246 -0
- metadata +155 -0
data/History.txt
ADDED
data/Manifest.txt
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
bin/duby
|
2
|
+
bin/dubyc
|
3
|
+
bin/dubyp
|
4
|
+
lib/duby.rb
|
5
|
+
lib/duby/ast.rb
|
6
|
+
lib/duby/compiler.rb
|
7
|
+
lib/duby/nbcompiler.rb
|
8
|
+
lib/duby/transform.rb
|
9
|
+
lib/duby/typer.rb
|
10
|
+
lib/duby/ast/call.rb
|
11
|
+
lib/duby/ast/class.rb
|
12
|
+
lib/duby/ast/flow.rb
|
13
|
+
lib/duby/ast/intrinsics.rb
|
14
|
+
lib/duby/ast/literal.rb
|
15
|
+
lib/duby/ast/local.rb
|
16
|
+
lib/duby/ast/method.rb
|
17
|
+
lib/duby/ast/structure.rb
|
18
|
+
lib/duby/ast/type.rb
|
19
|
+
lib/duby/c/compiler.rb
|
20
|
+
lib/duby/jvm/compiler.rb
|
21
|
+
lib/duby/jvm/method_lookup.rb
|
22
|
+
lib/duby/jvm/source_compiler.rb
|
23
|
+
lib/duby/jvm/typer.rb
|
24
|
+
lib/duby/jvm/types.rb
|
25
|
+
lib/duby/jvm/source_generator/builder.rb
|
26
|
+
lib/duby/jvm/source_generator/loops.rb
|
27
|
+
lib/duby/jvm/source_generator/precompile.rb
|
28
|
+
lib/duby/jvm/source_generator/typer.rb
|
29
|
+
lib/duby/jvm/types/basic_types.rb
|
30
|
+
lib/duby/jvm/types/boolean.rb
|
31
|
+
lib/duby/jvm/types/factory.rb
|
32
|
+
lib/duby/jvm/types/floats.rb
|
33
|
+
lib/duby/jvm/types/integers.rb
|
34
|
+
lib/duby/jvm/types/intrinsics.rb
|
35
|
+
lib/duby/jvm/types/literals.rb
|
36
|
+
lib/duby/jvm/types/methods.rb
|
37
|
+
lib/duby/jvm/types/number.rb
|
38
|
+
lib/duby/old/compiler_old.rb
|
39
|
+
lib/duby/old/declaration.rb
|
40
|
+
lib/duby/old/mapper.rb
|
41
|
+
lib/duby/old/signature.rb
|
42
|
+
lib/duby/old/typer_old.rb
|
43
|
+
lib/duby/plugin/edb.rb
|
44
|
+
lib/duby/plugin/java.rb
|
45
|
+
lib/duby/plugin/math.rb
|
46
|
+
test/test_ast.rb
|
47
|
+
test/test_compilation.rb
|
48
|
+
test/test_java_typer.rb
|
49
|
+
test/test_javac_compiler.rb
|
50
|
+
test/test_jvm_compiler.rb
|
51
|
+
test/test_math_plugin.rb
|
52
|
+
test/test_typer.rb
|
53
|
+
examples/bench_fractal.duby
|
54
|
+
examples/construction.duby
|
55
|
+
examples/edb.duby
|
56
|
+
examples/fib.duby
|
57
|
+
examples/fields.duby
|
58
|
+
examples/java_thing.duby
|
59
|
+
examples/simple_class.duby
|
60
|
+
examples/swing.duby
|
61
|
+
examples/tak.duby
|
62
|
+
examples/appengine/src/com/google/appengine/ext/duby/db/Model.duby
|
63
|
+
examples/appengine/src/com/ribrdb/DubyApp.duby
|
64
|
+
History.txt
|
65
|
+
Manifest.txt
|
66
|
+
README.txt
|
67
|
+
Rakefile
|
68
|
+
javalib/JRubyParser.jar
|
data/README.txt
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
= duby
|
2
|
+
|
3
|
+
* http://kenai.com/projects/duby
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
Duby is a customizable programming language featuring static types, local type inference and a heavily Ruby-inspired syntax. Duby currently includes a typer/compiler backend for the JVM which can output either JVM bytecode or Java source files.
|
8
|
+
|
9
|
+
== FEATURES/PROBLEMS:
|
10
|
+
|
11
|
+
* Ruby syntax
|
12
|
+
* Compiles to .class or .java
|
13
|
+
* Fast as Java
|
14
|
+
|
15
|
+
== SYNOPSIS:
|
16
|
+
|
17
|
+
duby <script.duby>
|
18
|
+
duby -e "inline script"
|
19
|
+
dubyc <script.duby>
|
20
|
+
dubyc -e "inline script" # produces dash_e.class
|
21
|
+
dubyc -java <script.duby>
|
22
|
+
dubyc -java -e "inline script" # produces dash_e.java
|
23
|
+
|
24
|
+
== REQUIREMENTS:
|
25
|
+
|
26
|
+
* JRuby 1.4RC2 or higher.
|
27
|
+
* BiteScript 0.0.4 or higher
|
28
|
+
|
29
|
+
== INSTALL:
|
30
|
+
|
31
|
+
* gem install duby
|
data/Rakefile
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
require 'java'
|
5
|
+
require 'hoe'
|
6
|
+
|
7
|
+
$: << 'lib'
|
8
|
+
require 'duby'
|
9
|
+
|
10
|
+
task :default => :test
|
11
|
+
|
12
|
+
Rake::TestTask.new :test do |t|
|
13
|
+
t.libs << "lib"
|
14
|
+
t.libs << "../jvmscript/lib"
|
15
|
+
t.test_files = FileList["test/**/*.rb"]
|
16
|
+
java.lang.System.set_property("jruby.duby.enabled", "true")
|
17
|
+
end
|
18
|
+
|
19
|
+
# update manifest
|
20
|
+
files = []
|
21
|
+
files.concat Dir['bin/*'].to_a
|
22
|
+
files.concat Dir['lib/**/*.rb'].to_a
|
23
|
+
files.concat Dir['test/**/*.rb'].to_a
|
24
|
+
files.concat Dir['examples/**/*.duby'].to_a
|
25
|
+
files << 'History.txt'
|
26
|
+
files << 'Manifest.txt'
|
27
|
+
files << 'README.txt'
|
28
|
+
files << 'Rakefile'
|
29
|
+
files << 'javalib/JRubyParser.jar'
|
30
|
+
|
31
|
+
File.open('Manifest.txt', 'w') {|f| f.write(files.join("\n"))}
|
32
|
+
|
33
|
+
Hoe.spec 'duby' do
|
34
|
+
developer('Charles Oliver Nutter', 'headius@headius.com')
|
35
|
+
developer('Ryan Brown', 'ribrdb@google.com')
|
36
|
+
extra_deps << ['bitescript', '>= 0.0.4']
|
37
|
+
end
|
data/bin/duby
ADDED
data/bin/dubyc
ADDED
data/bin/dubyp
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
import com.google.appengine.api.datastore.DatastoreServiceFactory
|
2
|
+
import com.google.appengine.api.datastore.Entity
|
3
|
+
import com.google.appengine.api.datastore.EntityNotFoundException
|
4
|
+
import com.google.appengine.api.datastore.Key
|
5
|
+
import com.google.appengine.api.datastore.KeyFactory
|
6
|
+
import com.google.appengine.api.datastore.Query
|
7
|
+
import 'Builder', 'com.google.appengine.api.datastore.FetchOptions$Builder'
|
8
|
+
import 'FilterOperator', 'com.google.appengine.api.datastore.Query$FilterOperator'
|
9
|
+
import 'SortDirection', 'com.google.appengine.api.datastore.Query$SortDirection'
|
10
|
+
|
11
|
+
class DQuery
|
12
|
+
def initialize
|
13
|
+
@query = Query.new(kind)
|
14
|
+
end
|
15
|
+
|
16
|
+
def kind
|
17
|
+
"foo"
|
18
|
+
end
|
19
|
+
|
20
|
+
def limit(l:int)
|
21
|
+
returns :void
|
22
|
+
if @options
|
23
|
+
@options.limit(l)
|
24
|
+
else
|
25
|
+
@options = Builder.withLimit(l)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def offset(o:int)
|
30
|
+
returns :void
|
31
|
+
if @options
|
32
|
+
@options.offset(o)
|
33
|
+
else
|
34
|
+
@options = Builder.withOffset(o)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def sort(name:String)
|
39
|
+
sort(name, false)
|
40
|
+
end
|
41
|
+
|
42
|
+
def sort(name:String, descending:boolean)
|
43
|
+
returns :void
|
44
|
+
if descending
|
45
|
+
@query.addSort(name, _desc)
|
46
|
+
else
|
47
|
+
@query.addSort(name)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def count
|
52
|
+
_prepare.countEntities
|
53
|
+
end
|
54
|
+
|
55
|
+
def _query
|
56
|
+
@query
|
57
|
+
end
|
58
|
+
|
59
|
+
def _options
|
60
|
+
if @options.nil?
|
61
|
+
@options = Builder.withOffset(0)
|
62
|
+
end
|
63
|
+
@options
|
64
|
+
end
|
65
|
+
|
66
|
+
def _prepare
|
67
|
+
Model._datastore.prepare(@query)
|
68
|
+
end
|
69
|
+
|
70
|
+
def _eq_op
|
71
|
+
FilterOperator.valueOf("EQUAL")
|
72
|
+
end
|
73
|
+
|
74
|
+
def _desc
|
75
|
+
SortDirection.valueOf("DESCENDING")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class Model
|
80
|
+
def initialize
|
81
|
+
end
|
82
|
+
|
83
|
+
def self._datastore
|
84
|
+
unless @service
|
85
|
+
@service = DatastoreServiceFactory.getDatastoreService
|
86
|
+
end
|
87
|
+
@service
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.delete(key:Key)
|
91
|
+
returns :void
|
92
|
+
keys = Key[1]
|
93
|
+
keys[0] = key
|
94
|
+
Model._datastore.delete(keys)
|
95
|
+
end
|
96
|
+
|
97
|
+
def kind
|
98
|
+
getClass.getSimpleName
|
99
|
+
end
|
100
|
+
|
101
|
+
def key
|
102
|
+
if @entity
|
103
|
+
@entity.getKey
|
104
|
+
else
|
105
|
+
Key(nil)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def save
|
110
|
+
Model._datastore.put(to_entity)
|
111
|
+
end
|
112
|
+
|
113
|
+
def delete
|
114
|
+
returns :void
|
115
|
+
Model.delete(key)
|
116
|
+
end
|
117
|
+
|
118
|
+
def to_entity
|
119
|
+
unless @entity
|
120
|
+
@entity = Entity.new(kind)
|
121
|
+
end
|
122
|
+
_save_to(@entity)
|
123
|
+
@entity
|
124
|
+
end
|
125
|
+
|
126
|
+
# protected
|
127
|
+
def _save_to(e:Entity)
|
128
|
+
end
|
129
|
+
|
130
|
+
def _read_from(e:Entity)
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import javax.servlet.http.HttpServlet
|
2
|
+
import com.google.appengine.ext.duby.db.Model
|
3
|
+
|
4
|
+
class Post < Model
|
5
|
+
def initialize; end
|
6
|
+
|
7
|
+
property title, String
|
8
|
+
property body, Text
|
9
|
+
end
|
10
|
+
|
11
|
+
class DubyApp < HttpServlet
|
12
|
+
def_edb(list, 'com/ribrdb/list.dhtml')
|
13
|
+
|
14
|
+
def doGet(request, response)
|
15
|
+
returns :void
|
16
|
+
@posts = Post.all.run
|
17
|
+
response.getWriter.write(list)
|
18
|
+
end
|
19
|
+
|
20
|
+
def doPost(request, response)
|
21
|
+
post = Post.new
|
22
|
+
post.title = request.getParameter('title')
|
23
|
+
post.body = Text.new(request.getParameter('body'))
|
24
|
+
post.save
|
25
|
+
doGet(request, response)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import java.lang.System
|
2
|
+
|
3
|
+
def run
|
4
|
+
puts "Rendering"
|
5
|
+
y = -39.0
|
6
|
+
while y <= 39.0
|
7
|
+
puts
|
8
|
+
x = -39.0
|
9
|
+
while x <= 39.0
|
10
|
+
i = iterate(x/40.0,y/40.0)
|
11
|
+
if (i == 0)
|
12
|
+
print "*"
|
13
|
+
else
|
14
|
+
print " "
|
15
|
+
end
|
16
|
+
x += 1
|
17
|
+
end
|
18
|
+
y += 1
|
19
|
+
end
|
20
|
+
puts
|
21
|
+
end
|
22
|
+
|
23
|
+
def iterate(x:double,y:double)
|
24
|
+
cr = y-0.5
|
25
|
+
ci = x
|
26
|
+
zi = 0.0
|
27
|
+
zr = 0.0
|
28
|
+
i = 0
|
29
|
+
|
30
|
+
result = 0
|
31
|
+
while true
|
32
|
+
i += 1
|
33
|
+
temp = zr * zi
|
34
|
+
zr2 = zr * zr
|
35
|
+
zi2 = zi * zi
|
36
|
+
zr = zr2 - zi2 + cr
|
37
|
+
zi = temp + temp + ci
|
38
|
+
if (zi2 + zr2 > 16)
|
39
|
+
result = i
|
40
|
+
break
|
41
|
+
end
|
42
|
+
if (i > 1000)
|
43
|
+
result = 0
|
44
|
+
break
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
result
|
49
|
+
end
|
50
|
+
|
51
|
+
i = 0
|
52
|
+
while i < 10
|
53
|
+
start = System.currentTimeMillis
|
54
|
+
run
|
55
|
+
puts "Time: " + (System.currentTimeMillis - start) / 1000.0
|
56
|
+
i += 1
|
57
|
+
end
|
data/examples/edb.duby
ADDED
data/examples/fib.duby
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
import "java.lang.System"
|
2
|
+
|
3
|
+
def fib(a:int)
|
4
|
+
if a < 2
|
5
|
+
a
|
6
|
+
else
|
7
|
+
fib(a - 1) + fib(a - 2)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def bench(times:int)
|
12
|
+
while times > 0
|
13
|
+
time_start = System.currentTimeMillis
|
14
|
+
puts "fib(45):"
|
15
|
+
puts fib(45)
|
16
|
+
time_total = System.currentTimeMillis - time_start
|
17
|
+
puts "Total time:"
|
18
|
+
puts time_total
|
19
|
+
times -= 1
|
20
|
+
end
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
|
24
|
+
bench 10
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import 'java.util.ArrayList'
|
2
|
+
|
3
|
+
class Bar
|
4
|
+
def initialize
|
5
|
+
@a = ArrayList
|
6
|
+
end
|
7
|
+
|
8
|
+
def list=(a:ArrayList)
|
9
|
+
@a = a
|
10
|
+
end
|
11
|
+
|
12
|
+
def foo
|
13
|
+
puts @a
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
b = Bar.new
|
18
|
+
list = ArrayList.new
|
19
|
+
list.add('hello')
|
20
|
+
list.add('world')
|
21
|
+
b.list = list
|
22
|
+
b.foo
|