[#40602] [ruby-trunk - Bug #5532][Open] Compile problem for bigdecimal on cygwin — Martin Dürst <duerst@...>

14 messages 2011/11/01

[#40617] [ruby-trunk - Feature #5534][Open] Redefine Range class and introduce RelativeNumeric and RelativeRange — Alexey Muranov <muranov@...>

17 messages 2011/11/01

[#40646] [ruby-trunk - Bug #5541][Open] Better configure error message when llvm-gcc is the default compiler — Eric Hodel <drbrain@...7.net>

10 messages 2011/11/01

[#40648] [ruby-trunk - Feature #5543][Open] rb_thread_blocking_region() API is poorly designed — Christopher Huff <cjameshuff@...>

14 messages 2011/11/01

[#40684] [ruby-trunk - Feature #5555][Open] rename #include? to #includes? — Alexey Muranov <muranov@...>

20 messages 2011/11/02

[#40688] [ruby-trunk - Bug #5556][Open] SIGHUP no longer ignored when sent to process group from a subprocess — Brian Ford <brixen@...>

12 messages 2011/11/02

[#40706] [ruby-trunk - Feature #5562][Open] Improvement of Windows IO performance — Hiroshi Shirosaki <h.shirosaki@...>

39 messages 2011/11/03

[#40737] [ruby-trunk - Bug #5570][Open] Encoding of environment variables on Windows — Nikolai Weibull <now@...>

11 messages 2011/11/04

[#40748] Proposal for sustainable branch maintenance — "Yuki Sonoda (Yugui)" <yugui@...>

-----BEGIN PGP SIGNED MESSAGE-----

14 messages 2011/11/05

[#40770] [ruby-trunk - Feature #5578][Open] Embedded YAML for Ruby 2.0 — Thomas Sawyer <transfire@...>

17 messages 2011/11/06

[#40806] [ruby-trunk - Feature #5583][Open] Optionally typing — Yasushi ANDO <andyjpn@...>

21 messages 2011/11/07

[#40824] [ruby-trunk - Feature #5588][Open] add negation flag (v) to Regexp — Suraj Kurapati <sunaku@...>

38 messages 2011/11/08

[#40865] IO.copy_stream creates files with restrictive permissions — Eric Wong <normalperson@...>

I'm not sure if this is a bug or intended as spec.

16 messages 2011/11/09
[#41151] Re: IO.copy_stream creates files with restrictive permissions — Tanaka Akira <akr@...> 2011/11/19

2011/11/9 Eric Wong <normalperson@yhbt.net>:

[#41166] Re: IO.copy_stream creates files with restrictive permissions — KOSAKI Motohiro <kosaki.motohiro@...> 2011/11/20

>> I noticed when a file name argument is passed to the IO.copy_stream, the

[#41168] Re: IO.copy_stream creates files with restrictive permissions — Clifford Heath <clifford.heath@...> 2011/11/20

On 20/11/2011, at 5:09 PM, KOSAKI Motohiro wrote:

[#41176] Re: IO.copy_stream creates files with restrictive permissions — Tanaka Akira <akr@...> 2011/11/21

2011/11/20 Clifford Heath <clifford.heath@gmail.com>:

[#41180] Re: IO.copy_stream creates files with restrictive permissions — KOSAKI Motohiro <kosaki.motohiro@...> 2011/11/21

>> I think documentation is the wrong answer. The security defects are not caused

[#40908] [ruby-trunk - Feature #5607][Open] Inconsistent reaction in Range of String — Yen-Nan Lin <redmine@...>

15 messages 2011/11/10

[#40941] [ruby-trunk - Feature #5617][Open] Allow install RubyGems into dediceted directory — Vit Ondruch <v.ondruch@...>

22 messages 2011/11/11

[#40951] [Backport93 - Backport #5621][Open] Please backport thread-safe autoloading patch — Mike Perham <mperham@...>

25 messages 2011/11/12
[#40971] [Backport93 - Backport #5621] Please backport thread-safe autoloading patch — Mike Perham <mperham@...> 2011/11/12

[#40972] Re: [Backport93 - Backport #5621] Please backport thread-safe autoloading patch — Yehuda Katz <wycats@...> 2011/11/12

Unfortunately ruby-head has a deadlock in one of my go-to scenarios for

[#40976] Re: [Backport93 - Backport #5621] Please backport thread-safe autoloading patch — Hiroshi Nakamura <nahi@...> 2011/11/13

-----BEGIN PGP SIGNED MESSAGE-----

[#41128] Re: [Backport93 - Backport #5621] Please backport thread-safe autoloading patch — Charles Oliver Nutter <headius@...> 2011/11/18

On Sat, Nov 12, 2011 at 7:24 PM, Hiroshi Nakamura <nahi@ruby-lang.org> wrote:

[#41129] Re: [Backport93 - Backport #5621] Please backport thread-safe autoloading patch — Hiroshi Nakamura <nahi@...> 2011/11/18

-----BEGIN PGP SIGNED MESSAGE-----

[#41142] Re: [Backport93 - Backport #5621] Please backport thread-safe autoloading patch — Charles Oliver Nutter <headius@...> 2011/11/18

On Fri, Nov 18, 2011 at 12:15 AM, Hiroshi Nakamura <nahi@ruby-lang.org> wrote:

[#40982] [ruby-trunk - Bug #5625][Open] Remove profanity and pejoratives — Andrew Grimm <andrew.j.grimm@...>

30 messages 2011/11/13

[#41004] [ruby-trunk - Feature #5628][Open] Module#basename — Thomas Sawyer <transfire@...>

18 messages 2011/11/14

[#41024] [ruby-trunk - Feature #5632][Open] Attempt to open included class shades it instead. — Boris Stitnicky <boris@...>

12 messages 2011/11/14

[#41025] Proposal to add new methods: positive? negative? natural? — JosFrancisco Calvo Moreno <josefranciscocalvo@...>

Hi all!

11 messages 2011/11/14
[#41027] Re: Proposal to add new methods: positive? negative? natural? — Jeremy Evans <code@...> 2011/11/14

On 11/15 12:58, Jos? Francisco Calvo Moreno wrote:

[#41031] Re: Proposal to add new methods: positive? negative? natural? — JosFrancisco Calvo Moreno <josefranciscocalvo@...> 2011/11/14

Hi Jeremy,

[#41038] [ruby-trunk - Bug #5634][Open] yield and binding — Thomas Sawyer <transfire@...>

17 messages 2011/11/14

[#41086] [ruby-trunk - Feature #5644][Open] add Enumerable#exclude? antonym — Suraj Kurapati <sunaku@...>

14 messages 2011/11/17

[#41175] [ruby-trunk - Feature #5654][Open] Introduce global lock to avoid concurrent require — Hiroshi Nakamura <nakahiro@...>

12 messages 2011/11/21

[#41200] [ruby-trunk - Bug #5659][Open] bug releasing a gem created with rails 3.1 — Vinicius Gati <viniciusgati@...>

14 messages 2011/11/22

[#41212] [ruby-trunk - Feature #5662][Open] inject-accumulate, or Haskell's mapAccum* — Edvard Majakari <edvard.majakari@...>

12 messages 2011/11/22

[#41213] [ruby-trunk - Bug #5663][Open] Combined map/select method — Yehuda Katz <wycats@...>

62 messages 2011/11/22

[#41317] [ruby-trunk - Bug #5676][Open] miniruby linking error: undefined reference to ___stack_chk_guard — Martin Dürst <duerst@...>

10 messages 2011/11/27

[#41404] [ruby-trunk - Bug #5690][Open] Module#qualified_const_get — Yehuda Katz <wycats@...>

31 messages 2011/11/30

[ruby-core:40754] [ruby-trunk - Feature #5562] Improvement of Windows IO performance

From: Jon Forums <redmine@...>
Date: 2011-11-05 16:20:14 UTC
List: ruby-core #40754
Issue #5562 has been updated by Jon Forums.


I am seeing a strange issue with the patch on my Win7 32bit system. I'm not yet sure whether it's my setup or a real issue.

In summary, although the patch applies cleanly (with offsets) and tests pass, at runtime I get `This program cannot be run in DOS mode` failures for `ruby.exe`. It appears `ruby.exe`, `msvcrt-ruby191.dll`, and others are being corrupted and not recognized as PE files. This occurs regardless of whether I build with RubyInstaller/MinGW or Windows SDK. Strangly, when I cross-compile on Arch and MinGW the binaries appear to be correctly built and execute on Win7.

Here's what I know so far:

* failure occurs when building with Win7 on either ruby_1_9_3@33569 or trunk@33634
* failure occurs using TDM-GCC 4.5.2/4.6.1 and Windows SDK for Windows 7
* no failure when cross-compiled with Arch VM (VirtualBox) with `i486-mingw32-gcc` 4.6.1
* `miniruby.exe` is not corrupted as both `make test` and `make test-all` complete
* good `msvcrt-ruby191.dll` is 2,138,112 bytes, good `ruby.exe` is 73,728 bytes
* bad `msvcrt-ruby191.dll` is 4,096 bytes, bad `ruby.exe` is 4,096 bytes

C:\Users\Jon\Documents\RubyDev\ruby-git>git apply --verbose win_io.patch
# many messages about hunks applied with offsets
Applied patch include/ruby/encoding.h cleanly.
Applied patch io.c cleanly.
Applied patch win32/win32.c cleanly.


C:\Users\Jon\Documents\RubyDev\ruby-git>git st
## trunk
 M include/ruby/encoding.h
 M io.c
 M win32/win32.c


### FAILURE - RubyInstaller build recipes using TDM GCC 4.5.2/4.6.1 ###

C:\projects\rubyinstaller-git>rake ruby19 local=C:\Users\Jon\Documents\RubyDev\ruby-git nogems=1
...
mkdir -p sandbox/rubygems
mkdir -p sandbox/ruby19_mingw/lib/ruby/1.9.1/rubygems/defaults
cp resources/rubygems/operating_system.rb sandbox/ruby19_mingw/lib/ruby/1.9.1/rubygems/defaults
mkdir -p sandbox/rb-readline
"C:/projects/rubyinstaller-git/sandbox/extract_utils/7za.exe" x -y -o"sandbox/rb-readline" "C:/projects/rubyinstaller-git/downloads/rb-readline-0.4.2.zip" > NUL 2>&1
cd sandbox/rb-readline
ruby setup.rb
This program cannot be run in DOS mode.
rake aborted!
Command failed with status (1): [ruby setup.rb ...]

Tasks: TOP => ruby19 => dependencies:rbreadline:install19


C:\projects\rubyinstaller-git>rake devkit:sh
Temporarily enhancing PATH to include DevKit...
sh-3.1$ export PATH=/c/projects/rubyinstaller-git/sandbox/ruby19_mingw/bin:$PATH
sh-3.1$ ruby --version
This program cannot be run in DOS mode.
sh-3.1$ objdump -h bin/ruby.exe
C:\projects\rubyinstaller-git\sandbox\devkit\mingw\bin\objdump.exe: bin/ruby.exe: File format not recognized
sh-3.1$ objdump -h bin/msvcrt-ruby191.dll
C:\projects\rubyinstaller-git\sandbox\devkit\mingw\bin\objdump.exe: bin/msvcrt-ruby191.dll: File format not recognized
sh-3.1$ objdump -h lib/ruby/1.9.1/i386-mingw32/dl.so
C:\projects\rubyinstaller-git\sandbox\devkit\mingw\bin\objdump.exe: lib/ruby/1.9.1/i386-mingw32/dl.so: File format not recognized
sh-3.1$ objdump -h miniruby.exe

miniruby.exe:     file format pei-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         001675fc  00401000  00401000  00000600  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
  1 .data         0000196c  00569000  00569000  00167c00  2**5
                  CONTENTS, ALLOC, LOAD, DATA
...
sh-3.1$ make test-all TESTS='openssl fiddle psych'
./miniruby.exe ...
...
684 tests, 3621 assertions, 0 failures, 0 errors, 1 skips

ruby -v: wio-ruby 2.0.0dev (2011-11-04 trunk 33634) [i386-mingw32]
sh-3.1$ make test
...
PASS all 943 tests
./miniruby.exe ...
Driver is wio-ruby 2.0.0dev (2011-11-04 trunk 33634) [i386-mingw32]
Target is wio-ruby 2.0.0dev (2011-11-04 trunk 33634) [i386-mingw32]


KNOWNBUGS.rb .
PASS all 1 tests


V:\sandbox\ruby19_mingw>dumpbin -summary bin\ruby.exe
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01

Dump of file bin\ruby.exe
LINK : warning LNK4094: 'bin\ruby.exe' is an MS-DOS executable; use EXEHDR to dump it

V:\sandbox\ruby19_mingw>dumpbin -summary bin\msvcrt-ruby191.dll
Dump of file bin\msvcrt-ruby191.dll
LINK : warning LNK4094: 'bin\msvcrt-ruby191.dll' is an MS-DOS executable; use EXEHDR to dump it


### FAILURE - Build with Windows SDK for Windows 7 ###

C:\Users\Jon\DOCUME~1\RubyDev\ruby-git\build>..\win32\configure.bat --prefix=C:\projects\ruby200-mswin
--target=i686-mswin32 --disable-install-doc --disable-win95

C:\Users\Jon\DOCUME~1\RubyDev\ruby-git\build>nmake
...
C:\Users\Jon\DOCUME~1\RubyDev\ruby-git\build>nmake test
...
PASS all 943 tests
...
KNOWNBUGS.rb .
PASS all 1 tests
C:\Users\Jon\Documents\RubyDev\ruby-git\build>nmake install
...
C:\Users\Jon\Documents\RubyDev\ruby-git\build>\projects\ruby200-mswin\bin\ruby.exe --version
This program cannot be run in DOS mode.

C:\Users\Jon\Documents\RubyDev\ruby-git\build>dumpbin -summary \projects\ruby200-mswin\bin\ruby.exe
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01

Dump of file \projects\ruby200-mswin\bin\ruby.exe
LINK : warning LNK4094: '\projects\ruby200-mswin\bin\ruby.exe' is an MS-DOS executable; use EXEHDR to dump it

----------------------------------------
Feature #5562: Improvement of Windows IO performance
http://redmine.ruby-lang.org/issues/5562

Author: Hiroshi Shirosaki
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


=begin
I suggest a patch to improve Windows IO performance.

Ruby's text mode IO is much slower than binary mode.
On Windows text mode is default, so Windows IO is slow.
I assume that's mainly because of CRLF linefeed code conversion.

My idea to improve IO performance is as below.
- Change default linefeed conversion from Universal newline to CRLF newline on Windows
- Use binary mode process with OS's text mode if only CRLF conversion is needed
- Use Ruby's text mode with universal newline conversion if encoding conversion is needed

Although that causes io.c code to be more complicated, IO with CRLF conversion performance seems to be improved much.
I confirmed "make test-all TEST=ruby" have been passed. There was 3 errors, but ruby without this patch had same errors.
I think this patch doesn't affect other OS.

Line endings of "p" or "puts" writing is LF on trunk, but CRLF on 1.8.7 or 1.9.2.
This patch reverts to CRLF.


Here is #1332 benchmark test and results.

time = [Time.new]
c = ''
'aaaa'.upto('zzzz') {|e| c << e}
4.times { c << c }
time << Time.new
File.open('out.file','w') { |f| f.write(c) }
time << Time.new
c = File.open('out.file','r') { |f| f.read }
time << Time.new
0.upto(time.size - 2) {|i| p "#{i} #{time[i+1]-time[i]}" }


- Result

ruby 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32]
"0 0.78125"
"1 0.6875"
"2 0.5625"

ruby 2.0.0dev (2011-11-03) [i386-mingw32]
"0 0.59375"
"1 1.09375"
"2 1.296875"

ruby 2.0.0dev (2011-11-03 trunk 33615) [i386-mingw32] with this patch
"0 0.625"
"1 0.65625"
"2 0.34375"
=end



-- 
http://redmine.ruby-lang.org

In This Thread