[#351786] Splat array with 1 value in Ruby 1.9 vs Ruby 1.8 — Raul Parolari <raulparolari@...>

In porting some automation code from 1.8.7 to 1.9.1, I find that in ruby

16 messages 2009/12/01
[#351787] Re: Splat array with 1 value in Ruby 1.9 vs Ruby 1.8 — Raul Parolari <raulparolari@...> 2009/12/01

[ Sorry for the horrible indentation. I repeat the text renouncing to

[#351816] Re: Splat array with 1 value in Ruby 1.9 vs Ruby 1.8 — Rick DeNatale <rick.denatale@...> 2009/12/01

On Tue, Dec 1, 2009 at 12:53 AM, Raul Parolari <raulparolari@gmail.com> wro=

[#351818] Re: Splat array with 1 value in Ruby 1.9 vs Ruby 1.8 — Raul Parolari <raulparolari@...> 2009/12/01

Rick Denatale wrote:

[#351822] Re: Splat array with 1 value in Ruby 1.9 vs Ruby 1.8 — Robert Klemme <shortcutter@...> 2009/12/01

2009/12/1 Raul Parolari <raulparolari@gmail.com>:

[#351823] Re: Splat array with 1 value in Ruby 1.9 vs Ruby 1.8 — Raul Parolari <raulparolari@...> 2009/12/01

Robert Klemme wrote:

[#351878] Graphics mode — Teodor Carstea <teodorcarstea@...>

Hi all! I'm a beginner.

24 messages 2009/12/02

[#351881] duda sobre nuevo metodo — "David J,nas" <acidburg@...>

mi routers.rb es

18 messages 2009/12/02
[#351886] Re: duda sobre nuevo metodo — Rob Biedenharn <Rob@...> 2009/12/02

On Dec 2, 2009, at 10:18 AM, David J,nas wrote:

[#351894] Re: duda sobre nuevo metodo — "David J,nas" <acidburg@...> 2009/12/02

Rob Biedenharn wrote:

[#351900] Re: duda sobre nuevo metodo — Rob Biedenharn <Rob@...> 2009/12/02

On Dec 2, 2009, at 11:17 AM, David J,nas wrote:

[#351903] Re: duda sobre nuevo metodo — "David J,nas" <acidburg@...> 2009/12/02

esta solucionado gracias

[#351950] Encoding/decoding a image as Base64 (fails under Ruby1.9 but works under Ruby1.8) — Iñaki Baz Castillo <ibc@...>

Hi, the folowing code encodes and decodes a image file as Base64:

8 messages 2009/12/03

[#352043] Graphics mode again — Teodor Carstea <teodorcarstea@...>

>Hi, all! here is my prog: it calculates the trajectory of a cannon shell:

15 messages 2009/12/04

[#352051] gems installation - invalid gem format — Serguei Cambour <s.cambour@...>

No matter on which OS you are, - XP Family, XP Pro or Ubuntu 9.10. No

10 messages 2009/12/04

[#352101] how about ruby's threads? — Ruby Newbee <rubynewbee@...>

Hello,

19 messages 2009/12/05
[#352106] Re: how about ruby's threads? — David Masover <ninja@...> 2009/12/05

On Friday 04 December 2009 09:39:33 pm Ruby Newbee wrote:

[#352149] Re: how about ruby's threads? — Ruby Newbee <rubynewbee@...> 2009/12/06

Well, I asked this because Perl thread documentation warns that

[#352170] Re: how about ruby's threads? — David Masover <ninja@...> 2009/12/06

First, it's just a preference, but I think most on the list agree to me --

[#352190] Re: how about ruby's threads? — Brian Candler <b.candler@...> 2009/12/07

David Masover wrote:

[#352122] ruby 1.9 and collect — Raul Jara <raul.c.jara@...>

Under ruby 1.8.6, running

13 messages 2009/12/05

[#352138] Why doesn't Ruby "compile" strings? — Iñaki Baz Castillo <ibc@...>

Hi, the following code:

12 messages 2009/12/06

[#352150] IRB GUI on OSX? — Sophie <itsme213@...>

Is there a good GUI IRB on OSX? Preferably one that lets me easily

14 messages 2009/12/06

[#352192] Reading Images — Alexandro Kez <alexandro.mail@...>

Hei there, ruby coders,

14 messages 2009/12/07
[#352193] Re: Reading Images — Robert Klemme <shortcutter@...> 2009/12/07

2009/12/7 Alexandro Kez <alexandro.mail@gmail.com>

[#352206] Wordpress Port — hjast <hjast89@...>

Has there any been an effort to make a ruby Wordpress port? I am a

30 messages 2009/12/07

[#352220] convert string into a variable object — Ad Ad <codetest123@...>

Hi,

16 messages 2009/12/07
[#352221] Re: convert string into a variable object — Aldric Giacomoni <aldric@...> 2009/12/07

Ad Ad wrote:

[#352225] Re: convert string into a variable object — Ad Ad <codetest123@...> 2009/12/07

Aldric Giacomoni wrote:

[#352390] Mysql::Error: Data too long for column — "rabarama" <profpelosotoglimi@...>

Pleas i need help:

12 messages 2009/12/09

[#352459] human-readable listing of array elements — Aldric Giacomoni <aldric@...>

This took me less than a minute to write, but I don't know if it's as

22 messages 2009/12/10

[#352463] Re: Redirecting standard output — Roger Pack <rogerpack2005@...>

Omar Campos wrote:

17 messages 2009/12/10
[#352509] Re: Redirecting standard output — Omar Campos <hypermeister@...> 2009/12/11

Thanks, that's exactly what I was looking for! Nice gem by the way. I

[#352510] Re: Redirecting standard output — Robert Gleeson <rob@...> 2009/12/11

Omar Campos wrote:

[#352492] syntax issue — Sig Dx <sigbackup@...>

Hello guys,

17 messages 2009/12/10

[#352556] program: a small ball in a window — Teodor Carstea <teodorcarstea@...>

Please help, I realy need help!

11 messages 2009/12/11

[#352607] Is it possible to force a Ruby program to run as a proc name different than "ruby"? — Iñaki Baz Castillo <ibc@...>

Hi, I have a Python software called "py_program". It runs as daemon in Linu=

28 messages 2009/12/11
[#352612] Re: Is it possible to force a Ruby program to run as a proc name different than "ruby"? — David Masover <ninja@...> 2009/12/11

On Friday 11 December 2009 04:34:04 pm I=C3=B1aki Baz Castillo wrote:

[#352616] Re: Is it possible to force a Ruby program to run as a proc name different than "ruby"? — Iñaki Baz Castillo <ibc@...> 2009/12/11

El S=C3=A1bado, 12 de Diciembre de 2009, David Masover escribi=C3=B3:

[#352618] Re: Is it possible to force a Ruby program to run as a proc name different than "ruby"? — David Masover <ninja@...> 2009/12/12

On Friday 11 December 2009 05:33:06 pm I=C3=B1aki Baz Castillo wrote:

[#352631] Re: Is it possible to force a Ruby program to run as a proc name different than "ruby"? — Iñaki Baz Castillo <ibc@...> 2009/12/12

El S=C3=A1bado, 12 de Diciembre de 2009, David Masover escribi=C3=B3:

[#352641] Re: Is it possible to force a Ruby program to run as a proc name different than "ruby"? — Brian Candler <b.candler@...> 2009/12/12

I単aki Baz Castillo wrote:

[#352642] Re: Is it possible to force a Ruby program to run as a proc name different than "ruby"? — Brian Candler <b.candler@...> 2009/12/12

Brian Candler wrote:

[#352647] Re: Is it possible to force a Ruby program to run as a proc name different than "ruby"? — Iñaki Baz Castillo <ibc@...> 2009/12/12

El S=C3=A1bado, 12 de Diciembre de 2009, Brian Candler escribi=C3=B3:

[#352653] How to make a ruby program tu run unser other user:group different than root — Iñaki Baz Castillo <ibc@...>

Hi, many daemons allow an argument "-u uid" which makes the program to run=

12 messages 2009/12/12

[#352694] Code block for element comparison in an array? — Derek Cannon <novellterminator@...>

I'm new to Ruby and I can't think of how to do this! I would like each

14 messages 2009/12/13

[#352736] Poll: Significant Indentation — David Masover <ninja@...>

I've just re-read the "Beating a Dead Horse" thread. I will bring that up

30 messages 2009/12/13

[#352922] Using threads to show progress — Aldric Giacomoni <aldric@...>

I want to do this in a Rake task, but the concept is Ruby. I would like

22 messages 2009/12/15
[#352925] Re: Using threads to show progress — Aldric Giacomoni <aldric@...> 2009/12/15

Aldric Giacomoni wrote:

[#352941] Re: Using threads to show progress — David Masover <ninja@...> 2009/12/16

On Tuesday 15 December 2009 01:53:21 pm Aldric Giacomoni wrote:

[#352943] Re: Using threads to show progress — Piyush Ranjan <piyush.pr@...> 2009/12/16

How about using a queue ?

[#353056] Encapsulating Information and Behavior without State — Intransition <transfire@...>

This should prove an interesting topic. I am currently debating two

9 messages 2009/12/17

[#353070] How to fund an open-source project? — Eleanor McHugh <eleanor@...>

In the recent thread on Ruby VMs I mentioned my newly launched =

23 messages 2009/12/17
[#353071] Re: How to fund an open-source project? — Gregory Brown <gregory.t.brown@...> 2009/12/17

On Thu, Dec 17, 2009 at 6:19 PM, Eleanor McHugh

[#353233] Re: How to fund an open-source project? — Eleanor McHugh <eleanor@...> 2009/12/20

On 17 Dec 2009, at 23:28, Gregory Brown wrote:

[#353258] Re: How to fund an open-source project? — Robert Klemme <shortcutter@...> 2009/12/20

On 20.12.2009 02:28, Eleanor McHugh wrote:

[#353088] Suggestion of Array#=== which improves case/when behaviour — Dmitry Vazhov <dmitryelastic@...>

Hello,

19 messages 2009/12/18
[#353090] Re: Suggestion of Array#=== which improves case/when behavio — Dmitry Vazhov <dmitryelastic@...> 2009/12/18

"Set" class has meaning close to "Range" class. If we will define

[#353173] Re: Suggestion of Array#=== which improves case/when behavio — Caleb Clausen <vikkous@...> 2009/12/18

> Dmitry Vazhov wrote:

[#353198] Re: Suggestion of Array#=== which improves case/when behavio — Tony Arcieri <tony@...> 2009/12/19

I would absolutely love if Array recursively performed #=== on its

[#353200] Re: Suggestion of Array#=== which improves case/when behavio — "David A. Black" <dblack@...> 2009/12/19

Hi --

[#353089] Math errors — jzakiya <jzakiya@...>

(-3)**3 => -27

19 messages 2009/12/18

[#353151] Question about sum of fibonacci sequene [PROJECT EULER] — Panagiotis Atmatzidis <atma@...>

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

10 messages 2009/12/18

[#353319] Help with gem ruby mysql error — Andrew Ting <drikting@...>

Hi,

11 messages 2009/12/21

[#353322] Ruby's implementation of Fixnum-assignment — RichardOnRails <RichardDummyMailbox58407@...>

Hi,

19 messages 2009/12/21

[#353339] promiscuous mode — Marco Biscetti <bisciasia@...>

Hi guys. i have a question. i am new in a ruby world.

13 messages 2009/12/21

[#353353] Strange behavior of unary +@ for Fixnum? — Alexandre Mutel <alexandre_mutel@...>

It seems that it's not possible to use the unary +@ operator for Fixnum

14 messages 2009/12/21

[#353357] Symbols vs. constants? — Sonja Elen Kisa <sonja@...>

How are symbols and constant (capitalized) strings similar or

35 messages 2009/12/22
[#353359] Re: Symbols vs. constants? — Gennady Bystritsky <Gennady.Bystritsky@...> 2009/12/22

Constants are variables that can be assigned to any object (only once). Whi=

[#353360] Re: Symbols vs. constants? — "Young H." <armywide@...> 2009/12/22

On Tue, Dec 22, 2009 at 9:07 AM, Gennady Bystritsky

[#353396] integers and floats — Rajinder Yadav <devguy.ca@...>

Can someone explain to me why Ruby treats integers and floating point

16 messages 2009/12/22
[#353398] Re: integers and floats — Paul Smith <paul@...> 2009/12/22

On Tue, Dec 22, 2009 at 1:01 PM, Rajinder Yadav <devguy.ca@gmail.com> wrote:

[#353402] newbie: if is not null else... — Alfonso Caponi <alfonso.caponi@...>

Hi forum,

16 messages 2009/12/22

[#353453] Suggestions for a distributed job queue — Tony Arcieri <tony@...>

I'm looking at replacing our homebrew job queue with something better, and

15 messages 2009/12/22
[#353457] Re: Suggestions for a distributed job queue — "Walton Hoops" <walton@...> 2009/12/22

> -----Original Message-----

[#353477] Trig value errors — jzakiya <jzakiya@...>

Hardware: 32-bit Intel P4 cpu

58 messages 2009/12/23

[#353482] awk print $4 in ruby — Derek Smith <derekbellnersmith@...>

Hi All,

17 messages 2009/12/23

[#353690] pasing data between 2 win XP boxes via internet — Dave Lilley <dglnz2@...>

Hi folks,

23 messages 2009/12/26

[#353733] How to truncate the spaces in the front of a line — Milo Luo <lxybhbh@...>

Hi, guys

13 messages 2009/12/27
[#353735] Re: How to truncate the spaces in the front of a line — Phillip Gawlowski <pg@...> 2009/12/27

On 27.12.2009 04:22, Milo Luo wrote:

[#353739] building ruby from source — Rajinder Yadav <devguy.ca@...>

I removed my older ruby package from my ubuntu, built ruby from source

14 messages 2009/12/27

[#353823] au3 0.1.1 released — Marvin Gülker <sutniuq@...>

au3 0.1.1 has been released. au3 is a library that allows you to

23 messages 2009/12/28
[#353837] Re: [ANN] au3 0.1.1 released — Roger Pack <rogerpack2005@...> 2009/12/28

Marvin G端lker wrote:

[#353842] Re: [ANN] au3 0.1.1 released — Marvin Gülker <sutniuq@...> 2009/12/28

Roger Pack wrote:

[#353877] Re: [ANN] au3 0.1.1 released — Edward Middleton <emiddleton@...> 2009/12/29

Marvin G端lker wrote:

[#353909] Re: au3 0.1.1 released — Marvin Gülker <sutniuq@...> 2009/12/29

Edward Middleton wrote:

[#353854] Creating my own method for sorting an array — Joe User <gctaylor2004-rubyforum@...>

Hi,

12 messages 2009/12/28

[#353856] ? about Search in google,com and Show Result — Saji Jaooon <seyyedsajjad1363@...>

hi every body

13 messages 2009/12/28

[#353872] A Ruby appliance: What would you include? — Phillip Gawlowski <pg@...>

Hello, list!

37 messages 2009/12/29
[#353923] Re: A Ruby appliance: What would you include? — Aldric Giacomoni <aldric@...> 2009/12/29

Phillip Gawlowski wrote:

[#353933] Re: A Ruby appliance: What would you include? — Phillip Gawlowski <pg@...> 2009/12/29

On 29.12.2009 14:25, Aldric Giacomoni wrote:

[#353957] Re: A Ruby appliance: What would you include? — Marnen Laibow-Koser <marnen@...> 2009/12/29

Aldric Giacomoni wrote:

[#353962] Re: A Ruby appliance: What would you include? — Phillip Gawlowski <pg@...> 2009/12/29

On 29.12.2009 17:51, Marnen Laibow-Koser wrote:

[#353878] Using #include at the instance level? — Intransition <transfire@...>

I would like to use #include at an instance level, such that it

22 messages 2009/12/29
[#353901] Re: Using #include at the instance level? — Robert Klemme <shortcutter@...> 2009/12/29

2009/12/29 Intransition <transfire@gmail.com>:

[#353927] Re: Using #include at the instance level? — Intransition <transfire@...> 2009/12/29

[#353935] Re: Using #include at the instance level? — Robert Klemme <shortcutter@...> 2009/12/29

2009/12/29 Intransition <transfire@gmail.com>:

[#353955] Re: Using #include at the instance level? — Intransition <transfire@...> 2009/12/29

[#353961] Re: Using #include at the instance level? — Robert Klemme <shortcutter@...> 2009/12/29

2009/12/29 Intransition <transfire@gmail.com>:

[#353992] Re: Using #include at the instance level? — Intransition <transfire@...> 2009/12/29

[#353880] PLEASE HELP...dup is not working correctly in the following code — timr <timrandg@...>

#dup creates a copy of an object with a different object_id. As

10 messages 2009/12/29

[#354040] How to pass a function as parameter? — Fritz Trapper <ajfrenzel@...>

I want to pass a reference to function as parameter to another function

15 messages 2009/12/30
[#354042] Re: How to pass a function as parameter? — Jes俍 Gabriel y Gal疣 <jgabrielygalan@...> 2009/12/30

On Wed, Dec 30, 2009 at 12:42 PM, Fritz Trapper <ajfrenzel@web.de> wrote:

[#354077] Where to find a description of yaml for ruby? — Fritz Trapper <ajfrenzel@...>

Where to find a description of yaml for ruby?

12 messages 2009/12/30

[#354081] Test::unit assertion pass scenario — John Smith <ks1911shooter@...>

When using the test::unit assertion, such as assert_equal, the script

13 messages 2009/12/30

[#354098] Why can't I use "or" here? — Albert Schlef <albertschlef@...>

(The problem is in both Ruby 1.8 and Ruby 1.9)

41 messages 2009/12/31
[#354106] Re: Why can't I use "or" here? — botp <botpena@...> 2009/12/31

On Thu, Dec 31, 2009 at 10:24 AM, Albert Schlef <albertschlef@gmail.com> wrote:

[#354114] Re: Why can't I use "or" here? — Albert Schlef <albertschlef@...> 2009/12/31

botp wrote:

[#354162] Automated testing of visual library (ncurses) — "(rkumar) Sentinel" <sentinel.2001@...>

As i work more on a ncurses widget library, I am wondering how does one

10 messages 2009/12/31

[#354187] Delete elements in array, break, and keep changes? — Joe Buck <semle2000@...>

I have an array of a lot elements that I need to cluster (they are

12 messages 2009/12/31

Re: Wordpress Port

From: David Masover <ninja@...>
Date: 2009-12-09 00:22:32 UTC
List: ruby-talk #352339
On Tuesday 08 December 2009 04:25:07 pm Seebs wrote:
> On 2009-12-08, David Masover <ninja@slaphack.com> wrote:
> > Compare any of these to C. You probably could write a web app in C. You
> > probably could be about as efficient with it. You could be disciplined
> > enough to never do pointer arithmetic,
> 
> This is hardly necessary.  Pointer arithmetic can certainly be done safely.

Can be. However, the fact that it exists opens the door to a whole class of 
weird and hard-to-pin-down crashes (and possible vulnerabilities) that simply 
don't happen if you don't (or can't) do it.

But that wasn't my point. My point was that if you consider lack of pointer 
arithmetic, garbage collection, and other features to be a selling point of 
higher-level languages, you can do all that in C, and you can make it _almost_ 
automatic in C++.

> > Think about that for a moment. In languages like Ruby and PHP, a buffer
> > overflow is actually not possible. You might get it in a third-party
> > library written in another language (like C), but you can't do it
> > yourself. But in C, it's not only possible, it's a very easy mistake to
> > make, and a hard one to avoid.
> 
> I'm not sold on this.  I don't think I've had any buffer overflows in my
> code in years.  It's pretty easy -- if I'm about to use a buffer, I make
> sure I know what I'm using it for and that I cap any copies and/or report
> failure if there's not enough space.

My favorite example is here:

http://joelonsoftware.com/articles/fog0000000319.html

I like this both for the ludicrous example, when he finally decides to figure 
out how much to allocate:

char* bigString;
int i = 0;
i = strlen("John, ") 
     + strlen("Paul, ") 
     + strlen("George, ") 
     + strlen("Joel ");
bigString = (char*) malloc (i + 1); 

...and for the ludicrous inefficiency. He's going to scan through each string 
at least twice, and that's with a customized strcat -- it gets much worse with 
the real strcat.

And remember, his next step is:

char *p = bigString;
bigString[0] = '\0';
p = mystrcat(p,"John, ");
p = mystrcat(p,"Paul, ");
p = mystrcat(p,"George, ");
p = mystrcat(p,"Joel ");

It's still a bit sloppy -- that initial null assignment makes me cringe -- but 
think about this. Even if you ignore the fact that we've got each string 
duplicated here -- let's say they're variables:

int i = 0;
i = strlen(a) + strlen(b) + strlen(c) + strlen(d);
bigString = (char*) malloc (i+1);

char *p = bigString;
bigString[0] = '\0';
p = mystrcat(p,a);
p = mystrcat(p,b);
p = mystrcat(p,c);
p = mystrcat(p,d);

Now suppose you add a string to that, or remove it. If you add it to one place 
and not the other, or remove it from one place and not the other, you're 
either wasting RAM or hitting a buffer overrun every time.

Then again, this kind of malloc is probably inefficient, as the article points 
out. Instead, you probably want to allocate some power of 2 -- at which point, 
you want to make sure you've always allocated a power of two that's more than 
you need, not less than you need.

Are you sure you never make a mistake here?

Because this is the kind of thing that I don't have to think about. Yes, it's 
less efficient, but if I have a bunch of strings in Ruby, I can just do this:

big_string = a + b + c + d

There are other, more efficient ways, like:

big_string = a.dup << b << c << d

or

big_string = "#{a}#{b}#{c}#{d}"

The point is, though, while these have varying degrees of efficiency, none of 
them have the possibility that I'll forget something and open myself up to a 
vulnerability or a crash. Worst case, I waste a bit of RAM, and 100% of the 
RAM I waste here can be garbage-collected later, whereas in C, if I waste it, 
it's wasted, possibly even leaked.

So not only is it ridiculously easier, it's also safer.

It's also possibly faster, because since it's a higher-level abstraction, the 
runtime might (in theory; I bet Ruby doesn't) notice that these are all 
strings and that you're just concatenating them, so it could use some sort of 
StringBuilder automatically.

Even if it doesn't, it still has the option of storing the length of a string 
separately, rather than using null-terminated strings -- thus saving you at 
least half your time in an operation like ("a" + "b").

Am I being unrealistic? Is this the kind of thing you'd never do?

> I agree that it requires actual effort, as opposed to being implicit.

The point here is that the implicit version also implicitly handles all the 
safety for you. Another example might be SQL manipulation. To keep myself 
sane, let's do this with Ruby:

execute "select hashed_password from users where username = '#{name}'"

The problem with that code should be blindingly obvious. Of course, I should 
probably be doing something like this:

execute "select hashed_password from users where username = '#{escape name}'"

The problem is, this requires me to always, always remember to do it. This is 
how a lot of PHP stuff is written, though I'm told it's changing, and those in 
the know use libraries that allow you to do it the Right Way. How would the 
Right Way look?

execute 'select hashed_password from users where username = ?', name

Can you see why that's safer? I can develop a much easier to maintain habit of 
using only single-quoted strings as my queries. Since the actual values are 
always passed separately, they are always escaped -- I don't have to remember 
anything special to make that work.

So I can develop a very, very simple habit (use single-quoted strings) that I 
can almost unconsciously apply everywhere, and I will never be subject to a 
SQL injection attack.

Or I can try to develop a habit of manually escaping -- the problem is that 
sooner or later, mistakes WILL happen. Best case, I develop such muscle memory 
of doing it this way that I end up accidentally doing this:

puts "Hello, #{escape name}!"

That way, worst case, it goes unnoticed for months until someone named 
O'Harris signs up and wonders why the system thinks their name is O''Harris or 
O\'Harris.

The point is that higher levels of abstraction do allow us to abstract away 
opportunities to screw things up. This is true in the language itself, and in 
the libraries.

And if I've convinced you of that, don't worry, low-level skill is still 
needed. Another of my favorite articles:

http://joelonsoftware.com/articles/LeakyAbstractions.html

It helps to understand what's going on at the C level, even if I never want to 
actually touch it, because that might give me some insight as to why

"Hello, #{name}!"

is more efficient than

'Hello, '+name+'!'

Try it yourself:

require 'benchmark'
name = 'steve'
Benchmark.bm do |x|
  x.report { 10000000.times { "Hello, #{name}!" }}
  x.report { 10000000.times { 'Hello, '+name+'!' }}
end

My results:

      user     system      total        real
  6.010000   0.020000   6.030000 (  6.104799)
  7.500000   0.010000   7.510000 (  7.505193)

It only gets better, the more interpolated values you have. a+b is more 
efficient than "#{a}#{b}", but a+b+c+d is less efficient than 
"#{a}#{b}#{c}#{d}".

This was very surprising to me. Then I went back and read that article, and 
thought a bit about the concept of a string builder. Now it makes sense, even 
though it's still a bit counterintuitive.

So I'm glad I sort of know C, and I'm just as glad I don't have to use it 
much.

> The killer for me was
>  discovering that there was a thing like a function pointer which could be
>  used only for user-defined functions, not built-in functions.

I could live with that, but I'm guessing it might've been the last straw...

For me, I'm spoiled by blocks now. I can fake them in Javascript, and even 
(though less effectively) in Java, but not in PHP, that I know of.

In This Thread