Re: Pitching D to a gang of Gophers

2016-03-14 Thread sanjayss via Digitalmars-d
On Wednesday, 9 March 2016 at 13:23:55 UTC, Andrei Alexandrescu 
wrote:

On 03/07/2016 02:17 PM, landaire wrote:
I'd like to add that one of the things that I love about Go is 
that it
is crazy easy to cross-compile. `GOOS=freebsd go build` and I 
have a
FreeBSD binary sitting in my working directory, ready to send 
off.


What would be some good cases for that? When I want to 
cross-compile, I ssh into the target machine and build there. 
-- Andrei


It's typical in an embedded target development environment that 
you are working on Windows (or nowadays Linux) and developing for 
some target platform (though yeah, perhaps it doesn't make much 
sense to build on Windows for FreeBSD, I assume the idea is to 
make target platform development sort of generic). It also helps 
if you are trying to develop a multi-platform tool and prefer to 
develop on just one platform -- a single build could potentially 
generate binaries for all the target platforms.


Re: Pitching D to a gang of Gophers

2016-03-14 Thread Dmitry Olshansky via Digitalmars-d

On 14-Mar-2016 00:32, cym13 wrote:

On Sunday, 13 March 2016 at 21:16:45 UTC, Dmitry Olshansky wrote:

On 13-Mar-2016 22:13, kdmult wrote:

On Saturday, 12 March 2016 at 08:09:41 UTC, Dmitry Olshansky wrote:

On 05-Mar-2016 14:05, Dmitry Olshansky wrote:
Obligatory slides:
http://slides.com/dmitryolshansky/deck/fullscreen/


There are 2 bugs in
http://slides.com/dmitryolshansky/deck/fullscreen/#/4/1


Thanks, both fixed!


Also some typos:

  "ellimination" -> "elimination"
http://slides.com/dmitryolshansky/deck/fullscreen/#/4/5

"usefull" -> "useful"
"simillar" -> "similar"
http://slides.com/dmitryolshansky/deck/fullscreen/#/5/6



Thx, fixed these too.

--
Dmitry Olshansky


Re: Pitching D to a gang of Gophers

2016-03-13 Thread cym13 via Digitalmars-d

On Sunday, 13 March 2016 at 21:16:45 UTC, Dmitry Olshansky wrote:

On 13-Mar-2016 22:13, kdmult wrote:
On Saturday, 12 March 2016 at 08:09:41 UTC, Dmitry Olshansky 
wrote:

On 05-Mar-2016 14:05, Dmitry Olshansky wrote:
Obligatory slides:
http://slides.com/dmitryolshansky/deck/fullscreen/


There are 2 bugs in
http://slides.com/dmitryolshansky/deck/fullscreen/#/4/1


Thanks, both fixed!


Also some typos:

 "ellimination" -> "elimination" 
http://slides.com/dmitryolshansky/deck/fullscreen/#/4/5


"usefull" -> "useful"
"simillar" -> "similar"
http://slides.com/dmitryolshansky/deck/fullscreen/#/5/6




Re: Pitching D to a gang of Gophers

2016-03-13 Thread Dmitry Olshansky via Digitalmars-d

On 13-Mar-2016 22:13, kdmult wrote:

On Saturday, 12 March 2016 at 08:09:41 UTC, Dmitry Olshansky wrote:

On 05-Mar-2016 14:05, Dmitry Olshansky wrote:
Obligatory slides:
http://slides.com/dmitryolshansky/deck/fullscreen/


There are 2 bugs in
http://slides.com/dmitryolshansky/deck/fullscreen/#/4/1


Thanks, both fixed!

--
Dmitry Olshansky


Re: Pitching D to a gang of Gophers

2016-03-13 Thread kdmult via Digitalmars-d
On Saturday, 12 March 2016 at 08:09:41 UTC, Dmitry Olshansky 
wrote:

On 05-Mar-2016 14:05, Dmitry Olshansky wrote:
Obligatory slides:
http://slides.com/dmitryolshansky/deck/fullscreen/


There are 2 bugs in
http://slides.com/dmitryolshansky/deck/fullscreen/#/4/1

