jrjackson 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/.jrubyrc ADDED
@@ -0,0 +1,433 @@
1
+ ################################################################################
2
+ # compiler settings
3
+ ################################################################################
4
+
5
+ # Set compilation mode. JIT = at runtime; FORCE = before execution.
6
+ # Options: [JIT, FORCE, OFF, OFFIR], Default: JIT.
7
+ # compile.mode=JIT
8
+ compile.mode=FORCE
9
+
10
+ # Dump to console all bytecode generated at runtime.
11
+ # Options: [true, false], Default: false.
12
+ compile.dump=false
13
+
14
+ # (EXPERIMENTAL) Turn on compilation without polling for "unsafe" thread events.
15
+ # Options: [true, false], Default: false.
16
+ compile.threadless=false
17
+
18
+ # Turn on fast operators for Fixnum and Float.
19
+ # Options: [true, false], Default: true.
20
+ compile.fastops=true
21
+
22
+ # Set the number of lines at which compiled bodies are "chained".
23
+ # Options: [Integer], Default: 500.
24
+ compile.chainsize=500
25
+
26
+ # Generate method bindings (handles) for compiled methods lazily.
27
+ # Options: [true, false], Default: false.
28
+ compile.lazyHandles=false
29
+
30
+ # Enable or disable peephole optimizations.
31
+ # Options: [true, false], Default: true.
32
+ compile.peephole=true
33
+
34
+ # Compile calls without guards, for experimentation.
35
+ # Options: [true, false], Default: false.
36
+ compile.noguards=false
37
+
38
+ # Compile with all "mostly harmless" compiler optimizations.
39
+ # Options: [true, false], Default: false.
40
+ compile.fastest=false
41
+
42
+ # Compile obj.__send__(<literal>, ...) as obj.<literal>(...).
43
+ # Options: [true, false], Default: false.
44
+ compile.fastsend=false
45
+
46
+ # Return true from multiple assignment instead of a new array.
47
+ # Options: [true, false], Default: false.
48
+ compile.fastMasgn=false
49
+
50
+ # Use invokedynamic for optimizing Ruby code
51
+ # Options: [true, false], Default: false.
52
+ # compile.invokedynamic=false
53
+ compile.invokedynamic=true
54
+
55
+
56
+ ################################################################################
57
+ # invokedynamic settings
58
+ ################################################################################
59
+
60
+ # Maximum call site failures after which to inline cache.
61
+ # Options: [Integer], Default: 1000.
62
+ invokedynamic.maxfail=1000
63
+
64
+ # Maximum polymorphism of PIC binding.
65
+ # Options: [Integer], Default: 2.
66
+ invokedynamic.maxpoly=2
67
+
68
+ # Log binding of invokedynamic call sites.
69
+ # Options: [true, false], Default: false.
70
+ invokedynamic.log.binding=false
71
+
72
+ # Log invokedynamic-based constant lookups.
73
+ # Options: [true, false], Default: false.
74
+ invokedynamic.log.constants=false
75
+
76
+ # Enable all possible uses of invokedynamic.
77
+ # Options: [true, false], Default: false.
78
+ invokedynamic.all=false
79
+
80
+ # Enable all safe (but maybe not fast) uses of invokedynamic.
81
+ # Options: [true, false], Default: false.
82
+ invokedynamic.safe=false
83
+
84
+ # Enable invokedynamic for method invocations.
85
+ # Options: [true, false], Default: true.
86
+ invokedynamic.invocation=true
87
+
88
+ # Use SwitchPoint for class modification guards on invocations.
89
+ # Options: [true, false], Default: true.
90
+ invokedynamic.invocation.switchpoint=true
91
+
92
+ # Also bind indirect method invokers to invokedynamic.
93
+ # Options: [true, false], Default: true.
94
+ invokedynamic.invocation.indirect=true
95
+
96
+ # Bind Ruby to Java invocations with invokedynamic.
97
+ # Options: [true, false], Default: true.
98
+ invokedynamic.invocation.java=true
99
+
100
+ # Bind Ruby attribue invocations directly to invokedynamic.
101
+ # Options: [true, false], Default: true.
102
+ invokedynamic.invocation.attr=true
103
+
104
+ # Bind Fixnum and Float math using optimized logic.
105
+ # Options: [true, false], Default: true.
106
+ invokedynamic.invocation.fastops=true
107
+
108
+ # Use invokedynamic to load cached values like literals and constants.
109
+ # Options: [true, false], Default: true.
110
+ invokedynamic.cache=true
111
+
112
+ # Use invokedynamic to load constants.
113
+ # Options: [true, false], Default: true.
114
+ invokedynamic.cache.constants=true
115
+
116
+ # Use invokedynamic to load literals.
117
+ # Options: [true, false], Default: true.
118
+ invokedynamic.cache.literals=true
119
+
120
+ # Use invokedynamic to get/set instance variables.
121
+ # Options: [true, false], Default: true.
122
+ invokedynamic.cache.ivars=true
123
+
124
+ # Use ClassValue to store class-specific data.
125
+ # Options: [true, false], Default: false.
126
+ invokedynamic.class.values=false
127
+
128
+ # ################################################################################
129
+ # # jit settings
130
+ # ################################################################################
131
+
132
+ # # Set the JIT threshold to the specified method invocation count.
133
+ # # Options: [Integer], Default: 50.
134
+ jit.threshold=1
135
+
136
+ # # Set the max count of active methods eligible for JIT-compilation.
137
+ # # Options: [Integer], Default: 4096.
138
+ jit.max=16384
139
+
140
+ # # Set the maximum full-class byte size allowed for jitted methods.
141
+ # # Options: [Integer], Default: 30000.
142
+ # jit.maxsize=30000
143
+
144
+ # # Enable JIT logging (reports successful compilation).
145
+ # # Options: [true, false], Default: false.
146
+ # jit.logging=false
147
+
148
+ # # Enable verbose JIT logging (reports failed compilation).
149
+ # # Options: [true, false], Default: false.
150
+ # jit.logging.verbose=false
151
+
152
+ # # Enable stdout dumping of JITed bytecode.
153
+ # # Options: [true, false], Default: false.
154
+ # jit.dumping=false
155
+
156
+ # # Log a message every n methods JIT compiled.
157
+ # # Options: [Integer], Default: 0.
158
+ # jit.logEvery=0
159
+
160
+ # # Exclude methods from JIT. Comma delimited.
161
+ # # Options: [ClsOrMod, ClsOrMod::method_name, -::method_name], Default: none.
162
+ # jit.exclude=none
163
+
164
+ # # Cache jitted method in-memory bodies across runtimes and loads.
165
+ # # Options: [true, false], Default: true.
166
+ # jit.cache=true
167
+
168
+ # # Save jitted methods to <dir> as they're compiled, for future runs.
169
+ # # Options: [dir], Default: null.
170
+ # jit.codeCache=null
171
+
172
+ # # Log loading of JITed bytecode.
173
+ # # Options: [true, false], Default: false.
174
+ # jit.debug=false
175
+
176
+ # # Run the JIT compiler in a background thread.
177
+ # # Options: [true, false], Default: true.
178
+ # jit.background=true
179
+
180
+
181
+ # ################################################################################
182
+ # # intermediate representation settings
183
+ # ################################################################################
184
+
185
+ # # Debug generation of JRuby IR.
186
+ # # Options: [true, false], Default: false.
187
+ # ir.debug=false
188
+
189
+ # # [EXPT]: Profile IR code during interpretation.
190
+ # # Options: [true, false], Default: false.
191
+ # ir.profile=false
192
+
193
+ # # Debug compilation of JRuby IR.
194
+ # # Options: [true, false], Default: false.
195
+ # ir.compiler.debug=false
196
+
197
+ # # Specify comma delimeted list of passes to run.
198
+ # # Options: [String], Default: null.
199
+ # ir.passes=null
200
+
201
+ # # Specify comma delimeted list of passes to run after inlining a method.
202
+ # # Options: [String], Default: null.
203
+ # ir.inline_passes=null
204
+
205
+
206
+ # ################################################################################
207
+ # # native settings
208
+ # ################################################################################
209
+
210
+ # # Enable/disable native code, including POSIX features and C exts.
211
+ # # Options: [true, false], Default: true.
212
+ # native.enabled=true
213
+
214
+ # # Enable verbose logging of native extension loading.
215
+ # # Options: [true, false], Default: false.
216
+ # native.verbose=false
217
+
218
+ # # Enable or disable C extension support.
219
+ # # Options: [true, false], Default: false.
220
+ # cext.enabled=false
221
+
222
+ # # Dump bytecode-generated FFI stubs to console.
223
+ # # Options: [true, false], Default: false.
224
+ # ffi.compile.dump=false
225
+
226
+ # # Number of FFI invocations before generating a bytecode stub.
227
+ # # Options: [Integer], Default: 100.
228
+ # ffi.compile.threshold=100
229
+
230
+ # # Use invokedynamic to bind FFI invocations.
231
+ # # Options: [true, false], Default: false.
232
+ # ffi.compile.invokedynamic=false
233
+
234
+
235
+ # ################################################################################
236
+ # # thread pooling settings
237
+ # ################################################################################
238
+
239
+ # # Enable reuse of native threads via a thread pool.
240
+ # # Options: [true, false], Default: false.
241
+ # thread.pool.enabled=false
242
+
243
+ # # The minimum number of threads to keep alive in the pool.
244
+ # # Options: [Integer], Default: 0.
245
+ # thread.pool.min=0
246
+
247
+ # # The maximum number of threads to allow in the pool.
248
+ # # Options: [Integer], Default: 2147483647.
249
+ # thread.pool.max=2147483647
250
+
251
+ # # The maximum number of seconds to keep alive an idle thread.
252
+ # # Options: [Integer], Default: 60.
253
+ # thread.pool.ttl=60
254
+
255
+
256
+ ################################################################################
257
+ # miscellaneous settings
258
+ ################################################################################
259
+
260
+ # Specify the major Ruby version to be compatible with.
261
+ # Options: [1.8, 1.9, 2.0], Default: 1.9.
262
+ compat.version=1.9
263
+
264
+ # Enable or disable ObjectSpace.each_object.
265
+ # Options: [true, false], Default: false.
266
+ objectspace.enabled=false
267
+
268
+ # Enable or disable SipHash for String hash function.
269
+ # Options: [true, false], Default: false.
270
+ siphash.enabled=false
271
+
272
+ # Set in-process launching of e.g. system('ruby ...').
273
+ # Options: [true, false], Default: false.
274
+ launch.inproc=false
275
+
276
+ # Specify the major Java bytecode version.
277
+ # Options: [1.5, 1.6, 1.7], Default: 1.7.
278
+ bytecode.version=1.7
279
+
280
+ # Set whether JMX management is enabled.
281
+ # Options: [true, false], Default: false.
282
+ management.enabled=false
283
+
284
+ # Make non-local flow jumps generate backtraces.
285
+ # Options: [true, false], Default: false.
286
+ jump.backtrace=false
287
+
288
+ # Do not unwrap process streams (issue on some recent JVMs).
289
+ # Options: [true, false], Default: false.
290
+ process.noUnwrap=false
291
+
292
+ # Before instantiation, stand up a real Java class for ever Ruby class.
293
+ # Options: [true, false], Default: false.
294
+ reify.classes=false
295
+
296
+ # Log errors during reification (reify.classes=true).
297
+ # Options: [true, false], Default: false.
298
+ reify.logErrors=false
299
+
300
+ # Use reflection for binding methods, not generated bytecode.
301
+ # Options: [true, false], Default: false.
302
+ reflected.handles=false
303
+
304
+ # Enable colorized backtraces.
305
+ # Options: [true, false], Default: false.
306
+ backtrace.color=false
307
+
308
+ # Set the style of exception backtraces.
309
+ # Options: [normal, raw, full, mri], Default: normal.
310
+ backtrace.style=normal
311
+
312
+ # Mask .java lines in Ruby backtraces.
313
+ # Options: [true, false], Default: false.
314
+ backtrace.mask=false
315
+
316
+ # Set the signal used for dumping thread stacks.
317
+ # Options: [USR1, USR2, etc], Default: USR2.
318
+ thread.dump.signal=USR2
319
+
320
+ # Use native impls for parts of net/protocol.
321
+ # Options: [true, false], Default: false.
322
+ native.net.protocol=false
323
+
324
+ # Use JVM coroutines for Fiber.
325
+ # Options: [true, false], Default: false.
326
+ fiber.coroutines=false
327
+
328
+ # Use a single global lock for requires.
329
+ # Options: [true, false], Default: false.
330
+ global.require.lock=false
331
+
332
+ # Do a true process-obliterating native exec for Kernel#exec.
333
+ # Options: [true, false], Default: true.
334
+ native.exec=true
335
+
336
+
337
+ # ################################################################################
338
+ # # debugging and logging settings
339
+ # ################################################################################
340
+
341
+ # # Log require/load file searches.
342
+ # # Options: [true, false], Default: false.
343
+ # debug.loadService=false
344
+
345
+ # # Log require/load parse+evaluate times.
346
+ # # Options: [true, false], Default: false.
347
+ # debug.loadService.timing=false
348
+
349
+ # # Log externally-launched processes.
350
+ # # Options: [true, false], Default: false.
351
+ # debug.launch=false
352
+
353
+ # # Set whether full traces are enabled (c-call/c-return).
354
+ # # Options: [true, false], Default: false.
355
+ # debug.fullTrace=false
356
+
357
+ # # Print which script is executed by '-S' flag.
358
+ # # Options: [true, false], Default: false.
359
+ # debug.scriptResolution=false
360
+
361
+ # # disables JRuby impl script loads and prints parse exceptions
362
+ # # Options: [true, false], Default: false.
363
+ # debug.parser=false
364
+
365
+ # # Generate backtraces for heavily-used Errno exceptions (EAGAIN).
366
+ # # Options: [true, false], Default: false.
367
+ # errno.backtrace=false
368
+
369
+ # # Log every time an exception is constructed.
370
+ # # Options: [true, false], Default: false.
371
+ # log.exceptions=false
372
+
373
+ # # Log every time an exception backtrace is generated.
374
+ # # Options: [true, false], Default: false.
375
+ # log.backtraces=false
376
+
377
+ # # Log every time a Kernel#caller backtrace is generated.
378
+ # # Options: [true, false], Default: false.
379
+ # log.callers=false
380
+
381
+ # # Log every time a built-in warning backtrace is generated.
382
+ # # Options: [true, false], Default: false.
383
+ # log.warnings=false
384
+
385
+ # # Use specified class for logging.
386
+ # # Options: [class name], Default: org.jruby.util.log.JavaUtilLoggingLogger.
387
+ # logger.class=org.jruby.util.log.JavaUtilLoggingLogger
388
+
389
+
390
+ # ################################################################################
391
+ # # java integration settings
392
+ # ################################################################################
393
+
394
+ # # Try to set inaccessible Java methods to be accessible.
395
+ # # Options: [true, false], Default: true.
396
+ # ji.setAccessible=true
397
+
398
+ # # Log whether setAccessible is working.
399
+ # # Options: [true, false], Default: false.
400
+ # ji.logCanSetAccessible=false
401
+
402
+ # # Allow Capitalized Java pacakge names.
403
+ # # Options: [true, false], Default: false.
404
+ # ji.upper.case.package.name.allowed=false
405
+
406
+ # # Use java.lang.reflect.Proxy for interface impl.
407
+ # # Options: [true, false], Default: false.
408
+ # interfaces.useProxy=false
409
+
410
+ # # Use generated handles instead of reflection for calling Java.
411
+ # # Options: [true, false], Default: false.
412
+ # java.handles=false
413
+
414
+ # # Extend Java classes without using a proxy object.
415
+ # # Options: [true, false], Default: false.
416
+ # ji.newStyleExtension=false
417
+
418
+ # # Cache Java object wrappers between calls.
419
+ # # Options: [true, false], Default: true.
420
+ # ji.objectProxyCache=true
421
+
422
+ # # Allow external envs to replace JI proxy class factory
423
+ # # Options: [String], Default: null.
424
+ # ji.proxyClassFactory=null
425
+
426
+
427
+ # ################################################################################
428
+ # # profiling settings
429
+ # ################################################################################
430
+
431
+ # # Maximum number of methods to consider for profiling.
432
+ # # Options: [Integer], Default: 100000.
433
+ # profile.max.methods=100000
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source "https://rubygems.org"
3
3
 
