golang-demo 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/a.rb +14 -0
  2. data/f.rb +13 -0
  3. data/fbr.rb +71 -0
  4. data/go.gemspec +6 -0
  5. data/rakefile.rb +12 -0
  6. metadata +59 -0
data/a.rb ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ open("helloworld.go","w"){|f|f<<DATA.read}
3
+ puts `rake`
4
+ __END__
5
+ package main
6
+ import "fmt"
7
+ import "net"
8
+ func main(){
9
+ a,b,_:=net.LookupHost("google.com");
10
+ fmt.Printf("%v:%v",a,b);
11
+ for _,ip:=range b {
12
+ println(ip);
13
+ }
14
+ }
data/f.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'fbr'
2
+ @ping=Fiber.new do
3
+ puts @pong.resume("ping")
4
+ end
5
+
6
+ @pong=Fiber.new do
7
+ puts @ping.resume("pong")
8
+ end
9
+
10
+
11
+ @pong.resume
12
+ @ping.resume
13
+
data/fbr.rb ADDED
@@ -0,0 +1,71 @@
1
+ # Poor Man's Fiber (API compatible Thread based Fiber implementation for Ruby 1.8)
2
+ # (c) 2008 Aman Gupta (tmm1)
3
+
4
+ unless defined? Fiber
5
+ require 'thread'
6
+
7
+ class FiberError < StandardError; end
8
+
9
+ class Fiber
10
+ def initialize
11
+ raise ArgumentError, 'new Fiber requires a block' unless block_given?
12
+
13
+ @yield = Queue.new
14
+ @resume = Queue.new
15
+
16
+ @thread = Thread.new{ @yield.push [ *yield(*@resume.pop) ] }
17
+ @thread.abort_on_exception = true
18
+ @thread[:fiber] = self
19
+ end
20
+ attr_reader :thread
21
+
22
+ def resume *args
23
+ raise FiberError, 'dead fiber called' unless @thread.alive?
24
+ @resume.push(args)
25
+ result = @yield.pop
26
+ result.size > 1 ? result : result.first
27
+ end
28
+
29
+ def yield *args
30
+ @yield.push(args)
31
+ result = @resume.pop
32
+ result.size > 1 ? result : result.first
33
+ end
34
+
35
+ def self.yield *args
36
+ raise FiberError, "can't yield from root fiber" unless fiber = Thread.current[:fiber]
37
+ fiber.yield(*args)
38
+ end
39
+
40
+ def self.current
41
+ Thread.current[:fiber] or raise FiberError, 'not inside a fiber'
42
+ end
43
+
44
+ def inspect
45
+ "#<#{self.class}:0x#{self.object_id.to_s(16)}>"
46
+ end
47
+ end
48
+ end
49
+
50
+ if __FILE__ == $0
51
+ f = Fiber.new{ puts 'hi'; p Fiber.yield(1); puts 'bye'; :done }
52
+ p f.resume
53
+ p f.resume(2)
54
+ end
55
+
56
+ __END__
57
+
58
+ $ ruby fbr.rb
59
+ hi
60
+ 1
61
+ 2
62
+ bye
63
+ :done
64
+
65
+ $ ruby1.9 fbr.rb
66
+ hi
67
+ 1
68
+ 2
69
+ bye
70
+ :done
71
+
@@ -0,0 +1,6 @@
1
+ Gem::Specification.new do |s|
2
+ s.name="golang-demo"
3
+ s.version='0.0.1'
4
+ s.summary='for learn golang'
5
+ s.files=Dir["*.rb"]+["go.gemspec"]
6
+ end
@@ -0,0 +1,12 @@
1
+ task :default do
2
+ puts `8g helloworld.go`
3
+ puts `8l helloworld.8`
4
+ exec './8.out'
5
+ end
6
+
7
+ task :gem do
8
+ Gem::Specification.new do |s|
9
+ s.name="golang-demo"
10
+ s.files=Dir["*.rb"]
11
+ end
12
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: golang-demo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors: []
7
+
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-25 00:00:00 +08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email:
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - f.rb
26
+ - fbr.rb
27
+ - rakefile.rb
28
+ - a.rb
29
+ - go.gemspec
30
+ has_rdoc: true
31
+ homepage:
32
+ licenses: []
33
+
34
+ post_install_message:
35
+ rdoc_options: []
36
+
37
+ require_paths:
38
+ - lib
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ requirements: []
52
+
53
+ rubyforge_project:
54
+ rubygems_version: 1.3.5
55
+ signing_key:
56
+ specification_version: 3
57
+ summary: for learn golang
58
+ test_files: []
59
+