10 ms·
You've basically described C#: Getters, setters fixed? Check. Functional features? Check. Most crappy OO features fixed? Check. Trendy package system inspired
by radicalbyte 13y ago
You've basically described C#:
Getters, setters fixed? Check.
Functional features? Check.
Most crappy OO features fixed? Check.
Trendy package system inspired by npm/apt-get/gems? Check.
Healthy community with libraries replacing frameworks? Check.
I'd recommend checking it out if you haven't already.
- mynames 13y agoCould you expand on "crappy OO features"?
- lightblade 13y agoI also like to know more about this C# package system you mentioned.
- Glide 13y agoI would imagine he's talking about NuGet. Unless I've missed something dramatic in the past half year in the .net ecosystem.
- edwinnathaniel 13y agoYour package system is inspired by Maven, minus a good build system and other functionalities. Try building a large C# projects with running unit-tests, integration-tests, packaging, code-coverage, code style baked into it, and a bunch of other plugins for your build systems without pulling your hair. Your DateTime library ain't there yet sir so you're pretty much at the same situation with Java (although both ecosystems have NODA/JODA lib). C# is just Java with 10% syntax improvement and -30% to -40% productivity lost when it comes to everything else.
- barrkel 13y agoC# is Java with perhaps 200% syntax improvement. The things I use most often with e.g. Ruby - monadic collection operations like map, select, etc. - is there in the form of Linq, with select, where, etc. A concise, type-inferred lambda expression goes a long, long way. The .net ecosystem isn't as evolved as Java, for sure. But I don't think maven is a good implementation of a dependency management system either, nor is it particularly good as a build system.
- edwinnathaniel 13y agoI still don't see any C# developers that are 200% more productive than Java developers due to limited infrastructure around the C# ecosystems. Say anything about Maven but the recent discussion about embedding Bundler to Gem is just one step closer to be like Maven (now if they merged Rake+Gem+Bundler then Maven is). Even if Maven is not "good enough", .NET is thousand miles behind Java when it comes to dependency management and build system. Google-Guava, as ugly as the syntax is, is good enough for most of us. Java 8 is around the corner so meh.
- mattmanser 13y agoHuh? C#'s had Nuget quite a while ago now. Why are Java developers always like 5 years behind on C# improvements? And build systems are something g you set up one afternoon, why are you so fixated on a tiny part of the programming process?
- edwinnathaniel 13y ago... And Nuget is always behind Maven. ... And C# devs always borrow patterns and best practices from the Java ecosystem, so I think it's you guys who are always 5 years behind us. ... If you're using MSBuild or Nant and can set up an adequate build system in one afternoon, either your project is super simple crud, or you're not using enough tools to ensure proper engineering/verification, or you're the top 5-10% people who can bent .net build tools according to your needs, or you're exaggerating. If you think that we shouldn't sweat over build scripts then that seems to be a hint that you have not dealt with large projects.
- deleted 13y ago[deleted]
- olavgg 13y agoAny language today that still requires to mark end of line with a semi colon, has in my opinion outdated syntax. Most people put one statement per line, so why is it required and not optional?
- _random_ 13y agoWe build those kind of projects and our team is successful with C#. Perhaps we just know a thing or two about decoupling on all levels. С# comes from the world that brought us Reactive Extensions and TPL. If you call runtime generics, continuations, dynamic typing and value types 10% syntax improvement, then perhaps you should grab a book or two and catch up a bit?
- bad_user 13y ago"Runtime generics" (they are called reified generics btw) is one of the things that keeps the CLR from being a multi-language VM like it was advertised, as at the bytecode level they are very hard to work around. That's one of the reasons for why dynamic languages on the CLR never took off and that's why F# has two generics systems in the same language. I'm much happier with the generics type system provided by Scala - it's more flexible, allows for more type safety (so there are far, far less instances in which one needs to do isInstanceOf checks), you also get reification by receiving TypeTags and Scala can also specialize the implementation for primitives if you want it. You get most of the benefits and more, without butchering the runtime. The easiness with which you can generate bytecode on the JVM has been one of the reason for why the JVM has been preferred by language designers. Reactive Extensions are very nice. I'm experimenting with the Java port, RxJava. Actually I use RxScala, the Scala interface. However, for me they are of limited utility for my current usecase, because in comparison with Iteratees (a concept coming from Haskell, borrowed by Scala and championed in Play2), Rx Observables are very error prone to issues such as backpressure, whereas Iteratees are safe by design. So on one hand, Iteratees are better for handling streams, such as http requests/responses, handling big files and so on, while Rx Observables are better for publishing events to event listeners. I can see myself using Observables though. Erik Meijer is now contributing to RxJava btw. The C# continuations are delimited continuations, or partial continuations. They are pretty cool, not arguing about it. But in Scala, the API for the standard Future, is much, much nicer than the API of Tasks in C#, therefore working with Futures directly is more comfortable. Plus, Scala's philosophy is to empower the developer to build on the same "magic" that the compiler uses, therefore instead of introducing LINQ or Async, Scala 2.10 introduced Macros. As a result, LINQ and Async are now possible as libraries. Here's DB LINQ (see the direct embedding tab): http://slick.typesafe.com/ http://slick.typesafe.com/ ; and here's Async, which will be included in the standard library, but it's just a library based on macros: https://github.com/scala/async https://github.com/scala/async On Value Types, there's nothing ground-breaking about it. On one hand they are great and it would have been cool to have value types on the JVM. There are proposals to include value types that people experiment with in OpenJDK. On the other hand, the JVM being more restrictive about managing memory, gave birth to the most advanced garbage collectors in mainstream usage. C#/CLR is great when a low overhead is required, such as on mobile devices, but in a server-side context no GC-enabled language can beat the JVM. On syntax, it's true that Java is an abomination. However this gave birth to multiple languages that are flourishing and you can't say the same thing about .NET ... Scala, Clojure, JRuby, Jython, Groovy and Rhino are examples with flourishing communities and ecosystems. Similar efforts have been happening for the CLR, but they never made it or are moribund, except maybe F#. I did want to use C# several times, as I view it as a mixed-bag language, as in a language with comfortable high-level features that also has some low-level stuff, which is pretty cool on top of resource constrained devices. And I definitely prefer C# over Java (thank God for Scala and Clojure). Unfortunately the platforms I build upon are mostly Unix and I prefer to build on top of open-source as I'm the kind of developer that likes being in control. And in spite of the best efforts of those people from Xamarin, or the recent moves from Microsoft to open-source some stuff, .NET doesn't really have an open-source community and it's very Windows/Microsoft oriented. It's a pity because it could have been much more than it currently is. And maybe it will, as I'm seeing some encouraging signs, like Microsoft partnering with Xamarin. We tend to treat languages like they are football teams. We really need to learn from each other and build on top of each other ideas. Cross-pollination is healthy. Conservatism is not. If we jumped between platforms more often, we wouldn't be separate communities.
- kitsune_ 13y agoWhat? We do all those things and have hardly a problem. What ci / build server do you use?
- edwinnathaniel 13y agoIn the past, I had the misfortune to work with MSBuild to setup a fairly large .Net project. This was before NuGet exist. NuGet helped a bit these days but integrating FxCop, FxStyle, auto run NUnit, generate the docs, and running code coverage as part of the build is very painful and a manual process from downloading the proper assemblies up to setting up paths and results. Not to mention packaging the whole things up and possibly deploying to local IIS all through the build script. Preparing dev workspace means to include csproj in your repo which may contain hardcoded paths. Is that portable across to Mono? In Java, all you need is a Maven pom.xml file and the code. Any modern IDE can read pom.xml file and prepare the project consistently cross platforms. CI server is the easy part.
- mattgreenrocks 13y agoThe "libraries over frameworks" notion is something I keep noticing in communities that seem to be more engineering-minded than rock-star-ninja-dev-minded. Where do you think this comes from? I think it's a mix of maturity on the part of the community members along with how often the language is used to do things that are harder than CRUD.
- Iftheshoefits 13y agoI'd say it's exactly about "maturity" not in the emotional sense, but the "breadth and depth of professional experience" sense. A lot of the 'glamour' in the Bay Area is around web apps that 20-somethings use. As a consequence a lot of the headlines and centers of discussion are going to be around languages, platforms and paradigms that reflect that. And, these days, that would be dynamically typed languages, frameworks or framework-like 'libraries' and fad-following (which is where the "rock-star-ninja" meme comes from). I just try to filter the noise as best I can to glean the useful and interesting bits of articles and comments I read.
- gngeal 13y agoExcept that of all the things you've named, dynamically typed languages are hardly "a fad". It's surprising (?), though, that the lousy ones are the most popular ones.
- Iftheshoefits 13y agoI take a very cynical view of these things, and from that perspective it doesn't surprise me at all, really. My cynical view is that the "lousy" ones are popular because they are easy even for non-technical people to learn well enough to be useful in the majority of business settings. This sets up a kind of feedback loop: there is an abundant supply of "cheap" labor who can use these languages, which companies love, and so they create more jobs for this labor market to fill, which means more people want to fill it (since there are jobs there). Edit: 1) I would disagree that python is a "lousy" language; 2) To give some perspective regarding where I come from, the vast majority of my experience is with statically typed languages like C, C++ and Java; I prefer them and in my experience they are at least as easy to develop with as any of the dynamic languages that are popular.
- gngeal 13y agoAnd C# "fixes" the deficiencies by heaping features upon features. Already it looks like the MS version of Perl.
- yareally 13y agoScala with all of its symbolic notation would be more like Perl than C# is. Scala also can run on .net[1]. [1] http://www.scala-lang.org/old/node/10299 http://www.scala-lang.org/old/node/10299
- hansjorg 13y agoExcept that between the two, only the JVM is truly cross platform, Mono notwithstanding.
- _random_ 13y agoReally? How can I use JVM on iOS? Is there a good toolchain for Java -> native iOS?
- rbanffy 13y agoWe were talking about servers. A Java program can run on just about every server platform out there, from puniest Windows Server machines all the way to IBM's largest mainframe and Cray's larger supercomputer.
- chii 13y agosure there is - RoboVM just came out recently. In any case, JVM runs on more platforms than any others.
- bad_user 13y agoBesides RoboVM [1], there are also other solutions, like Codename One [2] that's based on XMLVM [3], or Avian [4] which is a new and very promising lightweight VM that can also compile code to native. And there's also J2ObcC [5] a compiler that's being developed and used by Google to share code between Android and iOS. You know, Java can be many things, but you can't beat its ecosystem ;-) [1] http://www.robovm.org/ http://www.robovm.org/ [2] http://www.codenameone.com/ http://www.codenameone.com/ [3] http://xmlvm.org/overview/ http://xmlvm.org/overview/ [4] http://oss.readytalk.com/avian/ http://oss.readytalk.com/avian/ [5] http://code.google.com/p/j2objc/ http://code.google.com/p/j2objc/
- ebiester 13y agoHas the Mono story gotten better? How feasible is it to develop without thousands of dollars of Microsoft software these days?
- raverbashing 13y agoIt has been some time since I tried it Basically, YMMV. To develop, sure, it is feasible (I did this, but for a simple webservice), but it may be missing something essential to you.
- gfody 13y agoMono has gained serious traction the last few years. I've personally been using it along side .Net and am loving it. You could develop in Windows with the Free/Express versions of Visual Studio etc. and deploy binaries to Linux. You could also use monodevelop (http://monodevelop.com http://monodevelop.com) in Linux or OSX. There are C# plugins for Eclipse and IntelliJ as well. Relevant: http://www.mono-project.com/Companies_Using_Mono http://www.mono-project.com/Companies_Using_Mono https://servicestack.net/features https://servicestack.net/features http://stackoverflow.com/questions/18450/is-mono-ready-for-prime-time http://stackoverflow.com/questions/18450/is-mono-ready-for-p...
- bad_user 13y ago> There are C# plugins for Eclipse and IntelliJ as well No, there aren't. And MonoDevelop has gotten better, Xamarin is doing a good job, but it's still a far cry from IntelliJ IDEA. If you want to target Mono, spare yourself the effort and just use Visual Studio.
- gfody 13y agohttp://emonic.sourceforge.net/index.html http://emonic.sourceforge.net/index.html IntelliJ still seems to be a wishlist item. Surprised there is nothing considering how many other great C# tools JetBrains produce.
- socialist_coder 13y ago
- WildUtah 13y ago"You've basically described C#" Unfortunately the CLR doesn't run on any useful platforms.
- __david__ 13y agoLike Linux or Mac? http://www.mono-project.com/ http://www.mono-project.com/
- hk__2 13y agoYes. Mono is not C#, it’s only a subset.
- Crito 13y agoThe difference is that I can basically count on any arbitrary java/jvm program running on Linux, but even with Mono I don't get that same level of confidence with random c#/clr. Now this may be largely a culture thing, with Java programmers creating more cross-platform software and avoiding platform dependent libs just by default, or it may be a technology thing, but to the end user it doesn't really matter.
- socialist_coder 13y agoSure, you can run command line c# apps just fine but the web hosting solutions for c# web apps are terrible compared to IIS + Windows. And this is coming from a linux veteran who wrote a C# web app and hosted it in production on Linux for a few months and then had to re-write it in .NET MVC hosted on IIS. I hate Windows servers. Every time I have to RDP into them to change some configs instead of just vi'ing files in /etc I want to shoot myself.
- moomin 13y agoI'm sorry, but NuGet is a package manager that makes most Maven haters want Maven back...
- rdmckenzie 13y agoYou've also described Clojure...