Which is another reason to be excited about Rust - it is to the best of my knowledge the only new language that allows you to write an entire programme or part of a programme that does no runtime memory allocation. While GC in most languages is not problematic in most cases, this makes it suited for embedded or hard-realtime work where C/C++ may have been the only option up until now. But it still has all these expressive, high-level features and safety mechanisms that makes it so suitable for programming well-structured, trustable software. There's a learning curve moving from GC to the ownership system, and maybe a plug-in garbage collector makes sense in some cases, but then the system does support that.
And then there's the tooling. Setting up a cross-compiler (again, embedded work), bringing in libraries from online repositories, packing up code modules for distribution and reuse, all that, is as easy as you'd expect coming from the web world because of the excellent Cargo system.
In short, while it might not be completely battle-tested yet, I think it has a better shot at being the "one language" that scales from tiny throw-away projects to large, complicated ones, and from watches to super computers than anything else I've seen.
Another consequence is the sheer range of applications for which this language can be practically used: systems and concurrent programming obviously, but also Web, realtime, embedded and even supercomputer programming. The reason for that is that rust mostly feels like a light weight scripting language like python, but because of its performance characteristics can viably be used as a drop-in replacement for C.
So I'll focus on ... Haxe: Which is known in a few circles, but If I talk to a random person about it they've never heard of it.
Haxe is a garbage collected strictly typed compiled language with type inference. It compiles to a variety of platforms including C++, Javascript, Flash Bytecode, Neko VM bytecode, even PHP. More recently it has been growing support for C#, java, python and lua.
It's just a nice language to use. A combination of the cool features like pattern matching case statements, and the simple tidiness of the basics.
for (minion in party) {
minion.jumpToTheLeft();
}
Just little things like not having 'for (var minion in party)'. It clears the clutter. while still protecting you.In many respects, when compiling to JavaScript, it serves the niche that Dart and Typescript aim at. I think the fact that it is independent should not be underestimated. Google people tend to use Dart, Microsoft people use TypeScript. Haxe is not on a 'side' people use it because of what it is, not who made it. I'm rather against provenance as a reason to use a language.
The best way to get a good feel for Haxe is to go to http://try.haxe.org and look-at/run some of the examples.
> Just little things like not having 'for (var minion in party)'. It clears the clutter.
Would be even less cluttered if it allowed
for minion in party {
minion.jumpToTheLeft()
}
Parens around a for clause when there's braces following are unnecessary. forM_ party jumpToTheLeft
Assuming there is a 'party :: [ Minion ]' and 'jumpToTheLeft :: Minion -> IO Minion' in scope.If someone would pay me big bucks one day for Java, I'd do it and program cool little machines and gadgets with it, but I love the web a lot and I am not about to continue the shoe-horning of Java and the Web (don't start with me).
So, I like Python for everything. Good web stuff. Great scripting and command line. Good for the Internet of Things (if you want to go down that path). Good for writing desktop. And yes, you could do games and mobile (although I admit the shoe-horning begins to show a little here). But I'm not in that space so much, so I accept that. And its pretty and stable (like Ruby) while not being quite as pretentious as Ruby.
Someone wrote WebAssembly. While not a language.... yes, yes, yes... I'm very excited about it. Because do you not SEE the reality that soon we could be writing web code on web pages with pre-compiled speedy fun stuff but written in our language of choice, including Python? Is no one talking about this? It will just take someone writing a Web Assembly Compiler (not sure if that will be the right terminology) in your language of choice. Oh. My. Goodness. Death to JavaScript. Maybe. Or at least an arm lopped off its torso.
My only complaint so far is that the reference implementation has a stupid license, but most other D users just ignore the terms of the license. I had also found a performance bug in an stdlib function, but it's since been addressed in dev.
Thankfully, there are other implementations with perfectly free licenses: gdc and lldc.
The license doesn't forbid anything. At all. It simply states that it doesn't guarantee any use at all either.
Therefore, you can use it to do whatever you want to do, but because there was no guarantee, you can't sue the software creator.
I will paste the text here, for others to read it:
"The Software is not generally available software. It has not undergone testing and may contain errors. The Software was not designed to operate after December 31, 1999. It may be incomplete and it may not function properly. No support or maintenance is provided with this Software. Do not install or distribute the Software if you are not accustomed to using or distributing experimental software. Do not use this software for life critical applications, or applications that could cause significant harm or property damage."
Now my explanation: Don't use DMD it in a peacemaker. Or use it, if you thing the technology is suitable. But if you do use it in a peacemaker, and it fails, it will be your fault and not the fault of the creator of the DMD compiler. It's pretty much a standard disclaimer and all licenses have one.The equivalent disclaimer text of the GPL license (used by gdc and lots of other software) is this (the original text is in caps):
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
Anyway, the best part of D is that I think the confusing text will be discussed in their forums by their great community and something will be done about it.Lawyers don't have tongues or cheeks.
I have been told that Walter regularly tries to change the license but Symantec just doesn't seem to care.
Now that's sad :/
http://forum.dlang.org/thread/lodjbuvdhimrvrdngldy@forum.dla...
C# triggered by: - Open sourcing of .NET - Open Sourcing of Xamarin
I want to live in a world where writing mobile apps for multiple platforms with a single codebase becomes the de-facto way of doing things. C#/Xamarin seems like the only viable way to achieve that.
// 1. [a + b] // [a + b] is an array {[a + b]: c} // [a + b] is not an array
// 2. { x, y: x, y} // inconsistent object fields
and there are more examples. After you get to know the syntax, it can be used for good -- but some decisions are making the language more complex.
As written above, I enjoy its new features
var b = {3: 4}; b[3] // [3] is not an array
Jokes aside, ES2015 hits the sweet spot for new powerful languages with big-name backers (facebook is compiled in babel).
F# with C#-level tooling would be unstoppable. Though it's pretty fantastic as-is.
Crystal because it brings me the elegance of Ruby with better Type safety. The type inference in Crystal has been improving a lot since I started looking into it as well.
Elixir mostly because it fits the sweet spot where I'd have used node.js for network/event heavy apps.
Haskell because I'm still trying to learn it _properly_.
PHP7.1 because I work in PHP every day, and I am excited about lots of upcoming changes in the next release. There have been lots of interesting RFCs (for the language) as well as PSRs (for the interop packages) raised recently and PHP isn't the same old thing any more.
I've used it for a bunch of small projects the last year or so, and just have a ton of fun. In particular, it has surprisingly good bindings to graphics libraries like Qt, SDL, and OpenGL, and it's super easy to get animations and graphical apps up and running quickly.
The compilers are great for such a high level language, and it's significantly faster than Python, which was my preferred language before CL. It doesn't beat the raw speed of C, but I rarely need that anyway. As an example, I just wrote a cheesy, animated FFT visualization and full screen at 2560x1440 it gets 90+ fps with no attempt to optimize on my part, except turning up the default optimization level. https://github.com/jl2/qt-fft-viz
The REPL and code reloading makes iterating on ideas really fast, and I find I experiment more in CL because it's just easier.
On both platforms I have a script that pulls from Git, rebuilds, and installs over the previous SBCL binary image, so I'm using the absolute bleeding edge of the compiler. One day this will bite me somehow and then I'll start using the most recent stable tag, but it's worked okay up to now.
I use Emacs and Slime for development. I had used Emacs for a long time before using CL, so using Slime wasn't an issue for me at all. I know the commercial implementations have some neat IDEs, but I haven't tried them. I'm not sure there's many (or any) OSS alternatives to Slime.
On both platforms I use QuickLisp to install all of the Lisp packages I use. Pure Lisp libraries always work great on both platforms.
Libraries that wrap C/C++ libraries (like Qt or SDL) tend to work better on Linux, but in every case I can think of I've got them working on OSX also, with varying degrees of effort.
On Debian I "apt-get install ..." the required lib* and sometimes lib*-dev packages, and then (ql:quickload ...) has always just worked.
External libraries on OSX are where I've encountered the most problems. Qt was particularly tricky, and I'm not even 100% sure what I did that finally got it working. SDL has some hoops to jump through with a "cocoa helper library" that I had to build by hand, but it's pretty simple and a few minutes Googling turned up enough info to get it working. For the majority of the stuff I've needed (libpng, cairo2, mpg123, and a few others), I was able to install them with HomeBrew, and they just worked once I had my PATH and LD_LIBRARY_PATH setup correctly. OSX ships ancient versions of several libraries (like libpng), but installing the version in HomeBrew usually fixes the problem.
First, all of the modern implementations include some kind of implementation specific, low level OS thread wrapper. It's unfortunate that these are all incompatible, but few people need to use them directly, so it's really not too bad.
Next, the bordeaux-threads library provides a wrapper around all of the implementation specific libraries. Thanks to macros, the wrapper doesn't add much (if any) overhead.
Finally, there are higher level libraries like lparallel and cl-cuda. I've used lparallel a few times, and much prefer it to writing my own low level threading.
I'm not really sure what you mean by "interpreter interoperability". Common Lisp is standardized, and sticking to the standard and libraries in QuickLisp, I haven't run into many problems running my code across multiple platforms and multiple implementations of Common Lisp. All of the problems I've encountered have been related to foreign libraries, which, IME, are problematic in most languages.
Yes, the standardized definition is a Good Thing. What I meant by "interpreter interoperability" (I probably should have said implementation compatibility) are things like processing commandline arguments, which are not defined in the standard and vary wildly between operations. (Is there a library for that too? I haven't come across any yet, but that might just be me.)
Elm: beautiful front-end development in a tough to navigate JS world
Elixir: functional back-end programming on top of the BEAM VM
ES 2015 & node.js: I really enjoy and appreciate a language growing in the ways JS has and I love seeing the frameworks influence and borrow from one another (ember, react, angular). While the ecosystem is sometimes annoying, it's been a joy to see the evolution and natural selection of tools and libraries (e.g. flux, alt, flummox, and eventually redux coming out on top...for now)
But there's a lot of breaking changes in the language (0.18 was released a few days ago with a few breaking changes). I would not use it for a long term project (yet). But for some personal project or prototypes, for example which you'd quickly set using Ruby/Sinatra, I'd choose Crystal/Kemal.
* (or concurrent)
That's why I've been developing my own language (http://web.onetel.com/~hibou/fmj/tutorials/TOC.html). It isn't ready yet: there are still bugs in the IDE, and without a compiler it's slow. After fixing these problems, I also want to look at new ways to do graph processing. Then, I'll think about releasing it, if there's enough interest. Let me know what you think.
Features: visual, dataflow, HM type inference while editing, homoiconic, can call Lisp and callable from Lisp.
But I miss the niceness of typing, which typed racket provides. There are some warts, like having to explicitly typecast when using two polymorphic functions, and that the curry procedure doesn't work as in racket, but other than that it is not far from what I would perceive as the perfect language.
I could of course wish for some other things, like making a curried and strictly typed scheme-like language, but i'm not going to push my luck :)
But some languages are kind of interesting:
C++11/14, because it opened up some new ways of writing efficient code safely.
Haskell, because of HM types.
Lisp, because of homoiconicity and macros.
Elixir, to taste functional programming on the backend.
Great Documentation https://laravel.com/docs/5.2
Local Development Tools/Box https://laravel.com/docs/5.2/valet https://laravel.com/docs/5.2/homestead
Easy to Spin Up servers and deploy https://forge.laravel.com/servers
Zero downtime deployment https://envoyer.io/
Micro/Slim version https://lumen.laravel.com/
SaaS in a box https://spark.laravel.com/
Great Learning Videos and Community https://laracasts.com/
Eve (Dev Blog: http://incidentalcomplexity.com): the guys are "working on bringing programming to everyone". A lot of innovative stuff here. Not yet ready but _really_ exciting!
The basic constructs are "filter expressions". Pipes (|) can be used to direct the output of one filter expression to another, and commas (,) can be used to concatenate the output of two filter expressions.
But I was also doing a lot of Java, which has made me more excited about getting back into C#. As far as language features go, Java is C# poor cousin.