22 comments

[ 7.0 ms ] story [ 65.1 ms ] thread
(comment deleted)
dang. i was expecting to see which ycombinator startups were using C#...
I'm honestly a bit surprised that we don't hear more about startups that use C#/.NET for their apps. Especially when you can download the Express editions of Visual Studio for free (which is good enough to at least get your startup to a demo phase, after which you'd actually have to buy it.)

Or maybe it's because more of the tech entrepreneurs are also linux types, and are more familiar with python and Java?

After which, you don't actually have to buy it for 3 years because of BizSpark.
Yeah, that's a sweet program. I'm definitely signing up for it once I actually get my startup incorporated...CUDA requires Visual Studio to compile your kernels on Windows.
AFAIK Loopt is using C# on their backend systems.
(comment deleted)
Historically there has been a backlash on HN for .NET. The HN community tends to be less so than reddit but still has a preference for non-MSFT languages.
I am using vs express for a long time but recently fallback to vs 2008. It is really hard to develop windows gui program with vs express. As a compiler and editor, vs express is good. But because Microsoft makes it so hard to program from scratch (the vs automatic tool generated tons of codes for ActiveX), personally, it is really an unhappy experience to develop ActiveX control with vs express.
after which you'd actually have to buy it

You don't have to buy it. Microsoft explicitly says you can use Express versions for commercial purposes.

We're a .NET shop. I'm actually a huge fan of the .NET stack, the IDE and everything.
Javascript can do it all:

  function fac(x){ return x==0?1:x*fac(x-1); }
  a = fac(8);

  or a one-liner:

  a = (function fac(x){ return x==0?1:x*fac(x-1); })(8);
Both ways spit 4320
(comment deleted)
The Y combinator allows the definition of anonymous recursive functions. These have names ("fac").

Personally, I have never found much of a reason to use the Y combinator. I typically use the method you used in the second example; I declare a named function within the scope of the anonymous one. I find it to be a readability win.

You can still do a Y combinator in JavaScript. In http://www.mail-archive.com/boston-pm@mail.pm.org/msg02716.h... I not only show how to do it, but I show one way that someone reasonably could come up with the construct.

But I agree with you that Y combinators are not generally a good approach for working programmers because there are clearer ways of accomplishing the same thing. However I've heard that in some functional languages they can be very useful as a pattern to compile language constructs to.

Full anonimity, thanks to tilly (separated for better understanding):

  builder   = function(x){ return function(n){ return x(x)(n); }}
  factorial = function(f){ return function(n){ return n==0?1:n*f(f)(n-1);} }
  alert(builder(factorial)(8))
One liner, just seed factorial to builder:

  r = (function(x){ return function(n){ return x(x)(n); } } (function(f){ return function(n){ return n==0?1:n*f(f)(n-1);} }))(8);
Does this count as an anonymous recursive function?

a = (function(x) {return x == 0 ? 1 : x * arguments.callee(x - 1)})(8);

40320. (They do.)
While this is definitely good geek porn, I have to say as a C# programmer that there might be some things which C# can do but which you might want to abstain from :)