4
4
  group :development do
5
5
  gem 'gson', '>= 0.6'
6
- gem 'json', '~> 1.7'
6
+ gem 'json', '~> 1.8'
7
7
  end
8
8
 
9
9
  gemspec
data/README.md CHANGED
@@ -4,56 +4,65 @@ Apache License 2.0 see http://www.apache.org/licenses/LICENSE-2.0
4
4
 
5
5
  Jrjackson:
6
6
 
7
- a jruby library wrapping the JAVA jackson jars
7
+ a jruby library wrapping the JAVA Jackson jars
8
8
 
9
- Version: 0.0.9
9
+ Version: 0.2.0
10
10
 
11
11
  NOTE: Smile support has been temporarily dropped
12
12
 
13
13
  The code has been refactored to use almost all Java.
14
14
 
15
- There is shortly to be a MultiJson adapter added for JrJackson
15
+ There is now a MultiJson adapter added for JrJackson
16
16
 
17
- provides:
17
+ JrJackson provides:
18
18
 
19
19
  ```
20
- JrJackson::Json.load(str, options) -> hash like object
20
+ JrJackson::Json.load(string, options) -> hash like object
21
21
  aliased as parse
22
22
  JrJackson::Json.dump(obj) -> json string
23
23
  aliased as generate
24
24
  ```