--- zzz0.d  2016-03-13 22:10:44.548974800 +0300
+++ zzz1.d  2016-03-13 22:11:54.653984600 +0300
@@ -2,7 +2,7 @@
 // slice is dynamic array on GC heap
 int[] slice = [1, 2, 3, 4, 5];
 // slice the range of [1:3)
-int[] a = slice[1..3];
+int[] a = slice[1..4];
 assert(a == [2,3,4]);

 a ~= 6; // append 6
@@ -15,7 +15,7 @@

 int[] b = a.dup; // duplicate (=copy)
 b[0] = 10;
-assert(a[0] == 8);
+assert(a[0] == 4);

 assert(*a.ptr == 4);
 int k = 1;



Re: Pitching D to a gang of Gophers

2016-03-13 Thread Dmitry Olshansky via Digitalmars-d

On 12-Mar-2016 11:56, Russel Winder via Digitalmars-d wrote:

On Sat, 2016-03-12 at 11:09 +0300, Dmitry Olshansky via Digitalmars-d
wrote:

On 05-Mar-2016 14:05, Dmitry Olshansky wrote:


I'm having an opportunity to do a small tech-talk on things D in a
eCommerce shop that is currently sold on Go (migrating to SOA from
PHP
monolith). I do not intend that to become Go vs D battle but it
gives
the context.


Switching from PHP to Go is not a bad idea as CloudFlare have blazed
that trail and created a who community around it.


I does go fairly well considering the simultaneous pressure for more 
features and overall poor state of the original PHP codebase.



Obligatory slides:
http://slides.com/dmitryolshansky/deck/fullscreen/

std.concurrency working only with threads and lack of better
integration
of fibers in std is our weak spot as prompted by further questions.


Clearly there are many feature similarities between D and Go as well as
differences (slices vs. generics). looked like a nice selection of
example in teh slides to pick up on this.


Indeed I've picked up a lots of similarities esp. between D1 and Go. For 
instance, Go slices do allow stomping just like their D1 counterparts. 
OOP model and direct access to C are the major differences.



Thread pool and work stealing is clearly the way forward for
actor/dataflow architecture, though explicit threads have their place
as well.

