From 2426fc44bb8bdb85159ccb46c2f27f71996909c9 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 27 Mar 2008 06:27:36 -0500 Subject: [PATCH 1/4] remove random.backend --- extra/bootstrap/random/random.factor | 3 +- extra/random/backend/backend.factor | 24 -------------- extra/random/dummy/dummy.factor | 2 +- .../mersenne-twister-tests.factor | 2 +- .../mersenne-twister/mersenne-twister.factor | 2 +- extra/random/random.factor | 33 +++++++++++-------- extra/random/unix/unix.factor | 2 +- extra/random/windows/windows.factor | 3 +- 8 files changed, 27 insertions(+), 44 deletions(-) delete mode 100755 extra/random/backend/backend.factor diff --git a/extra/bootstrap/random/random.factor b/extra/bootstrap/random/random.factor index b61e002526..b22ee27ebf 100755 --- a/extra/bootstrap/random/random.factor +++ b/extra/bootstrap/random/random.factor @@ -1,6 +1,6 @@ USING: vocabs.loader sequences system random random.mersenne-twister combinators init -namespaces ; +namespaces random.backend ; "random.mersenne-twister" require @@ -9,5 +9,6 @@ namespaces ; { [ unix? ] [ "random.unix" require ] } } cond +! [ [ 32 random-bits ] with-secure-random random-generator set-global ] [ millis random-generator set-global ] "generator.random" add-init-hook diff --git a/extra/random/backend/backend.factor b/extra/random/backend/backend.factor deleted file mode 100755 index c5243c22bd..0000000000 --- a/extra/random/backend/backend.factor +++ /dev/null @@ -1,24 +0,0 @@ -! Copyright (C) 2008 Doug Coleman. -! See http://factorcode.org/license.txt for BSD license. -USING: alien.c-types kernel math namespaces sequences -io.backend io.binary combinators system vocabs.loader ; -IN: random.backend - -SYMBOL: insecure-random-generator -SYMBOL: secure-random-generator -SYMBOL: random-generator - -GENERIC: seed-random ( tuple seed -- ) -GENERIC: random-32* ( tuple -- r ) -GENERIC: random-bytes* ( n tuple -- bytes ) - -M: object random-bytes* ( n tuple -- byte-array ) - swap [ drop random-32* ] with map >c-uint-array ; - -M: object random-32* ( tuple -- n ) 4 random-bytes* le> ; - -ERROR: no-random-number-generator ; - -M: f random-bytes* ( n obj -- * ) no-random-number-generator ; - -M: f random-32* ( obj -- * ) no-random-number-generator ; diff --git a/extra/random/dummy/dummy.factor b/extra/random/dummy/dummy.factor index a17ef54982..e0cb83c330 100755 --- a/extra/random/dummy/dummy.factor +++ b/extra/random/dummy/dummy.factor @@ -1,4 +1,4 @@ -USING: kernel random math accessors random.backend ; +USING: kernel random math accessors random ; IN: random.dummy TUPLE: random-dummy i ; diff --git a/extra/random/mersenne-twister/mersenne-twister-tests.factor b/extra/random/mersenne-twister/mersenne-twister-tests.factor index 9eb546063e..703a0c16e4 100755 --- a/extra/random/mersenne-twister/mersenne-twister-tests.factor +++ b/extra/random/mersenne-twister/mersenne-twister-tests.factor @@ -1,5 +1,5 @@ USING: kernel math random namespaces random.mersenne-twister -sequences tools.test random.backend ; +sequences tools.test ; IN: random.mersenne-twister.tests : check-random ( max -- ? ) diff --git a/extra/random/mersenne-twister/mersenne-twister.factor b/extra/random/mersenne-twister/mersenne-twister.factor index 4eb93f2941..331ae9af82 100755 --- a/extra/random/mersenne-twister/mersenne-twister.factor +++ b/extra/random/mersenne-twister/mersenne-twister.factor @@ -5,7 +5,7 @@ USING: arrays kernel math namespaces sequences system init accessors math.ranges combinators.cleave new-effects -random.backend ; +random ; IN: random.mersenne-twister c-uint-array ; + +M: object random-32* ( tuple -- n ) 4 random-bytes* le> ; + +ERROR: no-random-number-generator ; + +M: f random-bytes* ( n obj -- * ) no-random-number-generator ; + +M: f random-32* ( obj -- * ) no-random-number-generator ; + : random-bytes ( n -- r ) [ dup 4 rem zero? [ 1+ ] unless @@ -29,13 +46,3 @@ IN: random : with-secure-random ( quot -- ) >r secure-random-generator get r> with-random ; inline - -{ - { [ windows? ] [ "random.windows" require ] } - { [ unix? ] [ "random.unix" require ] } -} cond - -[ - [ 32 random-bits ] with-secure-random - random-generator set-global -] "random" add-init-hook diff --git a/extra/random/unix/unix.factor b/extra/random/unix/unix.factor index 78765bc575..51574887e3 100644 --- a/extra/random/unix/unix.factor +++ b/extra/random/unix/unix.factor @@ -1,5 +1,5 @@ USING: alien.c-types io io.files io.nonblocking kernel -namespaces random.backend io.encodings.binary singleton init +namespaces random io.encodings.binary singleton init accessors ; IN: random.unix diff --git a/extra/random/windows/windows.factor b/extra/random/windows/windows.factor index ef0d10059e..e0c564bc2c 100644 --- a/extra/random/windows/windows.factor +++ b/extra/random/windows/windows.factor @@ -1,6 +1,5 @@ USING: accessors alien.c-types byte-arrays continuations -kernel windows windows.advapi32 init namespaces -random.backend ; +kernel windows windows.advapi32 init namespaces random ; IN: random.windows TUPLE: windows-crypto-context handle ; From f317b97221099653cc805dbda36457d19e70b77c Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 27 Mar 2008 06:30:59 -0500 Subject: [PATCH 2/4] stack effect typos --- extra/random/random.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/random/random.factor b/extra/random/random.factor index 56590adb91..e62ab71b92 100755 --- a/extra/random/random.factor +++ b/extra/random/random.factor @@ -10,7 +10,7 @@ SYMBOL: random-generator GENERIC: seed-random ( tuple seed -- ) GENERIC: random-32* ( tuple -- r ) -GENERIC: random-bytes* ( n tuple -- bytes ) +GENERIC: random-bytes* ( n tuple -- byte-array ) M: object random-bytes* ( n tuple -- byte-array ) swap [ drop random-32* ] with map >c-uint-array ; @@ -23,7 +23,7 @@ M: f random-bytes* ( n obj -- * ) no-random-number-generator ; M: f random-32* ( obj -- * ) no-random-number-generator ; -: random-bytes ( n -- r ) +: random-bytes ( n -- byte-array ) [ dup 4 rem zero? [ 1+ ] unless random-generator get random-bytes* From 251fe256891ed44501e821f36e382647876d3719 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 27 Mar 2008 06:36:34 -0500 Subject: [PATCH 3/4] fix bootstrap for random --- extra/bootstrap/random/random.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/bootstrap/random/random.factor b/extra/bootstrap/random/random.factor index b22ee27ebf..daf35b9c03 100755 --- a/extra/bootstrap/random/random.factor +++ b/extra/bootstrap/random/random.factor @@ -1,6 +1,6 @@ USING: vocabs.loader sequences system random random.mersenne-twister combinators init -namespaces random.backend ; +namespaces random ; "random.mersenne-twister" require From 211749ed3de2d9140636bd96133767d64642d590 Mon Sep 17 00:00:00 2001 From: erg Date: Fri, 28 Mar 2008 23:20:33 -0500 Subject: [PATCH 4/4] re-add docs for random --- extra/random/random-docs.factor | 44 +++++++++++++++++++++++++++++++++ extra/random/random.factor | 2 +- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 extra/random/random-docs.factor diff --git a/extra/random/random-docs.factor b/extra/random/random-docs.factor new file mode 100644 index 0000000000..78c60fa2cb --- /dev/null +++ b/extra/random/random-docs.factor @@ -0,0 +1,44 @@ +USING: help.markup help.syntax math random.backend ; +IN: random + +ARTICLE: "random-numbers" "Generating random integers" +"The " { $vocab-link "random" } " vocabulary implements the ``Mersenne Twister'' pseudo-random number generator algorithm." +{ $subsection random } ; + +ABOUT: "random-numbers" + +HELP: seed-random +{ $values { "tuple" "a random number generator" } { "seed" "an integer between 0 and 2^32-1" } } +{ $description "Seed the random number generator." } +{ $notes "Not supported on all random number generators." } ; + +HELP: random-32* +{ $values { "tuple" "a random number generator" } { "r" "an integer between 0 and 2^32-1" } } +{ $description "Generates a random 32-bit unsigned integer." } ; + +HELP: random-bytes* +{ $values { "n" "an integer" } { "tuple" "a random number generator" } { "bytes" "a sequence of random bytes" } } +{ $description "Generates a byte-array of random bytes." } ; + +HELP: random +{ $values { "seq" "a sequence" } { "elt" "a random element" } } +{ $description "Outputs a random element of the sequence. If the sequence is empty, always outputs " { $link f } "." } +{ $notes "Since integers are sequences, passing an integer " { $snippet "n" } " yields a random integer in the interval " { $snippet "[0,n)" } "." } ; + +HELP: random-bytes +{ $values { "n" "an integer" } { "bytes" "a random integer" } } +{ $description "Outputs an integer with n bytes worth of bits." } ; + +HELP: random-bits +{ $values { "n" "an integer" } { "r" "a random integer" } } +{ $description "Outputs an random integer n bits in length." } ; + +HELP: with-random +{ $values { "tuple" "a random generator" } { "quot" "a quotation" } } +{ $description "Calls the quotation with the random generator in a dynamic variable. All random numbers will be generated using this random generator." } ; + +HELP: with-secure-random +{ $values { "quot" "a quotation" } } +{ $description "Calls the quotation with the secure random generator in a dynamic variable. All random numbers will be generated using this random generator." } ; + +{ with-random with-secure-random } related-words diff --git a/extra/random/random.factor b/extra/random/random.factor index e62ab71b92..c1701b1c0f 100755 --- a/extra/random/random.factor +++ b/extra/random/random.factor @@ -15,7 +15,7 @@ GENERIC: random-bytes* ( n tuple -- byte-array ) M: object random-bytes* ( n tuple -- byte-array ) swap [ drop random-32* ] with map >c-uint-array ; -M: object random-32* ( tuple -- n ) 4 random-bytes* le> ; +M: object random-32* ( tuple -- r ) 4 random-bytes* le> ; ERROR: no-random-number-generator ;