25
25
 
26
26
  By default the load method will return Ruby objects (Hashes have string keys).
27
- The options hash respects two symbol keys
27
+ The options hash respects three symbol keys
28
28
  :symbolize_keys
29
29
  Will return symbol keys in hashes
30
30
  :raw
31
31
  Will return JRuby wrapped java objects that quack like ruby objects
32
32
  This is the fastest option
33
+ :use_bigdecimal
34
+ Will return BigDecimal objects instead of Float
35
+ If used with the :raw option you will get Java::JavaMath::BigDecimal objects
36
+ otherwise they are Ruby BigDecimal
33
37
 
34
- Behind the scenes there are three Ruby sub modules of the JrJackson module
35
- ```
36
- JrJackson::Str
37
- JrJackson::Sym
38
- JrJackson::Raw
38
+ Note: the dump method expects that the values of hashes or arrays are JSON data types,
39
+ the only exception to this is Ruby Symbol as values, they are converted to java strings
40
+ during serialization. All other objects should be converted to JSON data types before
41
+ serialization.
39
42
 
40
- These all have the same method signatures - they map to different java classes
41
- that parse appropriately
42
- ```
43
+ There are two Ruby sub modules of the JrJackson module
44
+
45
+ JrJackson::Json, this is the general external facade used by MultiJson, and is pure Ruby
46
+ JrJackson::Raw, this is used by the Json module, it is defined in Java with annotations
47
+ exposing it as a Ruby module with module methods.
48
+
49
+ If you are using JrJackson directly and not via MultiJson then you can take advantage of
50
+ optimised Java methods parse_raw, parse_sym and parse_str. Please look at the tests and
51
+ benchmarks for examples.
43
52
 