std.parallelism has a task pool system. I wonder if there should be a
strategic move to (in some sense) merge std.concurrency, std.fibers and
std.parallelism into a single consistent whole (possibly remaining
three separate by connected packages rather than a single monolith.


Yeah, preferably we'd have future+async style concurrency together with 
actor system all riding on top of some core functionality like thread 
pools with work-stealing. IO complicates matters as it also has to be a 
part of the picture for 'fiber as actor' model to work really well.



Java has had great benefit from having a single concurrency/parallelism
strategy even though it ends up with different leaves not a monolith.



--
Dmitry Olshansky


Re: Pitching D to a gang of Gophers

2016-03-12 Thread Jon D via Digitalmars-d
On Saturday, 12 March 2016 at 08:09:41 UTC, Dmitry Olshansky 
wrote:

On 05-Mar-2016 14:05, Dmitry Olshansky wrote:
Obligatory slides:
http://slides.com/dmitryolshansky/deck/fullscreen/


Very nice slide deck. Thanks for publishing.  --Jon



Re: Pitching D to a gang of Gophers

2016-03-12 Thread Russel Winder via Digitalmars-d
On Sat, 2016-03-12 at 11:09 +0300, Dmitry Olshansky via Digitalmars-d
wrote:
> On 05-Mar-2016 14:05, Dmitry Olshansky wrote:
> > 
> > I'm having an opportunity to do a small tech-talk on things D in a
> > eCommerce shop that is currently sold on Go (migrating to SOA from
> > PHP
> > monolith). I do not intend that to become Go vs D battle but it
> > gives
> > the context.

Switching from PHP to Go is not a bad idea as CloudFlare have blazed
that trail and created a who community around it. 

> The talk went better then I would expect with lots of good
> questions. 

Sounds like some good people, using Go for good reasons not blind
fashion.

> Compile-time features generated the most favorable discussion.

This is now a bit topic again in C++, witness all the debating over
constexpr and C++17 and C++20.

> Obligatory slides:
> http://slides.com/dmitryolshansky/deck/fullscreen/
> 
> std.concurrency working only with threads and lack of better
> integration 
> of fibers in std is our weak spot as prompted by further questions.

Clearly there are many feature similarities between D and Go as well as
differences (slices vs. generics). looked like a nice selection of
example in teh slides to pick up on this.

Thread pool and work stealing is clearly the way forward for
actor/dataflow architecture, though explicit threads have their place
as well.

std.parallelism has a task pool system. I wonder if there should be a
strategic move to (in some sense) merge std.concurrency, std.fibers and
std.parallelism into a single consistent whole (possibly remaining
three separate by connected packages rather than a single monolith.

Java has had great benefit from having a single concurrency/parallelism
strategy even though it ends up with different leaves not a monolith.
 
-- 
Russel.
=
Dr Russel Winder  t: +44 20 7585 2200   voip: sip:russel.win...@ekiga.net
41 Buckmaster Roadm: +44 7770 465 077   xmpp: rus...@winder.org.uk
London SW11 1EN, UK   w: www.russel.org.uk  skype: russel_winder



signature.asc
Description: This is a digitally signed message part


Re: Pitching D to a gang of Gophers

2016-03-12 Thread Dmitry Olshansky via Digitalmars-d

On 05-Mar-2016 14:05, Dmitry Olshansky wrote:

I'm having an opportunity to do a small tech-talk on things D in a
eCommerce shop that is currently sold on Go (migrating to SOA from PHP
monolith). I do not intend that to become Go vs D battle but it gives
the context.


The talk went better then I would expect with lots of good questions. 
Compile-time features generated the most favorable discussion.


Obligatory slides:
http://slides.com/dmitryolshansky/deck/fullscreen/

std.concurrency working only with threads and lack of better integration 
of fibers in std is our weak spot as prompted by further questions.


--
Dmitry Olshansky


Re: Pitching D to a gang of Gophers

2016-03-09 Thread Shammah Chancellor via Digitalmars-d
On Wednesday, 9 March 2016 at 13:23:55 UTC, Andrei Alexandrescu 
wrote:

On 03/07/2016 02:17 PM, landaire wrote:
I'd like to add that one of the things that I love about Go is 
that it
is crazy easy to cross-compile. `GOOS=freebsd go build` and I 
have a
FreeBSD binary sitting in my working directory, ready to send 
off.


What would be some good cases for that? When I want to 
cross-compile, I ssh into the target machine and build there. 
-- Andrei


Well,  at least in a commercial environment, not having to have 
multiple pools of build machines is very helpful.  That is to 
say, I don't need 10 windows machines sitting around waiting to 
accept a job, since I can just cross compile with `GOOS=windows 
GOARCH=386 go build` on linux.


This is also why gofmt is so awesome -- if you're working with a 
team of 40 other engineers, you don't want to be messing with 
formatting holy-wars.


And another item for this thread that D really shines at:

const and immutable -- Golang lacks const and immutable.  When 
working with large-ish teams, it's pretty annoying not to be able 
to require a library take a const, or immutable parameter.


-S


Re: Pitching D to a gang of Gophers

2016-03-09 Thread ZombineDev via Digitalmars-d
On Wednesday, 9 March 2016 at 13:23:55 UTC, Andrei Alexandrescu 
wrote:

On 03/07/2016 02:17 PM, landaire wrote:
I'd like to add that one of the things that I love about Go is 
that it
is crazy easy to cross-compile. `GOOS=freebsd go build` and I 
have a
FreeBSD binary sitting in my working directory, ready to send 
off.


What would be some good cases for that? When I want to 
cross-compile, I ssh into the target machine and build there. 
-- Andrei


You can't use all target platforms as development platforms - 
e.g. Apple Watch, microcontrollers, and so on. Sometimes you 
don't have any other options than cross-compilation.
It is also more flexible from a DevOps perspective. You can setup 
a Linux build server and use it to produce builds for several 
targets.


Re: Pitching D to a gang of Gophers

2016-03-09 Thread Andrei Alexandrescu via Digitalmars-d

On 03/07/2016 02:17 PM, landaire wrote:

I'd like to add that one of the things that I love about Go is that it
is crazy easy to cross-compile. `GOOS=freebsd go build` and I have a
FreeBSD binary sitting in my working directory, ready to send off.


What would be some good cases for that? When I want to cross-compile, I 
ssh into the target machine and build there. -- Andrei


Re: Pitching D to a gang of Gophers

2016-03-07 Thread landaire via Digitalmars-d

On Saturday, 5 March 2016 at 11:05:09 UTC, Dmitry Olshansky wrote:
- tooling, tooling, tooling (IDE plugins and build tools work 
great)


I'd like to add that one of the things that I love about Go is 
that it is crazy easy to cross-compile. `GOOS=freebsd go build` 
and I have a FreeBSD binary sitting in my working directory, 
ready to send off.


Things I really like about D though are the UFC makes for really 
pleasant method chaining and cleaner code (along with 
map/filter/reduce for things), code reuse as you pointed out, and 
Dub being an actual package manager that seems to have common 
issues with dependency management solved. At least with my 
limited experience with D I haven't run into any Dub-related 
issues.


I'd like to toss in that D's lack of solid and stable `io` APIs 
in phobos is kind of sad and resulted in one of my recent 
projects being rewritten in Go.





Re: Pitching D to a gang of Gophers

2016-03-06 Thread cym13 via Digitalmars-d

On Sunday, 6 March 2016 at 14:02:25 UTC, Dmitry Olshansky wrote:

On 06-Mar-2016 10:21, Shammah Chancellor wrote:
On Saturday, 5 March 2016 at 11:05:09 UTC, Dmitry Olshansky 
wrote:

[snip]

Here's some stuff D shares with Go:

"Single" binary deployments.
Garbage Collector
In-language slices and maps
Foreach (Although D is much more powerful here)

Some things D is weak on:
* The name -- all I ever hear are penis jokes.


Thankfully not in my country ;)


* Garbage Collector (!)


This is indeed a sore spot, Go rapidly advanced their GC and 
even took advantage of it being non-copying to deliver on 
lower-latency front. Wonder if we could squeeze some more bang 
out of GC.


* dfix and dfmt aren't as good as gofmt and gofix. (And 
believe me I
understand they will be much more difficult to get to parity 
due to the

feature set of D)


