News for hackers. Stuff that matters.
Re:Two Weeks of Rust by markque on Tuesday January 12, 2016 @06:11AM (#10886695)
When you've worked with languages with a garbage collector, having to worry about memory management and all that jazz seems a step backwards just to save a few cycles. You want to be focusing on the domain problem not the machine. (This is directed at people who use Rust as a general purpose lang, im sure it's good for low level systems programming).
Re:Two Weeks of Rust by danieldk on Tuesday January 12, 2016 @06:29AM (#10886770)
When you've worked with languages with a garbage collector, having to worry about memory management

It's an illusion to think that in a language with a garbage collector you do not have to worry about memory management. To give an example: take a function that takes a substring of a string.

1. If a substring function returns a string with the same underlying character array (just with different start/end indices), you may be wasting memory with very large strings of which you only care about small substrings.

2. If a substring function returns a string with an underlying character array that is a copy of the particular substring, you may waste a lot of memory when you have a lot of (partially) overlapping substrings. Moreover, the substring operation is O(n) rather than O(1).

In other words, in any non-trivial application working with strings you want to know the allocation behaviour of common string operations.

Re:Two Weeks of Rust by markque on Tuesday January 12, 2016 @06:39AM (#10886810)
99% of people use the language standard library which has solved the problem.
Re:Two Weeks of Rust by danieldk on Tuesday January 12, 2016 @06:48AM (#10886842)
No, that does not solve the problem. Consider this Java fragment:

   String someLargeString = ...;
   //...
   String interesting = someLargeString.substring(10, 20);
   someLargeString = null;
Now assume that someLargeString is garbage-collected after the last statement. Is the backing character array of interesting 10 chars long or the size of the backing array of someLargeString?

You don't know, unless you know what the implementation of String#substring does. Suppose that someLargeString's array was a couple of megabytes, you could be using 20 bytes of memory or megabytes for interesting.

(Note that in the case of Java they switched from a O(1) index-based slicing to O(n) copying some time ago.)

Re:Two Weeks of Rust by fpoling on Tuesday January 12, 2016 @07:22AM (#10886957)
This is about quality of the GC and string implementation. A good one can detect that only a range of allocation is alive and release unused part of someLargeString. The GC could also flatten a deep nested tree of strings in implementations based on ropes.
Re:Two Weeks of Rust by danieldk on Tuesday January 12, 2016 @07:54AM (#10887080)
A good one can detect that only a range of allocation is alive and release unused part of someLargeString.

Can you give an example of a (somewhat widely-used) library/runtime that does this?

I think this is harder than it initially seems. How does the GC know that if you have some type with a backing array and two pointers (or indices) that I don't want to move one of the pointers to some other valid position later?

I am not arguing that it is not possible, but this seems difficult in the general case, unless you can explicitly provide hints to the garbage collector.

Re:Two Weeks of Rust by fpoling on Tuesday January 12, 2016 @09:30AM (#10887568)
There is nothing difficult with that as long as the GC knows everything about strings and their pointers so it can detect that a particular string is reachable only through single another string.

At some point this for considered for JS engine in Firefox, but that was before introduction of ropes, small strings that holds string chars inline and various other optimizations like recent switch from UTF16 to byte per char for strings with Latin1 characters. That and the fact that Firefox flattens all strings that name properties of objects, this optimization is unnecessary on the current web.

Re:Two Weeks of Rust by danieldk on Tuesday January 12, 2016 @09:38AM (#10887614)
There is nothing difficult with that as long as the GC knows everything about strings and their pointers so it can detect that a particular string is reachable only through single another string.

Right, but that is a specific case where a built-in data type is optimized. It's not difficult, because the GC knows the semantics of a specific data type. But this does not work in the general case of slicing of library/used-defined data types.

Re:Two Weeks of Rust by lmm on Tuesday January 12, 2016 @09:14AM (#10887476)
I have no idea about the popularity, but something like https://github.com/Chris00/ocaml-rope ?
Re:Two Weeks of Rust by danieldk on Tuesday January 12, 2016 @09:34AM (#10887597)
Sorry, I meant specifically:

A good one can detect that only a range of allocation is alive and release unused part of someLargeString.

I do agree that ropes are nice, though they may not be acceptable if you want O(1) indexing or slicing.

Re:Two Weeks of Rust by lmm on Tuesday January 12, 2016 @10:23AM (#10887884)
If you're using a rope representation in a GCed language then you get that for free, no?
Re:Two Weeks of Rust by alkonaut on Tuesday January 12, 2016 @08:03AM (#10887122)
> You don't know

Exactly. Which is the core of "not worrying about it". When it becomes a problem (Such as an out of memory exception) you worry about it. There is no illusion. The time you don't worry about it is when you write it. I'd write it exactly like you did above (except I probably wouldn't null it), and wouldn't think of it again until it became a concrete problem.

You are absolutely right that a GC didn't magically make all memory issues disappear. It just hides them.

Re:Two Weeks of Rust by Findeton on Tuesday January 12, 2016 @08:56AM (#10887380)
But then, the really good Java (or Scala, or whatever GC-based lang) programmers are the ones that actually know and actively take into consideration how the GC works memory-wise and speed-wise. The same kind of thing can be said about interpreted langs and speed. Of course, that kind of thing also happens in C++, good C++ devs know the order of any instruction speed and memory-wise, but it is much more evident in C++/Rust and it's actually documented in the standard libraries, and the lang itself tackles the problem.
Re:Two Weeks of Rust by alkonaut on Tuesday January 12, 2016 @10:06AM (#10887781)
Yes, with age and experience comes the ability to predict where things will need attention, but in the vast majority of cases memory management causes no issues -- which is why the language gets out of your way so you can focus on the business problem (which causes bugs and other issues millions of times more often).
Re:Two Weeks of Rust by markque on Tuesday January 12, 2016 @06:55AM (#10886869)
A somewhat contrived example which may require a quick look at the API docs but in the main you can focus on solving the problem, premature optimization and all that.
Re:Two Weeks of Rust by jasode on Tuesday January 12, 2016 @07:16AM (#10886938)
> may require a quick look at the API docs

But that tradeoff of memory footprint vs performance implemented by Oracle is not in the API documentation[1] for Java 7 nor Java 8.

One would have to stumble across other sources such as unofficial blogs[2] written by non-Oracle employees like Mikhail Vorontsov. That blog article then triggers an explanation from the actual coder that's buried in a reddit thread[3].

Hunting down why your business-domain java code is now suddenly slower because of hidden GC tuning is taking time away from "solving the problem."

Your rebuttal consists of:

-- repeating the "premature optimization" meme which is not relevant in this case.

-- recommending to look at the API docs, which doesn't even have the information!

[1]v7: https://docs.oracle.com/javase/7/docs/api/java/lang/String.h...

v8: https://docs.oracle.com/javase/8/docs/api/java/lang/String.h...

[2]http://java-performance.info/changes-to-string-java-1-7-0_06...

[3]https://www.reddit.com/comments/1qw73v

Re:Two Weeks of Rust by anon1385 on Tuesday January 12, 2016 @07:26AM (#10886977)
>A somewhat contrived example

It's not a contrived example. When Java changed this exact behaviour it caused a lot of pain for people. Code that previously ran in a reasonable amount of time suddenly became impractically slow:

https://news.ycombinator.com/item?id=9862556

>may require a quick look at the API docs

The behaviour isn't specified by the spec. That is why they were able to change it from one release to the next.

>premature optimization and all that.

The "premature optimization" meme you are parroting contains the implication that at some point optimisation will be necessary. When that happens you have to think about memory management, even in a GC language. The string example given by danieldk is just one of many ways in which that can happen.

Re:Two Weeks of Rust by rakoo on Tuesday January 12, 2016 @09:24AM (#10887532)
> The "premature optimization" meme you are parroting contains the implication that at some point optimisation will be necessary. When that happens you have to think about memory management, even in a GC language. The string example given by danieldk is just one of many ways in which that can happen.

That's exactly the point: caring about the actual memory used by interesting may not be as important as other parts of the application, or may not be important at all for now. You should only care about that when it does prevent pose a problem (performance, impossibility to evolve features, ...) (all while making the initial code flexible enough to be potentially changed in the future)

Re:Two Weeks of Rust by danieldk on Tuesday January 12, 2016 @09:51AM (#10887694)
You should only care about that when it does prevent pose a problem

Then you are setting up yourself for a lot of trouble.

Another part of memory management is thinking about ownership (to which the substring discussion is very much related) and it pains me to see how many bugs are caused by code like:

   Foo getFoo() {
     return myFoo;
   }
Where Foo is some mutable class and the invariants of the wrapping class suddenly don't hold anymore because some outside code is mutating the Foo instance through the pointer/reference.

Throw in some amount of concurrency and you get something that is not only hard to debug but also difficult to reproduce.

tl;dr: in a GCed language you need to think about memory management and ownership as well.

(Note: I am not arguing against garbage collection.)

Re:Two Weeks of Rust by wtetzner on Tuesday January 12, 2016 @12:53PM (#10888988)
> Where Foo is some mutable class

Ah, there's your problem :)

Re:Two Weeks of Rust by jerf on Tuesday January 12, 2016 @09:00AM (#10887403)
I'm firmly of the opinion that GC is the correct default [1] and that removing GC ought to be considered an optimization, not a default choice, but there's nothing contrived about that example. I've written apps where I had to know what was going on.

[1]: At least between GC and not-GC. Rust is a new third option IMHO.

Re:Two Weeks of Rust by fsloth on Tuesday January 12, 2016 @06:53AM (#10886862)
"worry about memory management and all that jazz seems a step backwards just to save a few cycles"

We're not getting more cycles any time soon for sequential programs.

Other peoples problem constraints are not necessarily the same as yours.

Re:Two Weeks of Rust by titzer on Tuesday January 12, 2016 @08:38AM (#10887287)
Unless you use a memory and CPU profiler every day, you probably haven't got much idea what your program is doing. There are a few domains where manual control of memory management is necessary, but those are shrinking, and GCs just keep getting better with lower and lower pause times and better and better throughput. With manual memory management (like writing your program in assembly) your program will never get faster due to industry-wide advancement in GC and compiler technology.

Most GC problems can be pinpointed to poor application behavior and many are due to bottlenecks in GC (e.g. too much work done in sequential phases, etc).

Re:Two Weeks of Rust by vvanders on Tuesday January 12, 2016 @10:17AM (#10887847)
GCs are not the problem with performance. If you want real performance you need to drop down to memory layout to avoid cache misses and that means explicit control of memory allocation.

I'm talking 10-50x performance increases here. Unfortunately managed languages(and GCs in particular with everything being a ref) make this much harder than it should be.

Re:Two Weeks of Rust by pkolaczk on Wednesday January 13, 2016 @06:51AM (#10893658)
Most of the cache-related optimizations available in C++/Rust can be done as well in fast managed environments. I agree that sometimes they make it much harder than it should be, but it is often still easier to fight with a managed runtime for the 5% of performance critical code, than to fight with manual memory management of an unmanaged environment for the 95% of non-performance-critical code. If you see a 50x performance disadvantage of some program in a managed environment like JVM or .NET, it is a fault of a programmer, not the runtime nor tools.
Re:Two Weeks of Rust by fpoling on Tuesday January 12, 2016 @07:59AM (#10887107)
Although Rust does not have GC and requires the programmer to manage the memory when just relining on borrow checker is not enough, the language ensure that this is safe eliminating most of the worries with manual memory management.

In this settings GC is not necessary beneficial as it brings an extra unpredictable latency/pauses. All is fine when it does not affect the application, but when it becomes the problem, it is hard to fix and may require a significant rewrite or a very time-consuming tuning of GC parameters.

Re:Two Weeks of Rust by threeseed on Tuesday January 12, 2016 @07:02AM (#10886890)
If you are writing high performance apps then you do still need to worry about the garbage collector. For example look at the huge amount of work Spark did (Project Tungsten) in order to reduce memory pressure in the JVM. Likewise in high frequency trading and other low latency apps being able to tune the JVM is a highly sought after skill.

Even for most normal web apps a full stop the world GC is a common occurrence and a deadly one.

Re:Two Weeks of Rust by fiedzia on Tuesday January 12, 2016 @06:20AM (#10886727)
When you work on improving performance, memory management is your domain.
Re:Two Weeks of Rust by AndrewDucker on Tuesday January 12, 2016 @06:26AM (#10886753)
Depends very-much at what level you're working.

I love C#, and I love not having to write code that worries about memory (99.9% of the time anyway).

But if I was writing the .Net Runtime then I wouldn't be writing that in C#, because the runtime _does_ have to manage its own memory - and Rust looks like a very good language for writing that kind of thing in.

Re:Two Weeks of Rust by pjmlp on Tuesday January 12, 2016 @08:05AM (#10887136)
The language just needs to provide the required features to be able to do it. Some kind of unsafe mechanism and more control how the GC works.

Oberon's GC is written in Oberon:

https://www.inf.ethz.ch/personal/wirth/ProjectOberon/Sources...

Module SYSTEM is like Rust's unsafe {}.

Singularity and Midori GC's were written in their C# dialects.

With luck C# 7 onwards will get all the nice features from Sing# and System C#, as per Joe Duffy's blog.

Then using C# will be no different than Modula-3, in terms of features for systems programming.

Re:Two Weeks of Rust by markque on Tuesday January 12, 2016 @06:35AM (#10886791)
How many people need to implement a lang runtime?, less than 0.0001% of all devs I would imagine. They can use C or C++ which has done the job for decades.
Re:Two Weeks of Rust by fsloth on Tuesday January 12, 2016 @06:58AM (#10886877)
C and C++ has certainly kept people busy for decades.

There is a huge category of bugs related to sloppy fudge-factor-based programming. C++ has great tooling but it's a nightmare on an organizational scale. If I was building an engineering org and had no other alternative but C++ I would be in shambles worrying that no-one does anything horrible, no matter how good the engineers were.

I write C++ for my day job :)

Re:Two Weeks of Rust by vardump on Tuesday January 12, 2016 @08:11AM (#10887167)
I write C/C++ for my day job too and 100% agree with you. I really hope Rust (or something else with similar promise, but I don't know any viable contenders) becomes viable quickly. Especially needed in firmware and kernel mode drivers.
Re:Two Weeks of Rust by fiedzia on Tuesday January 12, 2016 @07:33AM (#10887006)
You can thank C/C++ for vast majority of software bugs. Billions of dollars and decades of productivity setback, and prognosis of fixing those issues for many years to come. All languages and tools that rely on people not making mistakes must die, the sooner the better.
Re:Two Weeks of Rust by tarpherder on Wednesday January 13, 2016 @03:06AM (#10892933)
All tools and all languages rely on people not making mistakes to produce a working product. C/C++ just has a set of user created problems that can be particularly nasty to solve or deal with.
Re:Two Weeks of Rust by fiedzia on Friday January 15, 2016 @04:21AM (#10908131)
The degree of this reliance varies greatly, and its better to choose tools that minimise or eliminate this. We can now do better then C, so let's kill it. Btw. just today OpenSSH got another buffer overflow found. One that exposes private keys.
Re:Two Weeks of Rust by lionize on Tuesday January 12, 2016 @07:50AM (#10887068)
I disagree, all languages have the potential to be misused by poor programmers and it's the developer who is the source of the bug, the Linux kernel is written in C and is the most successful/widely used piece of software ever written largely due to the quality of the devs. Blaming a language for bugs or hoping new shiny one will stop a poor programmer for producing bugs is wishful thinking
Re:Two Weeks of Rust by fiedzia on Tuesday January 12, 2016 @08:04AM (#10887128)
> I disagree, all languages have the potential to be misused by poor programmers and it's the developer who is the source of the bug.

We can easily fix tools and processes, we will never fix people. Sure, all languages allow to create bugs, but some orders of magnitude more then others.

> kernel is written in C and is the most successful/widely used piece of software

end every release finds bugs in filesystem drivers, and buffer overflows and security issues and breaks display drivers. Seriously think of all the things kernel developers could do if they didn't waste years of work on tracking invalid pointers and off-by-one errors. Over and over and over again.

Re:Two Weeks of Rust by pjmlp on Tuesday January 12, 2016 @08:07AM (#10887143)
Re:Two Weeks of Rust by wtetzner on Tuesday January 12, 2016 @02:10PM (#10889596)
What a strange thing to say. You're saying we should never try to improve on C or C++? That sounds insane to me.
Re:Two Weeks of Rust by Manishearth on Tuesday January 12, 2016 @12:34PM (#10888831)
"You have to think about it. You don't have to worry about it."

https://news.ycombinator.com/item?id=10711997

Re:Two Weeks of Rust by dbaupp on Wednesday January 13, 2016 @12:37AM (#10892493)
Rust's ownership model does more than just allow avoiding a garbage collector.

It allows managing arbitrary resources more easily, so it is clear who is control of things at any point of time, e.g. if a function takes a File, who should close it (if the callee closes it, or if the caller needs to) is just a matter of documentation, while it is expressed naturally in the Rust type signature, and is hence checked by compilers. This isn't unique to Rust, e.g. it's basically the same as C++'s RAII but it is checked far more precisely by the Rust compiler: it is up to the programmer to not make a mistake in C++. http://blog.skylight.io/rust-means-never-having-to-close-a-s...

It is also an important part about getting guarantees for concurrent code, as it allows fairly precise control over sharing (or not). This not only means Rust code without `unsafe` is free from data races, but also means that, for example, one can be sure a program built on message passing (ala CSP/Go) is not accidentally sharing things that shouldn't be shared. http://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.ht...

Re:Two Weeks of Rust by one-more-minute on Tuesday January 12, 2016 @06:25AM (#10886749)
In almost all programming use cases you'd be right, but sometimes the domain problem is the machine. If you're writing control software for a drone you want to know that you're getting use out of every cycle and that there aren't going to be any unpredictable hundred-millisecond pauses.
Re:Two Weeks of Rust by markque on Tuesday January 12, 2016 @06:37AM (#10886802)
You can bet your house that people will be trying to use Rust for general purpose reasons such as web apps etc.
Re:Two Weeks of Rust by viraptor on Tuesday January 12, 2016 @06:54AM (#10886865)
I already did, and it works pretty well. You spend more time developing, but the type system prevents lots of silly runtime mistakes. (which you'd spend time debugging later on otherwise) I wrote web apps in dynamic languages like everyone else and know that there are situations where you practically just ignore many potential failures and cannot be sure your code runs in practice, even with ~100% coverage.

Writing in a language with proper types helps a lot. Being forced to acknowledge every error returned is great. The only time I had to think about memory management was during integration of database connection pooling and the web framework, but that's just because I was one of the first ones to try. Otherwise memory management doesn't get in the way at all.

Re:Two Weeks of Rust by Hytosys on Tuesday January 12, 2016 @07:20AM (#10886947)
Reporting for roll call. Once you get cope with abandoning all of the metaprogramming-heavy APIs a la ActiveRecord that have been front and center in pop web dev, it's quite lovely. The only thing that seems to slow down my work is the lack of a developed web ecosystem for Rust.

My hypothesis was that the type system is be able to benefit practically all domains. Personally, so far, I've become a cautious believer.

Re:Two Weeks of Rust by amelius on Tuesday January 12, 2016 @06:14AM (#10886707)
It would be nice if the language itself provided hooks (or whatever you would call it) to implement your own GC (or, of course, to use a library for that purpose). I have not yet encountered such a language, though (LLVM has a low-level language that allows it, but I don't know the details).
Re:Two Weeks of Rust by bjz_ on Tuesday January 12, 2016 @08:27AM (#10887233)
pnkfelix (from Mozilla) has been doing lots of investigation into custom allocators[0], custom GCs, and embedding Rust into places where a GC is already active. He also recently published some blog posts outlining the problem of GC interop[1][2]. Quoting aturon[3]:

> To be clear, a major goal of this project -- outlined in the earlier blog posts -- is "GC as Interoperation Feature". That is, we want to embed Rust code into contexts with existing GCs (such as the V8 or SpiderMonkey Javascript engines), and so Felix is trying to find ways to accommodate a relatively wide range of GC approaches, with maximally safe, efficient, and ergonomic support on the Rust side.

Might be a while off before good support for custom GCs for pure Rust code, but it's definitely being thought about.

[0]: https://github.com/rust-lang/rfcs/pull/1398

[1]: http://blog.pnkfx.org/blog/2015/11/10/gc-and-rust-part-1-spe...

[2]: http://blog.pnkfx.org/blog/2016/01/01/gc-and-rust-part-2-roo...

[3]: https://www.reddit.com/r/rust/comments/3zqtoc/gc_and_rust_pa...

Re:Two Weeks of Rust by Cyph0n on Tuesday January 12, 2016 @07:07AM (#10886906)
Nim allows you to disable the GC if I'm not mistaken. D also, but to a lesser extent.

Jai [1], Jonathan Blow's language in progress, has a ton of customizable features. For example, the memory allocator is quite straightforward to swap natively without any hacks.

[1]: https://github.com/BSVino/JaiPrimer/blob/master/JaiPrimer.md

Re:Two Weeks of Rust by viraptor on Tuesday January 12, 2016 @07:02AM (#10886892)
Rust does that. Rc type is implemented in Rust. (https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html) There's also arena allocation available as a library. (https://crates.io/crates/typed-arena/) You can add your own memory management abstractions as libraries.
Re:Two Weeks of Rust by amelius on Tuesday January 12, 2016 @07:15AM (#10886931)
Very interesting.

I'm also interested in one particular kind of memory abstraction: abstracted access to memory mapped files. Here the problem is that the base address of the memory mapped area might change whenever you perform the mapping. And you would like to use standard data-structures (like maps, lists, etc.) inside the memory mapped area.

Re:Two Weeks of Rust by viraptor on Tuesday January 12, 2016 @07:21AM (#10886951)
Mmaped files are already available it seems (https://crates.io/crates/mmap/), although I've never tried it. You'd have to implement the interesting structures on top of that yourself however.
Re:Two Weeks of Rust by vardump on Tuesday January 12, 2016 @08:07AM (#10887145)
Relative pointers are great in memory map data structures. All pointers are relative to current offset. That way it's almost always also possible to get away with just 32-bit pointers -- you get +- 8 GB range.

A library that can do that in Rust would be great.

Re:Two Weeks of Rust by agrover on Tuesday January 12, 2016 @12:05PM (#10888604)
A signed 32 bit "offset" value gives you 2GB in each direction, not 4GB in each direction.
Re:Two Weeks of Rust by vardump on Tuesday January 12, 2016 @12:37PM (#10888851)
Only if you use byte aligned relative pointers. For data structures you don't need better than 32-bit aligned pointers. So you get +- 8GB relative offsets. It's not all that unreasonable to use 64-bit or even 128-bit alignment, for +-16 GB and +-32 GB respectively.
Re:Two Weeks of Rust by amelius on Tuesday January 12, 2016 @07:50AM (#10887066)
Hmm, it seems this library only provides the basic I/O.

The main problem is not opening the mmapped file. The problem is having a kind of pointer that allows arbitrary offsetting, and using this pointer inside standard data structures.

Re:Two Weeks of Rust by fpoling on Tuesday January 12, 2016 @09:45AM (#10887653)
Rust has typesafe arenas, when one allocates small objects from a bigger chunk of memory and typesystem ensures that small objects do not outlive the chunk. I suppose mmap files could be treated similarly when assembling a pointer from an offset stored in the mmaped file is treated as an allocation.
Re:Two Weeks of Rust by lultimouomo on Tuesday January 12, 2016 @08:03AM (#10887125)
When you've worked with languages that help you think about ownership (like Rust or even modern C++), being back to languages that throw you a pointer/reference had leave you on your own to figure out what it's lifecycle is and what you can to with them is a huge step back. For me is the think that sucks most when programming in Java, for instance.
Re:Two Weeks of Rust by wtetzner on Tuesday January 12, 2016 @02:24PM (#10889685)
Just out of curiosity, why do you care so much about the lifecycle of an object.

I can see why you might want to know in the case where you're representing an external resource, e.g. an open file, but otherwise, I don't see any reason to care about it.

In face, with persistent data structures, you can't know. The same is true of share (immutable) data with multiple threads. You can't know the lifetime.

Re:Two Weeks of Rust by hellofunk on Tuesday January 12, 2016 @01:16PM (#10889189)
Consider how enormous the computer game industry is... and nearly no professional game developer will work in a GC environment because it is indeed a problem for the user experience in high performance games. Sometimes, focusing on the machine is nearly the whole point of the focus on the domain problem.
Re:Two Weeks of Rust by Gankro on Tuesday January 12, 2016 @01:33PM (#10889313)
Well, except for literally all the developers that use Unity, Flash, Java, and GameMaker (but I guess they aren't True Professionals?)

In the space of core engine stuff, I agree.

Re:Two Weeks of Rust by hellofunk on Tuesday January 12, 2016 @02:03PM (#10889555)
Fair point. But a lot of people write their own C++ engines for their apps. This is certainly true in a lot of mobile games.
Re:Two Weeks of Rust by EliRivers on Tuesday January 12, 2016 @06:32AM (#10886783)
Yet people never seem to stop demanding performance in some domains. Silly peoples.
Re:Two Weeks of Rust by lmm on Tuesday January 12, 2016 @06:49AM (#10886847)
I bet 99% of the people who insist it has to be non-GC for performance never actually tried writing it in OCaml, profiling, and optimising the hotspots.
Re:Two Weeks of Rust by EliRivers on Tuesday January 12, 2016 @07:39AM (#10887026)
OCaml code will never be the performance bottleneck. Because nobody will ever run it :p