D vs Rust

Eljay via Digitalmars-d digitalmars-d at puremagic.com
Sun Sep 3 11:26:59 PDT 2017


I work on a large multi-platform desktop shrink-wrap application. 
  It is a large application, with a code base of over 400,000 
files.  The majority of which is C++, although there is some 
JavaScript in the mix in some of the corners of the UI.  The code 
base is about 30 years old... so you probably can imagine that 
the code has room for improvement.

For an existing project of that size, it makes no sense to try to 
throw it out and start over.  That would be recklessly 
ill-advised.

I was fantasizing:  if the app were to be written today, what 
would be suitable languages?

C++17, is a shoe in, since that corresponds to reality (if looked 
at through a carnival mirror, since the actual code is smeared 
across C++89 - C++98/03 - C++11/14 - C++17 like cities built on 
top the ruins of cities, and its turtles all the way down).

Since I'm a D fanboy, I put D on the list.  And I think these as 
well:  C#, F#, Go*, C, Lua (with some core functionality in C), 
Java, Groovy*, Scala*, Swift.  And maybe, at a stretch, Ada*, 
Clojure*, Kotlin*.

* I've no practical experience in these languages.

A friend of mine said I should add Rust* to the list.  I'm not 
familiar with Rust, so today is my "dive into Rust" day.  That's 
how I got here.  (Hi Walter!  Hi Bearophile!  I've been away for 
a long while.)

In my fantasy, the biggest challenge with a large multi-platform 
application is the tooling and support.

So some of the questions that are meta-language related are...

What are the IDEs like?  People want to have bother-free version 
control, enjoyable debugging experience, works on the target 
platforms, manage very large projects.  C++ has excellent support 
by Visual Studio, and very good support by Xcode.

What do the standard libraries offer?  C++ has a reasonably nice 
standard library.

What off-the-shelf libraries can be leveraged?  C++ has Boost, 
and many others.  A vibrant ecosystem.

Can the language "do the job"?  Part of "doing the job" is 
interoperating with the target platform.  In this fantasy case, 
Win32 with GDI/GDI+ (possibly .NET as a viable alternative), and 
Cocoa.  If that involves writing a C-API bridging layer from 
Language X to Host Platform, that is friction.  A fantasy project 
this size can absorb that kind of friction.

Can we hire 100+ programmers willing to use that language?

Those things are important, even though they are outside the 
domain of the language itself.  Toolchains.  IDEs.  Tool vendor 
stability.  Debugging.  Large project management.  Version 
control.  Suitability.  Community & ecosystem.  Human resources.

Since my love-hate relationship with C++ is well known, in my 
do-over fantasy world, I hope there is a better suited language.

And "make your own language" is not on the table.  I've read 
Aho's dragon book... I've tried that... it is VERY HARD to make 
your own general purpose language, and will consume 10+ years of 
your life.  Bjarne Stroustrup said, "If you do anything useful it 
will haunt you forever after, and if you have a major success you 
get decades of hard manual labor - meaning you have to work on 
the manual."  *hugs* to Walter & Andrei.

A cautious person would probably say "Use Swift on Mac, use C# or 
F# on .NET on Windows.  Write the code twice.  Boom, done."  
That's been tried, turns out maintaining parity that way does not 
work out so well.  Case in point:  check out Office for Windows, 
and Office for Mac.

Step back...

Why am I sharing this on this forum?

I think these meta-language issues need to be thought about to 
help D gain more traction.  In addition to the core language 
issues that Andrei has already discussed in depth, and were 
mentioned again in this thread.

And I really love D.  It speaks to me.  It is the language I wish 
C++ was.  If I could have created a language, I would compare it 
against D as my gold standard.

I look at the history of RemObjects, and how they had a 
distributed object technology... but to support it they had to 
become a language vendor (of Oxygene, their version of Delphi, 
which is Apple/Wirth's Object Pascal), and then had to create 
their Elements compiler, and extend it to support multiple target 
platforms, and then extend it more to support multiple languages 
(Object Pascal, C#, Swift, Java) in their ecosystem.  And now 
they've jumped into the IDE game.  It is interesting to note that 
where they started and how they got to where they are is an 
interesting journey of necessity.


More information about the Digitalmars-d mailing list