Strangely people love single imposed code style of Go, and in 
many ways other enforced conventions.


* Docs  -- although these have gotten much much better 
recently -- the
current implementation of concepts makes it hard for people to 
know

where and when they can use a type.  E.g sort docs
(http://dlang.org/phobos/std_algorithm_sorting.html#sort) How 
do I know
what types of things I can sort as a newcomer? Even if I 
figure out that
I need to look at isForwardRange, the docs there aren't 
terribly helpful

either
(https://dlang.org/phobos/std_range_primitives.html#isForwardRange)  I
would put up a PR, but I don't know how to fix it without 
introducing a
language structure for Concepts -- but this has been veto'd 
for a
variety of reasons (primarily type explosion as I understand 
the arguments)

* Libraries


Probably the biggest issue. Another one I'd pull is complexity, 
there is sooo many moving parts in D by now that we 
consistently fail to deliver a feature complete spec and/or 
compiler for it.




Some things D is much better on (and would cause me to choose 
it every
time and just contribute fixes where I could to the external 
tools):


* Package management/build tools
* Integration with existing build systems/libraries
* Reusable algorithms that are FAST
* Empowering programmer expressiveness without enabling magic


Overall my impression is that if we were to compare D and Go as 
tools, D would be more of meta tool - i.e. a tool to create 
tools whereas Go is ready made toolkit that is nicely crafted 
but quite limited.


Now I only need to appeal to the former somehow ;)


-S.


Just to temper some points that I agree with in principle:


* Garbage Collector (!)
D doesn't need a better GC in my opinion. Go's GC has to be 
really good because AFAIK there is no other way to manage memory. 
Same for Java. But as good as a GC can be it will never be good 
enough for all applications. D solved the problem by proposing 
other memory management schemes so when the GC isn't good enough 
you just don't use it. Developping such schemes is *way* more 
important to D's future than a better GC that can never be more 
than good enough for more people but never everybody.



* Libraries
There again as using C libraries in Go is tiresome there is more 
incentive not to reuse them. OK, this is a weak point, I too 
think this is maybe the most proeminent D flaw.


Re: Pitching D to a gang of Gophers

2016-03-06 Thread Dmitry Olshansky via Digitalmars-d

On 06-Mar-2016 10:21, Shammah Chancellor wrote:

On Saturday, 5 March 2016 at 11:05:09 UTC, Dmitry Olshansky wrote:

[snip]

Here's some stuff D shares with Go:

"Single" binary deployments.
Garbage Collector
In-language slices and maps
Foreach (Although D is much more powerful here)

Some things D is weak on:
* The name -- all I ever hear are penis jokes.


Thankfully not in my country ;)