44
53
  Credit to Chuck Remes for the benchmark and initial
45
54
  investigation when the jruby, json gem and the jackson
46
55
  libraries were young.
47
56
 
48
- I compared Json (java) 1.7.7, Gson 0.6.1 and jackson 2.1.4 on jruby 1.7.3 and Java 7
57
+ I compared Json (java) 1.8, Gson 0.6.1 and jackson 2.2.2 on jruby 1.7.4 and OpenJDK 64-Bit Server VM 1.7.0_21-b02
49
58
  ```
50
59
  user system total real
51
- ruby parse: 10.300000 0.020000 10.320000 ( 10.014000)
52
- gson parse: 11.270000 0.010000 11.280000 ( 10.958000)
53
- jrjackson parse raw: 4.840000 0.080000 4.920000 ( 3.767000)
54
- jrjackson parse symbol keys: 5.130000 0.010000 5.140000 ( 4.975000)
55
- jrjackson parse string keys: 7.370000 0.010000 7.380000 ( 7.223000)
56
- ruby generate: 13.590000 0.050000 13.640000 ( 12.815000)
57
- gson generate: 5.080000 0.010000 5.090000 ( 4.949000)
58
- jackson generate: 4.640000 0.010000 4.650000 ( 4.560000)
60
+ json java parse: 10.140000 0.020000 10.160000 ( 9.867000)
61
+ gson parse: 11.510000 0.010000 11.520000 ( 11.164000)
62
+ jackson parse raw: 4.320000 0.020000 4.340000 ( 3.552000)
63
+ jackson parse symbol keys: 5.910000 0.010000 5.920000 ( 5.770000)
64
+ jackson parse string keys: 8.400000 0.010000 8.410000 ( 8.232000)
65
+ json java generate: 14.730000 0.010000 14.740000 ( 13.864000)
66
+ gson generate: 5.060000 0.010000 5.070000 ( 4.981000)
67
+ jackson generate: 4.540000 0.000000 4.540000 ( 4.467000)
59
68
  ```