They throw around terms like open-source, but that doesn't usually mean what you want it to when MS says it, so who knows. There's also a free version of VS for small teams which is apparently feature-complete or nearly so.
The domain that you requested, whatthefuckis.net, is still available! If you would like to use this domain name, we recommend that you reserve it as soon as possible.
>>1 I use C# at work, so I'm kind of glad of this. There aren't great high-level options on Linux right now, so this will take the place of Java (for me) if I should ever have need of that sort of language in my personal projects. I just hope they manage to keep the performance they have on Windows, where C# is only slightly worse than native code (actually, "raw" C# is equivalent to native code in speed, but the various frameworks they tack on make it much slower for a large range of programs in practice).
Name:
Anonymous2014-11-14 3:55
>>17 Since they've open sourced it under such a permissive license, we might very well see outside contributors cleaning up bugs and making performance improvements that MS previously didn't have the balls to attempt.
>>15 And that's since the moment you first visited this site.
Name:
Anonymous2014-11-14 7:46
>>17 I use software running in mono all the time and it works very well. C# is already a better option than Java on Linux.
Name:
Anonymous2014-11-14 9:53
check'em
Name:
Anonymous2014-11-15 14:04
How is VS better than Vim? How is C# better than Haskell? Useless.
Name:
Anonymous2014-11-15 14:22
>>23 I will answer as if you were serious. 1. It's not, except that much C# depends on autogen'd boilerplate. 2. Haskell is infamously impenetrable. C# is easy to use while remaining powerful.
>>25 That sort of thing is stylistic. A big reason Java is so much worse than C# despite being similar syntactically is that stuff like that has been baked into the libraries. The C# libraries themselves aren't "architect driven" and don't have that problem.
Name:
Anonymous2014-11-15 23:17
>>27 So you have a problem and you think, "I know, I'll use Java!"
>>34 Educamate yourself on what laziness is. In short, it is normal order of evalueation PLUS MANDATORY FUCKING SUBEXPRESSION SHARING. The pointer mess it creates is astounding. I have tried twice to implement it, with no success. Try starting at http://en.wikipedia.org/wiki/Lazy_evaluation See the example fibs = 0 : 1 : zipWith (+) fibs (tail fibs) With proper laziness, fibs is shared. With naïve ``laziness'' aka non-strict evaluation, it is usually not. Which converts these fibs from a checkable linear time and constant space to have-time-to-make-tea time and blow-your-fucking-stack-up space. There is no fucking way to implement it with 2 macros. There may be some chance to implement it with 20 very clever macros though, but I'm too drunk to assess this possibility in greater detail.
Here's a memoized delay and force. It's not quite enough to get that syntax, but it might be close.
(defpackage #:lazy-memo (:use #:cl) (:export ))
(in-package #:lazy-memo)
;; TODO: This should have a maximum capacity ;; and remove not recently used values.
;; eval-cache stores a mapping expression -> value ;; where expressions are lists of the form ;; (function-name value1 value2 ...). sbcl seems to ;; barf if you try to evaluate (symbol-function function-name) ;; at compile time, so function symbols are stored ;; instead of their actual values. (defclass eval-cache () ((table :accessor get-table :initarg :table :initform (make-hash-table :test #'equal))))
(defmacro cached-call (expression) (cond ((or (not (listp expression)) (null expression)) expression) ;; This breaks if expression is calling a macro. ;; (car expression) should be a function name. (t `(eval-expr default-cache (list ',(car expression) ,@(cdr expression))))))