* Garbage Collector (!)


This is indeed a sore spot, Go rapidly advanced their GC and even took 
advantage of it being non-copying to deliver on lower-latency front. 
Wonder if we could squeeze some more bang out of GC.



* dfix and dfmt aren't as good as gofmt and gofix. (And believe me I
understand they will be much more difficult to get to parity due to the
feature set of D)


Strangely people love single imposed code style of Go, and in many ways 
other enforced conventions.



* Docs  -- although these have gotten much much better recently -- the
current implementation of concepts makes it hard for people to know
where and when they can use a type.  E.g sort docs
(http://dlang.org/phobos/std_algorithm_sorting.html#sort) How do I know
what types of things I can sort as a newcomer? Even if I figure out that
I need to look at isForwardRange, the docs there aren't terribly helpful
either
(https://dlang.org/phobos/std_range_primitives.html#isForwardRange)  I
would put up a PR, but I don't know how to fix it without introducing a
language structure for Concepts -- but this has been veto'd for a
variety of reasons (primarily type explosion as I understand the arguments)
* Libraries


Probably the biggest issue. Another one I'd pull is complexity, there is 
sooo many moving parts in D by now that we consistently fail to deliver 
a feature complete spec and/or compiler for it.




Some things D is much better on (and would cause me to choose it every
time and just contribute fixes where I could to the external tools):

* Package management/build tools
* Integration with existing build systems/libraries
* Reusable algorithms that are FAST
* Empowering programmer expressiveness without enabling magic


Overall my impression is that if we were to compare D and Go as tools, D 
would be more of meta tool - i.e. a tool to create tools whereas Go is 
ready made toolkit that is nicely crafted but quite limited.


Now I only need to appeal to the former somehow ;)


-S.



--
Dmitry Olshansky


Re: Pitching D to a gang of Gophers

2016-03-06 Thread Jacob Carlborg via Digitalmars-d

On 2016-03-06 10:05, Dmitry Olshansky wrote:


However the opposite is also bad - in D you need to re-implement ALL of
network/IO libraries from scratch to use async+fibers like e.g. vibe.d.
Our famous C/C++ interop actually hurts us in this case because it's
TRIVIAL to stumble on a blocking call in a fiber via some 3rd party
library.


I'm wondering how much work it would be to expose the read/write 
functions from vibe.d, update a C library to use the read/write 
functions from vibe.d and use that C library together with vibe.d.


--
/Jacob Carlborg


Re: Pitching D to a gang of Gophers

2016-03-06 Thread Dmitry Olshansky via Digitalmars-d

On 06-Mar-2016 01:13, Walter Bright wrote:

On 3/5/2016 3:05 AM, Dmitry Olshansky wrote:

What features you'd highlight to enterprise-ish user?


Interfacing to existing C and C++ code.



They have no C/C++ code to interface to, so it makes little sense to 
them. Many prominent C libraries actually have fine Go bindings for 
things like compression/encryption, in fact there most likely more of 
them then for D (because of popularity of Go).


--
Dmitry Olshansky


Re: Pitching D to a gang of Gophers

2016-03-06 Thread Dmitry Olshansky via Digitalmars-d

On 05-Mar-2016 14:31, John Colvin wrote:

On Saturday, 5 March 2016 at 11:05:09 UTC, Dmitry Olshansky wrote:

I'm having an opportunity to do a small tech-talk on things D in a
eCommerce shop that is currently sold on Go (migrating to SOA from PHP
monolith). I do not intend that to become Go vs D battle but it gives
the context.

[...]


Have you seen this?
http://www.jtolds.com/writing/2016/03/go-channels-are-bad-and-you-should-feel-bad/
I'm not sure if it's all correct and how to compare the situation to D,
but it was interesting to read.


Rings true with my (limited) experience with Go.

--
Dmitry Olshansky


Re: Pitching D to a gang of Gophers

2016-03-06 Thread Dmitry Olshansky via Digitalmars-d

On 05-Mar-2016 20:17, Chris Wright wrote:

On Sat, 05 Mar 2016 14:05:09 +0300, Dmitry Olshansky wrote:


What features you'd highlight to enterprise-ish user?


Go isn't bad from an enterprise perspective -- it's better than D, in
fact. Go has a major company heavily invested in it, and a number of
other companies are supporting it.

D is much more programmer-friendly, and that's where it tends to shine.
C# is close enough that there's no order-of-magnitude difference, plus
it's got corporate support, so for an enterprise crowd I'd sooner
recommend it.


All true. In fact I've been worried that D may look like just another C# 
with a bit different set of trade-offs. Like native code C/C++ inter-op 
friendly C# with strong compile-time meta-programming capabilities.


Keeping in mind that folks sometimes are just fine with run-time 
meta-programming as in being able to use compiler as a library...



Things I might talk about:

Interacting with the fiber scheduler explicitly. Goroutines are
hermetically sealed. D Fibers are much more open.


Interacting with scheduler directly is a type code these folks would 
LOVE to avoid. And looking at in-house library I can wholeheartedly 
agree, there is just not enough system-level expertise to meaningfully 
use this kind of control.



  * Need fiber-local storage? Subclass Fiber and you're a cast away from
it. Need goroutine-local storage? There's a library for it, but it's a
terribly ugly hack.



  * Need to shut down a goroutine and stop it from running? You have to
have it explicitly check in every location another goroutine might want
to stop it, and it's not a trivial check either. Plus you need to
propagate a channel down the stack somehow. In D, it's almost trivial to
stop a Fiber.
  * Need to schedule things precisely?


Most likely the answer would - why should I. And indeed for the most 
purposes of a web-service there is rarely a good need for it.



Impossible. You can sleep, or you
can wait on IO, but that's it. You can't rate-limit an operation,
or add  thread affinity so one set of goroutines is reliably scheduled
independently of another. In D, you can implement all of that.



However the opposite is also bad - in D you need to re-implement ALL of 
network/IO libraries from scratch to use async+fibers like e.g. vibe.d. 
Our famous C/C++ interop actually hurts us in this case because it's 
TRIVIAL to stumble on a blocking call in a fiber via some 3rd party library.



Templates vs interface{}. interface{} is nice to have sometimes, and
we've got std.variant for those times. But almost always we want actual
type safety and not to put casts everywhere.


Working with JSON could be an interesting example as Go's solution 
involves lots of type-casting when working with dynamic structure.



Better control over the garbage collector. You can prevent collections
from running in D and have the compiler enforce non-usage of the GC.

Then there are all the ways in which Go deviates from standard practices
and gets things wrong.


I count a lot of these, mostly all of them have to do with the fact that 
writing anything non-bogus by default requires great discipline to write 
highly repetitive non-trivial patterns. For instance, channels are 
awkwardly non-composable low-level primitives that are easy to get wrong 
in so many ways.



There's a giant list of them, and D doesn't give a
specific advantage.



--
Dmitry Olshansky


Re: Pitching D to a gang of Gophers

2016-03-05 Thread Shammah Chancellor via Digitalmars-d

On Saturday, 5 March 2016 at 11:05:09 UTC, Dmitry Olshansky wrote:
I'm having an opportunity to do a small tech-talk on things D 
in a eCommerce shop that is currently sold on Go (migrating to 
SOA from PHP monolith). I do not intend that to become Go vs D 
battle but it gives the context.


What guys seem to like of Go from my observation:
- goroutines instead of direct asynchronous programming*
- fast runtime with state of the art GC
- host of ready-made libraries esp. http & networking**
- lightweight OOP that doesn't get in your way
- tooling, tooling, tooling (IDE plugins and build tools work 
great)


*Note: all of standard I/O is transparently handled with 
goroutines much like vibe.d but goroutines are migrating across 
thread pool
** That being said there are tons of 1-man projects of dubious 
quality,


So far I'd thought of a few big themes:
- little nice things (slices/maps, things like 1_000_000 and 
e.g. a < b && d < e is parse error, UFCS)
- code reuse (templates & ranges, with examples like generic 
min and some algo)

- compile-time works (CTFE, need simpler example then regex)

I'm still pondering whether I should dive into UDA, I'd try to 
stay simple as simplicity is one of things Go guys known to 
love.


What features you'd highlight to enterprise-ish user?


I work in a 99% Go shop (a splash of C, and some smattering of 
scripts for in-house tools.)  I've tried to use D for a few 
things, and tried to get other people interested in it.  So, 
here's my perception:


Everything you've said is true, and D should focus on making some 
of these things much better.  Additionally, the compiled (mostly 
single binary nature) of Go makes it very nice for deployments.   
Focusing on dfmt, and dfix would be a huge win.


Here's some stuff D shares with Go:

"Single" binary deployments.
Garbage Collector
In-language slices and maps
Foreach (Although D is much more powerful here)

Some things D is weak on:
* The name -- all I ever hear are penis jokes.
* Garbage Collector (!)
* dfix and dfmt aren't as good as gofmt and gofix. (And believe 
me I understand they will be much more difficult to get to parity 
due to the feature set of D)
* Docs  -- although these have gotten much much better recently 
-- the current implementation of concepts makes it hard for 
people to know where and when they can use a type.  E.g sort docs 
(http://dlang.org/phobos/std_algorithm_sorting.html#sort) How do 
I know what types of things I can sort as a newcomer? Even if I 
figure out that I need to look at isForwardRange, the docs there 
aren't terribly helpful either 
(https://dlang.org/phobos/std_range_primitives.html#isForwardRange)  I would put up a PR, but I don't know how to fix it without introducing a language structure for Concepts -- but this has been veto'd for a variety of reasons (primarily type explosion as I understand the arguments)

* Libraries

Some things D is much better on (and would cause me to choose it 
every time and just contribute fixes where I could to the 
external tools):


* Package management/build tools
* Integration with existing build systems/libraries
* Reusable algorithms that are FAST
* Empowering programmer expressiveness without enabling magic

-S.


Re: Pitching D to a gang of Gophers

2016-03-05 Thread Shammah Chancellor via Digitalmars-d

On Saturday, 5 March 2016 at 11:31:27 UTC, John Colvin wrote:
On Saturday, 5 March 2016 at 11:05:09 UTC, Dmitry Olshansky 
wrote:
I'm having an opportunity to do a small tech-talk on things D 
in a eCommerce shop that is currently sold on Go (migrating to 
SOA from PHP monolith). I do not intend that to become Go vs D 
battle but it gives the context.


[...]


Have you seen this? 
http://www.jtolds.com/writing/2016/03/go-channels-are-bad-and-you-should-feel-bad/ I'm not sure if it's all correct and how to compare the situation to D, but it was interesting to read.


That article is correct -- I've used go extensively at this 
point.  This is also a good article: 
https://gist.github.com/kachayev/21e7fe149bc5ae0bd878


Re: Pitching D to a gang of Gophers

2016-03-05 Thread Jack Stouffer via Digitalmars-d

On Saturday, 5 March 2016 at 22:13:40 UTC, Walter Bright wrote:

On 3/5/2016 3:05 AM, Dmitry Olshansky wrote:

What features you'd highlight to enterprise-ish user?


Interfacing to existing C and C++ code.


If they were a PHP shop, then this wouldn't matter much to them.


Re: Pitching D to a gang of Gophers

2016-03-05 Thread Walter Bright via Digitalmars-d

On 3/5/2016 3:05 AM, Dmitry Olshansky wrote:

What features you'd highlight to enterprise-ish user?


Interfacing to existing C and C++ code.



Re: Pitching D to a gang of Gophers

2016-03-05 Thread Chris Wright via Digitalmars-d
On Sat, 05 Mar 2016 14:05:09 +0300, Dmitry Olshansky wrote:

> What features you'd highlight to enterprise-ish user?

Go isn't bad from an enterprise perspective -- it's better than D, in 
fact. Go has a major company heavily invested in it, and a number of 
other companies are supporting it.

D is much more programmer-friendly, and that's where it tends to shine. 
C# is close enough that there's no order-of-magnitude difference, plus 
it's got corporate support, so for an enterprise crowd I'd sooner 
recommend it.

Things I might talk about:

Interacting with the fiber scheduler explicitly. Goroutines are 
hermetically sealed. D Fibers are much more open.
 * Need fiber-local storage? Subclass Fiber and you're a cast away from 
it. Need goroutine-local storage? There's a library for it, but it's a 
terribly ugly hack.
 * Need to shut down a goroutine and stop it from running? You have to 
have it explicitly check in every location another goroutine might want 
to stop it, and it's not a trivial check either. Plus you need to 
propagate a channel down the stack somehow. In D, it's almost trivial to 
stop a Fiber.
 * Need to schedule things precisely? Impossible. You can sleep, or you 
can wait on IO, but that's it. You can't rate-limit an operation, or add 
thread affinity so one set of goroutines is reliably scheduled 
independently of another. In D, you can implement all of that.

Templates vs interface{}. interface{} is nice to have sometimes, and 
we've got std.variant for those times. But almost always we want actual 
type safety and not to put casts everywhere.

Better control over the garbage collector. You can prevent collections 
from running in D and have the compiler enforce non-usage of the GC.

Then there are all the ways in which Go deviates from standard practices 
and gets things wrong. There's a giant list of them, and D doesn't give a 
specific advantage.


Re: Pitching D to a gang of Gophers

2016-03-05 Thread John Colvin via Digitalmars-d

On Saturday, 5 March 2016 at 11:05:09 UTC, Dmitry Olshansky wrote:
I'm having an opportunity to do a small tech-talk on things D 
in a eCommerce shop that is currently sold on Go (migrating to 
SOA from PHP monolith). I do not intend that to become Go vs D 
battle but it gives the context.


[...]


Have you seen this? 
http://www.jtolds.com/writing/2016/03/go-channels-are-bad-and-you-should-feel-bad/ I'm not sure if it's all correct and how to compare the situation to D, but it was interesting to read.


Re: Pitching D to a gang of Gophers

2016-03-05 Thread Dmitry Olshansky via Digitalmars-d

On 05-Mar-2016 14:11, Jakob Bornecrantz wrote:

On Saturday, 5 March 2016 at 11:05:09 UTC, Dmitry Olshansky wrote:

What features you'd highlight to enterprise-ish user?


Have go solved stacktraces in gorutines, last I checked this was a big
pain point for go developers, otherwise its a good issue to bring up.

Cheers, Jakob.


Sort of, yes - there is a tool that trims down stacktraces from 
irrelevant goroutines on panic if that is what you refer to. Also it's 
done by default in the latest v1.6.


--
Dmitry Olshansky


Re: Pitching D to a gang of Gophers

2016-03-05 Thread Jakob Bornecrantz via Digitalmars-d

On Saturday, 5 March 2016 at 11:05:09 UTC, Dmitry Olshansky wrote:

What features you'd highlight to enterprise-ish user?


Have go solved stacktraces in gorutines, last I checked this was 
a big pain point for go developers, otherwise its a good issue to 
bring up.


Cheers, Jakob.