startup-time 1.2.0 → 1.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5edbc737357924e55026244d924546b02dd43c3f875c710a4174027abb0bfc82
4
- data.tar.gz: 8c79da2fbbbf34be5dc0bae8115b33a7ccbe681493c4efea6f86028c20ad1f2b
3
+ metadata.gz: fb5446ede5073351faeb7fee768f11d0bbbf8aa223cf5ad8f69b7782b63f91e3
4
+ data.tar.gz: 699c670e0386d4701a589d25e4467e3f36ad8c6d9baf2c49fc1b4819b35318c5
5
5
  SHA512:
6
- metadata.gz: d37390eae5748fde5435c8a261a7b6888f12c870424500124d6aa0d8ba6baa357c4de0846685013bb6f4cc3fac9b5470a4f167e265c775e1f2dcdcc520e7cb9a
7
- data.tar.gz: 4eb78e5f8a43691d8f898b9fab7a23219e831c583836cf43fece6b3c9d1dc1d8af24170a0df7096a14a244cb4bdcb398035d7d8337a944606c0f964fa79abe97
6
+ metadata.gz: c7f577bdf5e4d5782825efe6562e97b2cc3210fd0471faf61fc052f1fc6ed6f798b93d8349a13cd652953f68a69096c2fe9cd45109ba3d3f15bb81207d3360a6
7
+ data.tar.gz: a8a74489a53efc48456fd20af5533e716fbef5731a1b853fefd1b9565734c07ea8e8b1ae28ac065862aec9a4ad5b05e06364941575f2dfc2f17a8963bf6067aa
@@ -1,3 +1,10 @@
1
+ ## 1.3.0 - 2019-09-11
2
+
3
+ - bump the default minimum duration from 5s to 10s
4
+ - disable the Java tests (javac, java-native) if `java` is installed but
5
+ `javac` isn't
6
+ - add [Wren](http://wren.io/)
7
+
1
8
  ## 1.2.0 - 2019-07-15
2
9
 
3
10
  - add -t/--time option specifying the minimum length of time to run tests for
@@ -6,7 +13,7 @@
6
13
 
7
14
  ## 1.1.1 - 2019-07-13
8
15
 
9
- - add QuickJS
16
+ - add [QuickJS](https://bellard.org/quickjs/)
10
17
  - update deno version command
11
18
 
12
19
  ## 1.1.0 - 2019-02-27
data/README.md CHANGED
@@ -49,8 +49,11 @@ $ startup-time --only jvm
49
49
  # only run tests which finish quickly
50
50
  $ startup-time --only fast --omit slow-compile
51
51
 
52
- # minimum number of seconds to run the test suite for (default: 5)
52
+ # run the test suite for at least 10 seconds (default: 5)
53
53
  $ startup-time --time 10
54
+
55
+ # run each program 10 times
56
+ $ startup-time --count 10
54
57
  ```
55
58
 
56
59
  ### Sample Output
@@ -62,24 +65,25 @@ $ startup-time --time 10
62
65
  LuaJIT 0.64
63
66
  Go 0.66
64
67
  Rust 0.67
68
+ JavaScript (QuickJS) 0.83
65
69
  D (DMD) 0.88
66
- JavaScript (QuickJS) 0.92
67
- Lua 0.98
70
+ Lua 0.94
71
+ Java Native (GraalVM) 0.99
68
72
  D (GDC) 1.10
69
73
  Haskell (GHC) 1.14
70
- C++ (g++) 1.22
71
- Crystal 1.63
74
+ Wren 1.14
75
+ C++ (g++) 1.19
76
+ Crystal 1.55
72
77
  Perl 1.66
73
- Java Native (GraalVM) 1.95
74
- Bash 2.67
78
+ Bash 2.63
79
+ JavaScript (GraalVM) 3.88
75
80
  JavaScript (Deno) 11.15
76
81
  Python 3 22.09
77
- JavaScript (GraalVM) 32.38
82
+ Ruby (TruffleRuby) 33.59
78
83
  JavaScript (Node.js) 35.20
79
84
  Python 2 43.43
80
85
  Java 54.59
81
- Ruby 67.40
82
- Ruby (TruffleRuby) 81.77
86
+ Ruby 68.68
83
87
  Kotlin 103.02
84
88
  Scala 801.21
85
89
 
@@ -118,7 +122,7 @@ OPTIONS:
118
122
  -O, --omit LIST Don't run the specified tests (comma-separated list of IDs/groups)
119
123
  -q, --quiet Suppress all inessential output
120
124
  -t, --time INTEGER The minimum number of seconds to run the test suite for
121
- (minimum: 2, default: 5)
125
+ (minimum: 2, default: 10)
122
126
  -v, --verbose Enable verbose logging
123
127
  -V, --version Display the version and exit
124
128
  ```
@@ -134,6 +138,7 @@ OPTIONS:
134
138
 
135
139
  ## SEE ALSO
136
140
 
141
+ - [Gabriel439/bench](https://github.com/Gabriel439/bench) - a command-line benchmark tool written in Haskell
137
142
  - [gnustavo/startup-times](https://github.com/gnustavo/startup-times) - a script to investigate the startup times of several programming languages
138
143
  - [jwiegley/helloworld](https://github.com/jwiegley/helloworld) - a comparison of "Hello, world" startup times in various languages
139
144
  - [sharkdp/hyperfine](https://github.com/sharkdp/hyperfine) - a command-line benchmarking tool
@@ -144,7 +149,7 @@ OPTIONS:
144
149
 
145
150
  ## VERSION
146
151
 
147
- 1.2.0
152
+ 1.3.0
148
153
 
149
154
  ## COPYRIGHT AND LICENSE
150
155
 
@@ -64,35 +64,9 @@ module StartupTime
64
64
  def benchmark
65
65
  builder.build!
66
66
 
67
- # run a test if:
68
- #
69
- # - its interpreter exists
70
- # - it's a compiled executable (i.e. its compiler exists)
71
- #
72
- # otherwise, skip it
73
- runnable_tests = selected_tests.each_with_object([]) do |(id, test), tests|
74
- args = Array(test[:command])
75
-
76
- if args.length == 1 # native executable
77
- compiler = test[:compiler] || id
78
- path = File.absolute_path(args.first)
79
- next unless File.exist?(path)
80
- else # interpreter + source
81
- compiler = args.first
82
- path = which(compiler)
83
- next unless path
84
- end
85
-
86
- tests << {
87
- id: id,
88
- test: test,
89
- args: args,
90
- compiler: compiler,
91
- path: path,
92
- }
93
- end
67
+ tests = runnable_tests
94
68
 
95
- if runnable_tests.empty?
69
+ if tests.empty?
96
70
  puts '[]' if @json
97
71
  return
98
72
  end
@@ -100,12 +74,11 @@ module StartupTime
100
74
  spec = @options.spec
101
75
 
102
76
  if spec.type == :duration
103
- spec = spec.with(value: spec.value.to_f / runnable_tests.length)
77
+ spec = spec.with(value: spec.value.to_f / tests.length)
104
78
  end
105
79
 
106
- runnable_tests.shuffle.each do |config|
107
- config[:spec] = spec
108
- time(config)
80
+ tests.shuffle.each do |test|
81
+ time(spec, test)
109
82
  end
110
83
 
111
84
  sorted = @times.sort_by { |result| result[:time] }
@@ -131,9 +104,54 @@ module StartupTime
131
104
  end
132
105
  end
133
106
 
107
+ # return the subset of selected tests that are runnable.
108
+ #
109
+ # a test is runnable if these requirements are met:
110
+ #
111
+ # - (if it's interpreted): the interpreter exists
112
+ # - (if it's compiled): the compiler exists
113
+ #
114
+ # otherwise, skip it
115
+ #
116
+ # the compiler path is resolved in the builder, which can also disable a test
117
+ # (by setting test[:disabled] = true) if the compilation prerequisites aren't
118
+ # installed
119
+ #
120
+ # note that some tests are both interpreted and compiled, so both the
121
+ # compiler and the interpreter must exist, e.g.:
122
+ #
123
+ # - interpreter: java
124
+ # - compiler: javac
125
+
126
+ def runnable_tests
127
+ selected_tests.each_with_object([]) do |(id, test), tests|
128
+ next if test[:disabled]
129
+
130
+ args = Array(test[:command])
131
+ compiler = test[:compiler]
132
+
133
+ if args.length == 1 # native executable
134
+ executable = File.absolute_path(args.first)
135
+ next unless File.exist?(executable)
136
+ else # interpreter + source/bytecode
137
+ executable = which(args.first)
138
+ next unless (interpreter = executable)
139
+ end
140
+
141
+ tests << {
142
+ args: args,
143
+ compiler: compiler,
144
+ executable: executable,
145
+ id: id,
146
+ interpreter: interpreter,
147
+ test: test,
148
+ }
149
+ end
150
+ end
151
+
134
152
  # takes a test configuration and measures how long it takes to execute the
135
153
  # test
136
- def time(id:, test:, args:, compiler:, path:, spec:)
154
+ def time(spec, args:, compiler:, executable:, id:, interpreter:, test:)
137
155
  # dump the compiler/interpreter's version if running in verbose mode
138
156
  if @verbosity == :verbose
139
157
  puts
@@ -144,19 +162,22 @@ module StartupTime
144
162
  version = test[:version]
145
163
 
146
164
  unless version == false
147
- version ||= '%{compiler} --version'
165
+ # if the test is both interpreted and compiled, default to
166
+ # dumping the compiler version
167
+ version ||= '%{compiler} --version' if compiler
168
+ version ||= '%{interpreter} --version' if interpreter
148
169
 
149
- # the compiler may have been uninstalled since the target was
150
- # built, so make sure it still exists
151
- if (compiler_path = which(compiler))
152
- version_command = version % { compiler: compiler_path }
153
- sh version_command
154
- end
170
+ version_command = version % {
171
+ compiler: compiler || interpreter,
172
+ interpreter: interpreter,
173
+ }
174
+
175
+ sh version_command
155
176
  end
156
177
  end
157
178
 
158
179
  argv0 = args.shift
159
- command = [path, *args]
180
+ command = [executable, *args]
160
181
 
161
182
  unless @verbosity == :quiet
162
183
  if @verbosity == :verbose
@@ -190,7 +211,7 @@ module StartupTime
190
211
 
191
212
  loop do
192
213
  time = Benchmark.realtime do
193
- system([path, argv0], *args, out: File::NULL)
214
+ system([executable, argv0], *args, out: File::NULL)
194
215
  end
195
216
 
196
217
  elapsed = Time.now - start
@@ -201,7 +222,7 @@ module StartupTime
201
222
  else # how many times to run the tests
202
223
  spec.value.times do
203
224
  times << Benchmark.realtime do
204
- system([path, argv0], *args, out: File::NULL)
225
+ system([executable, argv0], *args, out: File::NULL)
205
226
  end
206
227
  end
207
228
  end
@@ -1,9 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rake'
4
+ require 'set'
4
5
  require 'shellwords'
6
+
7
+ require_relative 'refinements'
5
8
  require_relative 'util'
6
9
 
10
+ using StartupTime::Refinements
11
+
7
12
  module StartupTime
8
13
  # StartupTime::Builder - clean and prepare the build directory
9
14
  #
@@ -16,6 +21,11 @@ module StartupTime
16
21
  # once these tasks are complete, everything required to run the benchmark tests
17
22
  # will be available in the build directory
18
23
  class Builder
24
+ CUSTOM_COMPILER = {
25
+ 'kotlinc-native': :compile_kotlinc_native,
26
+ 'java-native': :compile_java_native,
27
+ }
28
+
19
29
  SRC_DIR = File.absolute_path('../../resources/src', __dir__)
20
30
 
21
31
  include Rake::DSL
@@ -23,17 +33,12 @@ module StartupTime
23
33
  include Services.mixin %i[options selected_tests]
24
34
 
25
35
  def initialize
26
- @verbosity = options.verbosity
27
36
  @build_dir = options.build_dir
37
+ @verbosity = options.verbosity
28
38
 
29
39
  Rake.verbose(@verbosity != :quiet)
30
40
  end
31
41
 
32
- # remove the build directory and its contents
33
- def clean!
34
- rm_rf @build_dir
35
- end
36
-
37
42
  # ensure the build directory is in a fit state to run the tests i.e. copy
38
43
  # source files and compile target files
39
44
  def build!
@@ -47,27 +52,13 @@ module StartupTime
47
52
  Rake::Task[:build].invoke
48
53
  end
49
54
 
50
- private
51
-
52
- # a wrapper for Rake's +FileUtils#sh+ method (which wraps +Kernel#spawn+)
53
- # which allows the command's environment to be included in the final options
54
- # hash rather than cramming it in as the first argument i.e.:
55
- #
56
- # before:
57
- #
58
- # sh FOO_VERBOSE: "0", "foo -c hello.foo -o hello", out: File::NULL
59
- #
60
- # after:
61
- #
62
- # shell "foo -c hello.foo -o hello", env: { FOO_VERBOSE: "0" }, out: File::NULL
63
- #
64
- def shell(args, **options)
65
- args = Array(args) # args is a string or array
66
- env = options.delete(:env)
67
- args.unshift(env) if env
68
- sh(*args, options)
55
+ # remove the build directory and its contents
56
+ def clean!
57
+ rm_rf @build_dir
69
58
  end
70
59
 
60
+ private
61
+
71
62
  # a conditional version of Rake's `file` task which compiles a source file to
72
63
  # a target file via the block provided. if the compiler isn't installed, the
73
64
  # task is skipped.
@@ -88,6 +79,12 @@ module StartupTime
88
79
 
89
80
  return unless (compiler_path = which(compiler))
90
81
 
82
+ # update the test spec's compiler field to point to the compiler's
83
+ # absolute path
84
+ #
85
+ # XXX mutation/side-effect
86
+ test[:compiler] = compiler_path
87
+
91
88
  # the source filename must be supplied
92
89
  source = test.fetch(:source)
93
90
 
@@ -97,17 +94,13 @@ module StartupTime
97
94
 
98
95
  if command.length == 1
99
96
  target = command.first
100
- elsif source.match?(/^[A-Z]/) # JVM language
97
+ elsif source.match?(/\A[A-Z]/) # JVM language
101
98
  target = source.pathmap('%n.class')
102
99
  else # native executable
103
100
  target = '%s.out' % source
104
101
  end
105
102
  end
106
103
 
107
- # update the test spec's compiler field to point to the compiler's
108
- # absolute path (which may be mocked)
109
- test = test.merge(compiler: compiler_path)
110
-
111
104
  # pass the test object as the `file(...) { ... }` block's second
112
105
  # argument. Rake passes an instance of +Rake::TaskArguments+, a Hash-like
113
106
  # object which provides access to the command-line arguments for a Rake
@@ -119,22 +112,96 @@ module StartupTime
119
112
  # declare the prerequisites for the target file.
120
113
  # compiler_path: recompile if the compiler has been
121
114
  # updated since the target was last built
122
- file(target => [source, compiler_path], &wrapper)
115
+ file_task = file(target => [source, compiler_path], &wrapper)
123
116
 
124
- # add the target file to the build task
125
- task :build => target
117
+ # register the task under the supplied ID so it can be referenced by name
118
+ # rather than by filename
119
+ compile_task = task(id => file_task)
126
120
 
127
- target
121
+ # add the task which builds the target file to the build task as a
122
+ # prerequisite
123
+ # task(:build => target) unless options[:connect] == false
124
+ task(:build => compile_task) unless options[:connect] == false
125
+
126
+ compile_task
128
127
  end
129
128
 
130
- # register the prerequisites of the :build task. creates file tasks which:
131
- #
132
- # a) keep the build directory sources in sync with the source directory
133
- # b) rebuild target files if their source files are modified
134
- # c) rebuild target files if their compilers are updated
135
- def register_tasks
136
- copy_source_files
137
- compile_target_files
129
+ # native-image compiles .class files to native binaries. it differs from
130
+ # the other tasks because it depends on a target file rather than a
131
+ # source file i.e. it depends on the target of the javac task
132
+ def compile_java_native
133
+ java_native = compile_if('java-native', connect: false) do |t, test|
134
+ # XXX native-image doesn't provide a way to silence its output, so
135
+ # send it to /dev/null
136
+ shell [test[:compiler], "-H:Name=#{t.target}", '--no-server', '-O1', t.source.ext], {
137
+ out: File::NULL
138
+ }
139
+ end
140
+
141
+ return unless java_native # return a falsey value i.e. disable the test
142
+
143
+ javac = Rake.application.lookup(:javac) || begin
144
+ compile_if(:javac, connect: false, force: true) do |task, test|
145
+ run(test[:compile], task, test)
146
+ end
147
+ end
148
+
149
+ return unless javac # disable this test if javac is not available
150
+
151
+ # prepend the javac task to this task as a prerequisite
152
+ java_native.prepend(javac)
153
+
154
+ # register this task as a dependency of the root (:build) task
155
+ task(:build => java_native)
156
+
157
+ # uncomment this to see the dependency graph
158
+ # pp Rake::Task.tasks
159
+
160
+ java_native
161
+ end
162
+
163
+ # implement the compilation step for the kotlinc-native test manually. we
164
+ # need to do this to work around the compiler's non-standard behavior
165
+ def compile_kotlinc_native
166
+ compile_if 'kotlinc-native' do |t, test|
167
+ # XXX kotlinc-native doesn't provide a way to silence
168
+ # its debug messages, so file them under /dev/null
169
+ shell %W[#{test[:compiler]} -opt -o #{t.target} #{t.source}], out: File::NULL
170
+
171
+ # XXX work around a kotlinc-native "feature"
172
+ # https://github.com/JetBrains/kotlin-native/issues/967
173
+ exe = "#{t.target}.kexe" # XXX or .exe, or...
174
+ verbose(@verbosity == :verbose) { mv exe, t.target } if File.exist?(exe)
175
+ end
176
+ end
177
+
178
+ # make sure the target files (e.g. native executables and JVM .class files)
179
+ # are built if their compilers are installed
180
+ def compile_target_files
181
+ selected_tests.each do |id, test|
182
+ enabled = true
183
+
184
+ # handle the tests which have compile templates by a) turning them into
185
+ # blocks which substitute the compiler, source file and target file into
186
+ # the corresponding placeholders in the template, then b) executing the
187
+ # resulting command via +shell+
188
+
189
+ if (command = test[:compile])
190
+ block = ->(task, test_) { run(command, task, test_) }
191
+ enabled = compile_if(id, &block)
192
+ end
193
+
194
+ test[:disabled] = !enabled
195
+ end
196
+
197
+ # do these after the main pass so they can reuse tasks (if available)
198
+ # e.g. the javac task
199
+
200
+ CUSTOM_COMPILER.each do |id, meth|
201
+ selected_tests[id].tap do |test|
202
+ test[:disabled] = !send(meth) if test
203
+ end
204
+ end
138
205
  end
139
206
 
140
207
  # ensure each file in the source directory is mirrored to the build
@@ -152,6 +219,16 @@ module StartupTime
152
219
  end
153
220
  end
154
221
 
222
+ # register the prerequisites of the :build task. creates file tasks which:
223
+ #
224
+ # a) keep the build directory sources in sync with the source directory
225
+ # b) rebuild target files if their source files are modified
226
+ # c) rebuild target files if their compilers are updated
227
+ def register_tasks
228
+ copy_source_files
229
+ compile_target_files
230
+ end
231
+
155
232
  # run a shell command (string) by substituting the compiler path, source
156
233
  # file, and target file into the supplied template string and executing the
157
234
  # resulting command with the test's (optional) environment hash
@@ -159,63 +236,30 @@ module StartupTime
159
236
  replacements = {
160
237
  compiler: Shellwords.escape(test[:compiler]),
161
238
  source: Shellwords.escape(task.source),
162
- target: Shellwords.escape(task.name),
239
+ target: Shellwords.escape(task.target),
163
240
  }
164
241
 
165
242
  command = template % replacements
166
243
  shell(command, env: test[:env])
167
244
  end
168
245
 
169
- # make sure the target files (e.g. native executables and JVM .class files)
170
- # are built if their compilers are installed
171
- def compile_target_files
172
- # handle the tests which have compile templates by turning them into
173
- # blocks which substitute the compiler, source file and target file into
174
- # the corresponding placeholders in the template and then execute the
175
- # command via `shell`
176
- selected_tests.each do |id, selected|
177
- if (command = selected[:compile])
178
- block = ->(task, test) { run(command, task, test) }
179
- compile_if(id, &block)
180
- end
181
- end
182
-
183
- # native-image compiles .class files to native binaries. it differs from
184
- # the other tasks because it depends on a target file rather than a
185
- # source file i.e. it depends on the target of the javac task
186
- java_native = compile_if('java-native', connect: false) do |t, test|
187
- # XXX native-image doesn't provide a way to silence its output, so
188
- # send it to /dev/null
189
- shell [test[:compiler], "-H:Name=#{t.name}", '--no-server', '-O1', t.source.ext], {
190
- out: File::NULL
191
- }
192
- end
193
-
194
- if java_native
195
- javac = compile_if(:javac, connect: false, force: true) do |task, test|
196
- run('%{compiler} -d . %{source}', task, test)
197
- end
198
-
199
- if javac
200
- task java_native => javac
201
- task :build => java_native
202
- end
203
- else
204
- compile_if :javac do |task, test|
205
- run('%{compiler} -d . %{source}', task, test)
206
- end
207
- end
208
-
209
- compile_if 'kotlinc-native' do |t, test|
210
- # XXX kotlinc-native doesn't provide a way to silence
211
- # its debug messages, so file them under /dev/null
212
- shell %W[#{test[:compiler]} -opt -o #{t.name} #{t.source}], out: File::NULL
213
-
214
- # XXX work around a kotlinc-native "feature"
215
- # https://github.com/JetBrains/kotlin-native/issues/967
216
- exe = "#{t.name}.kexe" # XXX or .exe, or...
217
- verbose(@verbosity == :verbose) { mv exe, t.name } if File.exist?(exe)
218
- end
246
+ # a wrapper for Rake's +FileUtils#sh+ method (which wraps +Kernel#spawn+)
247
+ # which allows the command's environment to be included in the final options
248
+ # hash rather than cramming it in as the first argument i.e.:
249
+ #
250
+ # before:
251
+ #
252
+ # sh FOO_VERBOSE: "0", "foo -c hello.foo -o hello", out: File::NULL
253
+ #
254
+ # after:
255
+ #
256
+ # shell "foo -c hello.foo -o hello", env: { FOO_VERBOSE: "0" }, out: File::NULL
257
+ #
258
+ def shell(args, **options)
259
+ args = Array(args) # args is a string or array
260
+ env = options.delete(:env)
261
+ args.unshift(env) if env
262
+ sh(*args, options)
219
263
  end
220
264
  end
221
265
  end
@@ -9,7 +9,7 @@ module StartupTime
9
9
  # overridden on the command line
10
10
  class Options
11
11
  BUILD_DIR = EnvPaths.get('startup-time', suffix: false).cache
12
- DEFAULT_DURATION = 5
12
+ DEFAULT_DURATION = 10
13
13
  MINIMUM_DURATION = 2
14
14
 
15
15
  Spec = Value.new(:type, :value)
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rake'
4
+
5
+ module StartupTime
6
+ # add some missing methods/aliases to Rake tasks
7
+ # TODO move to a gem (or PR)
8
+ module Refinements
9
+ refine Rake::FileTask do
10
+ alias_method :target, :name
11
+ end
12
+
13
+ refine Rake::Task do
14
+ alias_method :append, :enhance
15
+
16
+ def prepend(deps = nil, &block)
17
+ prerequisites.replace(Array(deps) | prerequisites) if deps
18
+ actions.unshift(block) if block_given?
19
+ self
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StartupTime
4
- VERSION = '1.2.0'
4
+ VERSION = '1.3.0'
5
5
  end
@@ -0,0 +1 @@
1
+ System.print("Hello, world!")
@@ -21,6 +21,7 @@ crystal:
21
21
  - slow-compile
22
22
  source: hello.cr
23
23
  compile: '%{compiler} build --release -o %{target} %{source}'
24
+ version: '%{compiler} --version | head -n1'
24
25
  command: hello.cr.out
25
26
  env:
26
27
  CRYSTAL_CACHE_DIR: .crystal
@@ -123,7 +124,8 @@ javac:
123
124
  - java
124
125
  - jvm
125
126
  source: HelloJava.java
126
- version: '%{compiler} -version'
127
+ compile: '%{compiler} -d . %{source}'
128
+ version: '%{compiler} -version' # we could dump the interpeter version as well/instead
127
129
  command:
128
130
  - java
129
131
  - HelloJava
@@ -313,3 +315,12 @@ truffle-ruby:
313
315
  command:
314
316
  - truffleruby
315
317
  - hello.rb
318
+
319
+ wren:
320
+ name: Wren
321
+ groups:
322
+ - fast
323
+ - script
324
+ command:
325
+ - wren
326
+ - hello.wren
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: startup-time
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - chocolateboy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-15 00:00:00.000000000 Z
11
+ date: 2019-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -180,6 +180,7 @@ files:
180
180
  - lib/startup_time/app.rb
181
181
  - lib/startup_time/builder.rb
182
182
  - lib/startup_time/options.rb
183
+ - lib/startup_time/refinements.rb
183
184
  - lib/startup_time/registry.rb
184
185
  - lib/startup_time/services.rb
185
186
  - lib/startup_time/util.rb
@@ -202,6 +203,7 @@ files:
202
203
  - resources/src/hello.py
203
204
  - resources/src/hello.rb
204
205
  - resources/src/hello.rs
206
+ - resources/src/hello.wren
205
207
  - resources/tests.yaml
206
208
  homepage: https://github.com/chocolateboy/startup-time
207
209
  licenses:
@@ -226,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
228
  - !ruby/object:Gem::Version
227
229
  version: '0'
228
230
  requirements: []
229
- rubygems_version: 3.0.4
231
+ rubygems_version: 3.0.6
230
232
  signing_key:
231
233
  specification_version: 4
232
234
  summary: A command-line tool to measure the startup times of programs in various languages