Re: My first email to Walter, ever

2013-07-09 Thread Kagamin

On Sunday, 7 July 2013 at 12:27:02 UTC, Peter Alexander wrote:

:-(

template allSatisfy(alias F, T...)
{
static if (T.length == 0)
{
enum allSatisfy = true;
}
else static if (T.length == 1)
{
enum allSatisfy = F!(T[0]);
}
else
{
enum allSatisfy =
allSatisfy!(F, T[ 0  .. $/2]) 
allSatisfy!(F, T[$/2 ..  $ ]);
}
}


It's deplhi-style
http://www.freepascal.org/docs-html/ref/refse77.html#x155-16500014.3


Re: A very basic blog about D

2013-07-09 Thread John Colvin

On Sunday, 7 July 2013 at 15:00:43 UTC, John Colvin wrote:
I had some free time so I decided I should start a simple blog 
about D, implementing some unix utilities. I've 
(unsurprisingly) started with echo.


http://foreach-hour-life.blogspot.co.uk/

It's nothing ground-breaking, but every little helps :)


Seeing as most of the traffic I'm getting is from this thread, I 
thought it might be interesting for people to see some stats 
about where people are from, what browsers they're using etc.


https://dl.dropboxusercontent.com/u/910836/Webstats_02072013-10_09072013-09.png

A lot of windows users, although that's skewed by people browsing 
from work. I hope that accounts for the IE contingent as well!


Re: NDC Oslo talk: Generic Programming Galore Using D

2013-07-09 Thread Andrei Alexandrescu

On 7/8/13 10:03 AM, Andrei Alexandrescu wrote:

On 7/8/13 6:49 AM, Dicebot wrote:

On Thursday, 4 July 2013 at 16:47:36 UTC, Andrei Alexandrescu wrote:

Videos for my two NDC 2013 talks are now online. Generic Programming
Galore using D at http://vimeo.com/68378925 and the HipHop Virtual
Machine at http://vimeo.com/68383350.

Andrei


Am I allowed to re-upload them to YouTube?


I don't know, let me ask.

Andrei


I got permission. Videos can be uploaded to youtube as long as NDC Oslo 
2013 is mentioned.


Andrei


Re: Is this D or is it Javascript?

2013-07-09 Thread Kagamin

On Saturday, 6 July 2013 at 00:21:54 UTC, Adam D. Ruppe wrote:

// the second () is just because @property is broken
writeln(Math.max()(12, 24)); // prints 24


With dynamic typing there's no way to tell if Math.max(12,24) is 
a method call or field delegate call. Javascript assumes it's 
member call and passes this pointer to the called function. When 
I implemented an object for javascript, I chose to detect if a 
called method is a field with delegate and forward the call to 
the delegate as per semantics of javascript.


Re: Is this D or is it Javascript?

2013-07-09 Thread Adam D. Ruppe

On Tuesday, 9 July 2013 at 19:14:30 UTC, Kagamin wrote:
With dynamic typing there's no way to tell if Math.max(12,24) 
is a method call or field delegate call.


The way my thing works is Math.max (or anything else) returns a 
ref var, and the (12,24) does opCall on it, which succeeds if the 
var is of type function.


bearophile recently posted a pull request by Kenji Hara IIRC that 
implements @property more correctly. If that gets pulled, this 
will be good.


In the little scripting language too, there's now a class 
declaration, that looks kinda like D, but it is actually just 
syntax sugar that assigns the declarations to the object, so 
there is no distinction there between a method and field - all 
methods are just delegates attached to the object.


Re: Programming in D book is about 88% translated

2013-07-09 Thread Ali Çehreli

On 06/29/2013 01:08 AM, Johannes Pfau wrote:

 BTW: The link to wiki4d on this page
 http://ddili.org/ders/d.en/intro.html
 could be updated to http://wiki.dlang.org/Editors and / or
 http://wiki.dlang.org/IDEs

Done.

Additionally, thanks to Jerome Sniatecki, I made the Ranges chapter 
const-correct and applied UFCS to code examples:


  http://ddili.org/ders/d.en/ranges.html

Thank you:

  http://ddili.org/ders/d.en/acknowledgments.html

Ali



Re: Situation of scope?

2013-07-09 Thread deadalnix

On Tuesday, 9 July 2013 at 00:49:40 UTC, bearophile wrote:
What is the situation regarding the implementation of scope in 
D, Walter? Are there some implementation difficulties that make 
it hard to implement?




It require to define lifetime of basically everything. This is a 
difficult task to both implement and define (probably defining is 
the hardest part). Consider temporary for instance, defining 
their lifetime is quite difficult especially since their creation 
can be conditional.


Re: typeid(double) does not respect NaNs

2013-07-09 Thread deadalnix

On Tuesday, 9 July 2013 at 03:03:34 UTC, H. S. Teoh wrote:
More to the point, *if* typeinfo isn't meant to match == for 
whatever
reason, then why is it being used as the standard of comparison 
for AA

keys?



I guess we need NaN == NaN to be true for AA keys, no ?


Re: Feature request: Path append operators for strings

2013-07-09 Thread Tommi

On Monday, 8 July 2013 at 21:46:24 UTC, Walter Bright wrote:


I'm sure you're self-aware, as I'm sure Siri and Watson are not.


But there is no way for you to prove to me that you are 
self-aware. It could be that you are simply programmed to appear 
to be self-aware; think of an infinite loop containing a massive 
switch statement, where each case represents a different 
situation in life and the function to execute in each case 
represents what you did in that situation in life. As long as we 
can't test whether and entity is self-aware or not, for our 
purposes, it kind of doesn't matter whether it is or not.


If we ever are able to define what consciousness is (and I'm 
quite sure we will), I suspect it's going to be some kind of a 
continuous feedback loop from sensory data to brain, and from 
brain to muscles and through them back to sensory data again. 
Consciousness would be kind of your ability to predict what kind 
of sensory data would be likely to be produced if you sent a 
certain set of signals to your muscles.


I like this guy's take on consciousness:
http://www.youtube.com/watch?v=3jBUtKYRxnA


Re: Feature request: Path append operators for strings

2013-07-09 Thread Tommi

On Tuesday, 9 July 2013 at 06:07:12 UTC, Tommi wrote:
Consciousness would be kind of your ability to predict what 
kind of sensory data would be likely to be produced if you sent 
a certain set of signals to your muscles.


...and the better you are at predicting those very-near-future 
sensory signals, the more you feel that you're conscious.


Re: Feature request: Path append operators for strings

2013-07-09 Thread deadalnix

On Monday, 8 July 2013 at 18:37:30 UTC, Walter Bright wrote:

On 7/8/2013 6:31 AM, Dicebot wrote:
Well, second one is not really a scientific problem, it is a 
philosophical one.
Self-awareness is a very vague term with a lot of space for 
personal

interpretation. I don't even think it is worth speaking about.


If you consider that our brains evolved, and self-awareness was 
a result of evolution, then self-awareness presumably offers 
some sort of survival benefit.




Not necessarily. If the change is neutral, it can still develop 
in some species. Arguably, as our brain consume 20% of our 
energy, this is highly likely that it has benefit, so you still 
have a point.


Following that line of reasoning, self-awareness becomes a real 
phenomenon with a scientific basis.


How is it defined in science ? The concept seems hard to define 
in proper ways to me.


Re: Feature request: Path append operators for strings

2013-07-09 Thread deadalnix

On Monday, 8 July 2013 at 21:46:24 UTC, Walter Bright wrote:
Just because we have difficulty defining something is not a 
reason to dismiss it as irrelevant or non-existent.


I'm sure you're self-aware, as I'm sure Siri and Watson are not.



It is proven that at least 70% of what we perceive as being our 
decisions are in fact backward rationalization. I don't think the 
idea is that absurd that it may be 100%


Re: Phobos rising!

2013-07-09 Thread deadalnix

On Monday, 8 July 2013 at 19:34:32 UTC, Walter Bright wrote:

http://spaceindustrynews.com/mars-curiosity-rover-shoots-video-of-phobos-moon-rising-video/3694/


Awesome ! I love it !


Re: Phobos rising!

2013-07-09 Thread Joseph Rushton Wakeling
On 07/08/2013 09:34 PM, Walter Bright wrote:
 http://spaceindustrynews.com/mars-curiosity-rover-shoots-video-of-phobos-moon-rising-video/3694/

https://www.youtube.com/watch?v=4Aq_ZvBgIx0#t=31s :-)

Seriously, though -- that's a fascinating video.  Thanks so much for sharing.



Re: Function literals can't be class members

2013-07-09 Thread JS

On Monday, 8 July 2013 at 22:41:41 UTC, JS wrote:

trying to use a lambda inside a sub template gives an error.

mixin template a
{
   template b()
   {
  enum b = { }();
   }
   mixin(b!());
}

gives the error in the subject, removing the nesting or using a 
function instead of a lamda produces no error, yet all are 
essentially semantically equivalent... just the lamda version 
requires less typing. (in fact, it would be nice to have a 
simplification of template b() = { ... }();)


Anyone have any ideas?


Re: Phobos rising!

2013-07-09 Thread Joseph Rushton Wakeling
On 07/09/2013 11:44 AM, Joseph Rushton Wakeling wrote:
 On 07/08/2013 09:34 PM, Walter Bright wrote:
 http://spaceindustrynews.com/mars-curiosity-rover-shoots-video-of-phobos-moon-rising-video/3694/
 
 https://www.youtube.com/watch?v=4Aq_ZvBgIx0#t=31s :-)

... https://www.youtube.com/watch?feature=player_detailpagev=4Aq_ZvBgIx0#t=31s

One joke buggered up, then. :-P


Re: Function literals can't be class members

2013-07-09 Thread Dicebot

On Tuesday, 9 July 2013 at 09:44:17 UTC, JS wrote:

Anyone have any ideas?


Yes and I will answer once you start asking question in D.learn 
newsgroup.


Re: Function literals can't be class members

2013-07-09 Thread John Colvin

On Monday, 8 July 2013 at 22:41:41 UTC, JS wrote:

trying to use a lambda inside a sub template gives an error.

mixin template a
{
   template b()
   {
  enum b = { }();
   }
   mixin(b!());
}

gives the error in the subject, removing the nesting or using a 
function instead of a lamda produces no error, yet all are 
essentially semantically equivalent... just the lamda version 
requires less typing. (in fact, it would be nice to have a 
simplification of template b() = { ... }();)


This belongs in D.learn.

The code you provided is never going to give any Function 
literals can't be class members error, although it does have a 
lot of other things wrong with it.


1) The mixin template has no parameter list.
2) enum b = { }(); isn't valid without a function body. Did you 
mean (){} ?
3) and it definitely isn't going to return a string to work with 
mixin();


It helps to give code examples that are at least syntactically 
correct, if not immediately compilable. A correct and simplified 
test case of what I *think* you are talking about is this:


mixin template A()
{
auto foo = (){ };
}

class C
{
mixin A!();
}

Error: delegate f977.C.A!().__lambda1 function literals cannot be 
class members


Lambda function and delegate literals cannot be class members. 
Function literals can. I'm not entirely sure on the reason why, 
it's probably to do with context pointers.


Re: Feature request: Path append operators for strings

2013-07-09 Thread Dicebot

On Monday, 8 July 2013 at 21:46:24 UTC, Walter Bright wrote:
Just because we have difficulty defining something is not a 
reason to dismiss it as irrelevant or non-existent.


Sure, but there is an important difference between dismissing 
and dismissing as a relevant scientific term to discuss. 
Speaking about possible self-awareness of computers is perfectly 
fine for a forum discussion but not acceptable for a scientific 
one. One needs a common well-defined terms to make progress.



I'm sure you're self-aware, as I'm sure Siri and Watson are not.


I'll take it as a compliment :) But that is exactly what I am 
talking about - question if you consider someone self-aware is 
extremely interesting from the psychological point of view 
(probably even social psychology). For AI research important 
question is what properties do self-aware being has.


Those are related but different.

In a former case exact meaning of self-awareness is not important 
as you primarily study a person who makes a statement, not 
statement itself. In other words, it is not important what one 
means by self-aware but what thinking processes result in such 
tag.


The latter relies on research done in previous step to define 
properties of self-aware state that target AI needs to meet to 
be recognized as such by a wide variety of people. And, of 
course, as this relies on a common consensus, such concept is 
naturally very volatile. That is the main idea behind Turing test 
as far as I understand it.


... nor does it mean that personhood is not a very useful and 
meaningful construct.


Even worse, now you use personhood as a replacement for 
self-awareness! :) It is a very dangerous mistake to use common 
words when speaking about consciousness and thinking - too much 
self-reflection involved.


Re: Function literals can't be class members

2013-07-09 Thread JS

On Tuesday, 9 July 2013 at 10:10:10 UTC, Dicebot wrote:

On Tuesday, 9 July 2013 at 09:44:17 UTC, JS wrote:

Anyone have any ideas?


Yes and I will answer once you start asking question in D.learn 
newsgroup.



Thanks... I'll just keep posting in here then...



Re: Feature request: Path append operators for strings

2013-07-09 Thread John Colvin

On Tuesday, 9 July 2013 at 10:38:11 UTC, Dicebot wrote:
... nor does it mean that personhood is not a very useful and 
meaningful construct.


Even worse, now you use personhood as a replacement for 
self-awareness! :) It is a very dangerous mistake to use common 
words when speaking about consciousness and thinking - too much 
self-reflection involved.


You're looking at it in the wrong context. Walter was talking 
about personhood as an analogy, not at all conflating it with 
self-awareness.


I agree 100% about the language point. By and large our languages 
(and language abilities) have evolved to identify and communicate 
day-to-day opportunities and risks.
They are very specialised DSLs running on very specialised 
hardware, not well suited to performing complex runtime 
introspection or large-scale formal logic :p


Interestingly, it doesn't take a huge change in design to unleash 
some very different abilities, e.g. autistic savants.


Re: Function literals can't be class members

2013-07-09 Thread JS

On Tuesday, 9 July 2013 at 10:25:26 UTC, John Colvin wrote:

On Monday, 8 July 2013 at 22:41:41 UTC, JS wrote:

trying to use a lambda inside a sub template gives an error.

mixin template a
{
  template b()
  {
 enum b = { }();
  }
  mixin(b!());
}

gives the error in the subject, removing the nesting or using 
a function instead of a lamda produces no error, yet all are 
essentially semantically equivalent... just the lamda version 
requires less typing. (in fact, it would be nice to have a 
simplification of template b() = { ... }();)


This belongs in D.learn.

The code you provided is never going to give any Function 
literals can't be class members error, although it does have a 
lot of other things wrong with it.


1) The mixin template has no parameter list.
2) enum b = { }(); isn't valid without a function body. Did you 
mean (){} ?
3) and it definitely isn't going to return a string to work 
with mixin();


It helps to give code examples that are at least syntactically 
correct, if not immediately compilable. A correct and 
simplified test case of what I *think* you are talking about is 
this:


mixin template A()
{
auto foo = (){ };
}

class C
{
mixin A!();
}

Error: delegate f977.C.A!().__lambda1 function literals cannot 
be class members


Lambda function and delegate literals cannot be class members. 
Function literals can. I'm not entirely sure on the reason why, 
it's probably to do with context pointers.


Maybe you need to go tell Artur that he is wrong first before you 
bitch at me for being wrong... 
http://forum.dlang.org/thread/myalrxrrwoljxbboa...@forum.dlang.org



Please, at least if you are going to bitch and talk down to me 
about writing valid source code at least know what you are 
talking about in the first place...



module main;

import std.stdio, std.cstream;

template b()
{
enum b = { return \asdf\;  }();
pragma(msg, b);
}

int main(string[] argv)
{
auto f = (){ writeln(asd); };
f();
writeln(mixin(b!()));
din.getc();
return 0;
}



Re: Function literals can't be class members

2013-07-09 Thread John Colvin

On Tuesday, 9 July 2013 at 10:45:40 UTC, JS wrote:

On Tuesday, 9 July 2013 at 10:10:10 UTC, Dicebot wrote:

On Tuesday, 9 July 2013 at 09:44:17 UTC, JS wrote:

Anyone have any ideas?


Yes and I will answer once you start asking question in 
D.learn newsgroup.



Thanks... I'll just keep posting in here then...


Please don't. Posting in d.learn to check you haven't missed 
something stupid, then following it up with either a bug report 
or a post in the main newsgroup if appropriate is good practice. 
We all make mistakes from time-to-time.


P.S. Dicebot's responses to your questions have been by-and-large 
correct and informative. I'm sure he genuinely means he will try 
to help you if you post in the correct place.


Re: Function literals can't be class members

2013-07-09 Thread John Colvin

On Tuesday, 9 July 2013 at 11:03:34 UTC, JS wrote:

On Tuesday, 9 July 2013 at 10:25:26 UTC, John Colvin wrote:

On Monday, 8 July 2013 at 22:41:41 UTC, JS wrote:

trying to use a lambda inside a sub template gives an error.

mixin template a
{
 template b()
 {
enum b = { }();
 }
 mixin(b!());
}

gives the error in the subject, removing the nesting or using 
a function instead of a lamda produces no error, yet all are 
essentially semantically equivalent... just the lamda version 
requires less typing. (in fact, it would be nice to have a 
simplification of template b() = { ... }();)


This belongs in D.learn.

The code you provided is never going to give any Function 
literals can't be class members error, although it does have 
a lot of other things wrong with it.


1) The mixin template has no parameter list.
2) enum b = { }(); isn't valid without a function body. Did 
you mean (){} ?
3) and it definitely isn't going to return a string to work 
with mixin();


It helps to give code examples that are at least syntactically 
correct, if not immediately compilable. A correct and 
simplified test case of what I *think* you are talking about 
is this:


mixin template A()
{
auto foo = (){ };
}

class C
{
mixin A!();
}

Error: delegate f977.C.A!().__lambda1 function literals cannot 
be class members


Lambda function and delegate literals cannot be class members. 
Function literals can. I'm not entirely sure on the reason 
why, it's probably to do with context pointers.


Maybe you need to go tell Artur that he is wrong first before 
you bitch at me for being wrong... 
http://forum.dlang.org/thread/myalrxrrwoljxbboa...@forum.dlang.org



Please, at least if you are going to bitch and talk down to me 
about writing valid source code at least know what you are 
talking about in the first place...



module main;

import std.stdio, std.cstream;

template b()
{
enum b = { return \asdf\;  }();
pragma(msg, b);
}

int main(string[] argv)
{
auto f = (){ writeln(asd); };
f();
writeln(mixin(b!()));
din.getc();
return 0;
}


I am genuinely confused. Nothing in Arturs code or your example 
contains anything that is applicable to the 3 bullet points I 
wrote:


1) Neither contain any mixin templates
2) None use {}() without some content to the body.
3) Both bodies using that syntax explicitly return strings.


Re: Function literals can't be class members

2013-07-09 Thread Dicebot

On Tuesday, 9 July 2013 at 11:06:22 UTC, John Colvin wrote:
P.S. Dicebot's responses to your questions have been 
by-and-large correct and informative. I'm sure he genuinely 
means he will try to help you if you post in the correct place.


I am always ready to help when it makes sense. But there is a 
major difference between helping a newbie which does not yet know 
where to ask for help and being patient in presence of arrogant 
aggression. I really think simply ignoring all JS questions until 
he learns to not flood main newsgroup is the right think to do 
and your attempt to be friendly does not help here.


One-sided friendliness is just asking for an abuse. Exactly what 
JS does, intentionally.


Re: [phobos] New Linux phobos shared library

2013-07-09 Thread Dicebot

On Tuesday, 9 July 2013 at 04:53:01 UTC, Jordi Sayol wrote:
I propose to name the shared phobos library as 
libphobos2.so.0.nn.0, where nn is the current dmd version. 
The last zero is just for bug/regression fixes.


This is exactly naming scheme I am already using in my Arch Linux 
PKGBUILD, so +1 here :)


Searching for D using Goolgle

2013-07-09 Thread Mike James
Hmmm. Every time I search for something using the search string 
dlang, Google asks me did I mean golang. Are Google getting 
worried about the success of D?


-=mike=-


Re: Searching for D using Goolgle

2013-07-09 Thread Dicebot

On Tuesday, 9 July 2013 at 12:42:47 UTC, Mike James wrote:
Hmmm. Every time I search for something using the search string 
dlang, Google asks me did I mean golang. Are Google getting 
worried about the success of D?


-=mike=-


I guess that is search personalization in action ;)


Re: typeid(double) does not respect NaNs

2013-07-09 Thread H. S. Teoh
On Tue, Jul 09, 2013 at 08:05:35AM +0200, deadalnix wrote:
 On Tuesday, 9 July 2013 at 03:03:34 UTC, H. S. Teoh wrote:
 More to the point, *if* typeinfo isn't meant to match == for whatever
 reason, then why is it being used as the standard of comparison for
 AA keys?
 
 
 I guess we need NaN == NaN to be true for AA keys, no ?

Not according to: http://d.puremagic.com/issues/show_bug.cgi?id=7836

So, should NaN == NaN for AA keys, or not?


T

-- 
Never ascribe to malice that which is adequately explained by incompetence. -- 
Napoleon Bonaparte


Re: [phobos] New Linux phobos shared library

2013-07-09 Thread H. S. Teoh
On Tue, Jul 09, 2013 at 06:52:44AM +0200, Jordi Sayol wrote:
  From dmd v2.063, release zip file includes Linux phobos shared
  libraries. As shared libraries are needed at runtime too, we should
  allow to install multiple versions of phobos shared libs. at same
  time. If not, every program compiled against it will be forced to be
  recompiled every new dmd/phobos release. To avoid this, phobos shared
  libs. should include some version number on its name.
 
 I propose to name the shared phobos library as libphobos2.so.0.nn.0,
 where nn is the current dmd version. The last zero is just for
 bug/regression fixes.
 
 As phobos changes its interface (almost) every new release, I propose
 to set its SONAME to libphobos2.so.0.nn, so when phobos become
 stable we can change the library name to libphobos2.so.1.0.0 and its
 SONAME to libphobos2.so.1.
 
 Some info about Linux shared libraries:
 http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
[...]

+1.

Shared library breakages are a royal pain in the neck. We should try to
get them right earlier rather than later. I'd say file a high-priority
bug in the bugtracker, if it hasn't already been.

Basically, the library needs to have a different soname EVERYTIME its
ABI changes (not just API, mind you). Anything other than that will lead
to pain and angry users.


T

-- 
Let's call it an accidental feature. -- Larry Wall


pushd / popd for std.process/std.file

2013-07-09 Thread David
Having pushd/popd in std.process would make a lot of code look better,
often you have to change the workding directory only for a few commands,
with pushd/popd you don't have to temporarily store the old one explicitly.

pushd/popd: https://en.wikipedia.org/wiki/Pushd_and_popd

What do you think?


void build() {
pushd(../build)
scope(exit) popd();

shell(cmake ../src/c/bla);
shell(make);
}



Re: [phobos] New Linux phobos shared library

2013-07-09 Thread Jordi Sayol
On 09/07/13 13:37, Dicebot wrote:
 On Tuesday, 9 July 2013 at 04:53:01 UTC, Jordi Sayol wrote:
 I propose to name the shared phobos library as libphobos2.so.0.nn.0, where 
 nn is the current dmd version. The last zero is just for bug/regression 
 fixes.
 
 This is exactly naming scheme I am already using in my Arch Linux PKGBUILD, 
 so +1 here :)
 

Thank you! and +1 for you too :-)

Programs dynamically links against SONAME, so it's more important than the real 
library name.
What SONAME naming scheme you used in Arch Linux PKGBUILD?

-- 
Jordi Sayol


Re: Function literals can't be class members

2013-07-09 Thread Joseph Rushton Wakeling
On 07/09/2013 12:45 PM, JS wrote:
 Thanks... I'll just keep posting in here then...

You know, most people, when they get informed there's a dedicated
newsgroup/mailing list for language questions, are polite enough to say thank
you for the information, and take their question over to the appropriate place.

Generally speaking they have a better time getting answers, too :-)


Re: [phobos] New Linux phobos shared library

2013-07-09 Thread Dicebot

On Tuesday, 9 July 2013 at 14:31:51 UTC, Jordi Sayol wrote:
Programs dynamically links against SONAME, so it's more 
important than the real library name.

What SONAME naming scheme you used in Arch Linux PKGBUILD?


To my shame, default one is (.0.2) is used, completely forgot 
about it. Will bother an official maintainer as soon as final 
decision is approved.


Re: pushd / popd for std.process/std.file

2013-07-09 Thread Jakob Ovrum

On Tuesday, 9 July 2013 at 14:21:48 UTC, David wrote:
Having pushd/popd in std.process would make a lot of code look 
better,
often you have to change the workding directory only for a few 
commands,
with pushd/popd you don't have to temporarily store the old one 
explicitly.


pushd/popd: https://en.wikipedia.org/wiki/Pushd_and_popd

What do you think?


void build() {
pushd(../build)
scope(exit) popd();

shell(cmake ../src/c/bla);
shell(make);
}


I think it's a good idea, except instead of maintaing a separate 
stack it could use the call stack through RAII. Also, considering 
`getcwd` and `chdir` are in std.file, maybe that's the better 
location?


Example implementation using RAII:
---
auto pushd(in char[] path)
{
import std.file : chdir, getcwd;

auto workingDir = getcwd();

struct PopWorkingDir
{
~this()
{
chdir(workingDir);
}
}

chdir(path);

return PopWorkingDir();
}

void main()
{
auto a = pushd(test);

import std.file : write;

write(test.txt, hi); // Writes test/test.txt
}

---
Not sure if I like the fact that it will silently fail without 
the seemingly unused variable 'a' here (because the destructor is 
run immediately), but isn't this how we already do stuff like 
threading locks?




Re: pushd / popd for std.process/std.file

2013-07-09 Thread Jakob Ovrum

On Tuesday, 9 July 2013 at 15:02:59 UTC, Jakob Ovrum wrote:

On Tuesday, 9 July 2013 at 14:21:48 UTC, David wrote:
Having pushd/popd in std.process would make a lot of code look 
better,
often you have to change the workding directory only for a few 
commands,
with pushd/popd you don't have to temporarily store the old 
one explicitly.


pushd/popd: https://en.wikipedia.org/wiki/Pushd_and_popd

What do you think?


void build() {
   pushd(../build)
   scope(exit) popd();

   shell(cmake ../src/c/bla);
   shell(make);
}


I think it's a good idea, except instead of maintaing a 
separate stack it could use the call stack through RAII. Also, 
considering `getcwd` and `chdir` are in std.file, maybe that's 
the better location?


-snip-


Apropos threads; this isn't thread-safe at all, is it... does it 
make sense to define semantics with multi-threading in mind?





Re: [phobos] New Linux phobos shared library

2013-07-09 Thread Jordi Sayol
On 09/07/13 15:49, H. S. Teoh wrote:
 On Tue, Jul 09, 2013 at 06:52:44AM +0200, Jordi Sayol wrote:
  From dmd v2.063, release zip file includes Linux phobos shared
  libraries. As shared libraries are needed at runtime too, we should
  allow to install multiple versions of phobos shared libs. at same
  time. If not, every program compiled against it will be forced to be
  recompiled every new dmd/phobos release. To avoid this, phobos shared
  libs. should include some version number on its name.

 I propose to name the shared phobos library as libphobos2.so.0.nn.0,
 where nn is the current dmd version. The last zero is just for
 bug/regression fixes.

 As phobos changes its interface (almost) every new release, I propose
 to set its SONAME to libphobos2.so.0.nn, so when phobos become
 stable we can change the library name to libphobos2.so.1.0.0 and its
 SONAME to libphobos2.so.1.

 Some info about Linux shared libraries:
 http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
 [...]
 
 +1.
 
 Shared library breakages are a royal pain in the neck. We should try to
 get them right earlier rather than later. I'd say file a high-priority
 bug in the bugtracker, if it hasn't already been.
 
 Basically, the library needs to have a different soname EVERYTIME its
 ABI changes (not just API, mind you). Anything other than that will lead
 to pain and angry users.

Ok, I just proposed a system where every dmd beta release gives an specific 
phobos shared library name and SONAME.
The problem you point will appear when phobos shared library becomes stable.
I don't know what will be the best way to control ABI changes. Is it possible 
to create a sort of flag in the Phobos project repository indicating this?

-- 
Jordi Sayol


Re: pushd / popd for std.process/std.file

2013-07-09 Thread Artur Skawina
On 07/09/13 17:04, Jakob Ovrum wrote:
 On Tuesday, 9 July 2013 at 15:02:59 UTC, Jakob Ovrum wrote:
 On Tuesday, 9 July 2013 at 14:21:48 UTC, David wrote:
 Having pushd/popd in std.process would make a lot of code look better,
 often you have to change the workding directory only for a few commands,
 with pushd/popd you don't have to temporarily store the old one explicitly.

 pushd/popd: https://en.wikipedia.org/wiki/Pushd_and_popd

 What do you think?


 void build() {
pushd(../build)
scope(exit) popd();

shell(cmake ../src/c/bla);
shell(make);
 }

 I think it's a good idea, except instead of maintaing a separate stack it 
 could use the call stack through RAII. Also, considering `getcwd` and 
 `chdir` are in std.file, maybe that's the better location?

   struct chDir {
  import std.file : chdir, getcwd;
  typeof(getcwd()) oldDir;
  this(string newDir) { oldDir = getcwd(); chdir(newDir); }
  ~this() { chdir(oldDir); }
  @disable this(this);
   }

   import std.file : write;
   with (chDir(testdir))
  write(test.txt, hi);

But that is not going to work right now - the chDir object
is destroyed too soon (compiler bug).

 Apropos threads; this isn't thread-safe at all, is it... does it make sense 
 to define semantics with multi-threading in mind?

Allowing declarations inside with() would make it possible to
handle the multithreaded case too.

artur


Re: typeid(double) does not respect NaNs

2013-07-09 Thread Maxim Fomin

On Tuesday, 9 July 2013 at 13:46:48 UTC, H. S. Teoh wrote:

On Tue, Jul 09, 2013 at 08:05:35AM +0200, deadalnix wrote:

On Tuesday, 9 July 2013 at 03:03:34 UTC, H. S. Teoh wrote:
More to the point, *if* typeinfo isn't meant to match == for 
whatever
reason, then why is it being used as the standard of 
comparison for

AA keys?


I guess we need NaN == NaN to be true for AA keys, no ?


Not according to: 
http://d.puremagic.com/issues/show_bug.cgi?id=7836


So, should NaN == NaN for AA keys, or not?


T


I think it was not decided yet. From language coherency point of 
view NaN != NaN like in general case, from usefulness perspective 
you don't need several nans in AA array.


Re: Function literals can't be class members

2013-07-09 Thread Maxim Fomin

On Tuesday, 9 July 2013 at 10:45:40 UTC, JS wrote:

On Tuesday, 9 July 2013 at 10:10:10 UTC, Dicebot wrote:

On Tuesday, 9 July 2013 at 09:44:17 UTC, JS wrote:

Anyone have any ideas?


Yes and I will answer once you start asking question in 
D.learn newsgroup.



Thanks... I'll just keep posting in here then...


You should know that when you post such things your are insulting 
not only one particular person, but litter dozens of mailboxes 
with your abusive messages. There are many people hanging around 
here and many more who just read and interfere if matter. If you 
think that your provoking style is boosting your 
acknowledgement here then you are wrong, in fact you are 
boosting your chances to get banned for trolling, as was 
mentioned in previous discussions, let alone getting help.


Re: typeid(double) does not respect NaNs

2013-07-09 Thread Jonathan M Davis
On Tuesday, July 09, 2013 18:04:29 Maxim Fomin wrote:
 On Tuesday, 9 July 2013 at 13:46:48 UTC, H. S. Teoh wrote:
  On Tue, Jul 09, 2013 at 08:05:35AM +0200, deadalnix wrote:
  On Tuesday, 9 July 2013 at 03:03:34 UTC, H. S. Teoh wrote:
  More to the point, *if* typeinfo isn't meant to match == for
  whatever
  reason, then why is it being used as the standard of
  comparison for
  AA keys?
  
  I guess we need NaN == NaN to be true for AA keys, no ?
  
  Not according to:
  http://d.puremagic.com/issues/show_bug.cgi?id=7836
  
  So, should NaN == NaN for AA keys, or not?
  
  
  T
 
 I think it was not decided yet. From language coherency point of
 view NaN != NaN like in general case, from usefulness perspective
 you don't need several nans in AA array.

I'd think that having NaN != NaN would cause serious problems with retrieving 
any elements inserted with NaN as a key, but given how floating point values 
work, using them as the key for an AA is arguably completely broken to begin 
with as comparing floating point values for equality is generally just plain 
wrong. That being the case, I'd argue in favor of language consistency and 
just point out to anyone that runs into problems that using a floating point 
type as the key type of an AA is a stupid thing to do to begin with.

- Jonathan M Davis


Re: typeid(double) does not respect NaNs

2013-07-09 Thread bearophile

Jonathan M Davis:


That being the case, I'd argue in favor of language consistency


Here I'd like D AAs act as Python dicts. This means breaking 
consistency.


Bye,
bearophile


Re: Searching for D using Goolgle

2013-07-09 Thread w0rp

On Tuesday, 9 July 2013 at 12:44:40 UTC, Dicebot wrote:

On Tuesday, 9 July 2013 at 12:42:47 UTC, Mike James wrote:
Hmmm. Every time I search for something using the search 
string dlang, Google asks me did I mean golang. Are Google 
getting worried about the success of D?


-=mike=-


I guess that is search personalization in action ;)


Yeah, that doesn't happen for me. I notice that you also use 
dlang in place of d in search results. dlang seems to get 
better results on average for me.


Re: Searching for D using Goolgle

2013-07-09 Thread H. S. Teoh
On Tue, Jul 09, 2013 at 07:28:48PM +0200, w0rp wrote:
 On Tuesday, 9 July 2013 at 12:44:40 UTC, Dicebot wrote:
 On Tuesday, 9 July 2013 at 12:42:47 UTC, Mike James wrote:
 Hmmm. Every time I search for something using the search string
 dlang, Google asks me did I mean golang. Are Google getting
 worried about the success of D?
 
 -=mike=-
 
 I guess that is search personalization in action ;)
 
 Yeah, that doesn't happen for me. I notice that you also use dlang
 in place of d in search results. dlang seems to get better
 results on average for me.

This is unfortunate though: https://github.com/dlang

It shows up as the 3rd result on my google search for dlang.


T

-- 
The whole problem with the world is that fools and fanatics are always
so certain of themselves, but wiser people so full of doubts. --
Bertrand Russell.
How come he didn't put 'I think' at the end of it? -- Anonymous


Re: Proposal: DPM, the D Package Manager

2013-07-09 Thread w0rp

On Monday, 8 July 2013 at 20:51:09 UTC, Dicebot wrote:

On Monday, 8 July 2013 at 20:46:21 UTC, Kevin Kane wrote:

I don't know if this thread is dead but...


Have you considered dub? It seems like current main bet as D 
package manager

http://registry.vibed.org/


With more adoption, dub can be become D's answer to Pythons pip, 
if it isn't already.


Re: A thread without GC

2013-07-09 Thread Sean Kelly
On Jul 8, 2013, at 8:08 AM, Adam D. Ruppe destructiona...@gmail.com wrote:

 On Monday, 8 July 2013 at 14:53:25 UTC, John Colvin wrote:
 I wonder if one could somehow register a pre-existing thread with 
 std.concurrency, being careful not to introduce any reference that lets in 
 the garbage collector.
 
 There is a thread_attachThis() in core.thread that Registers the calling 
 thread for use with the D Runtime.  and returns a Thread object.
 
 However, I think that registers it with the GC too so it defeats the purpose 
 of skipping Thread in the first place.

Right.  The point of that routine is to make it so an external thread can 
safely reference garbage collected memory.


 Looking at the source of std.concurrency, it looks like it just has a thread 
 local mailbox for each one, that is created when you call thisTid() the first 
 time.
 
 idk if that's actually all that is done, or if TLS needs any special work 
 (I've never actually used pthreads directly), but maybe you could try calling 
 that thisTid() function in the thread you make yourself and then send it a 
 message and see what happens.

You'd really need to call thread_attachThis() first, since std.concurrency uses 
garbage collected memory for message passing.

Re: A thread without GC

2013-07-09 Thread Sean Kelly
On Jul 8, 2013, at 7:04 AM, John Colvin john.loughran.col...@gmail.com wrote:

 I would post this in d.learn, but I suspect there isn't an easy answer so it 
 would be good to have some serious discussion here.
 
 Is there any way to create a thread that is totally free from the garbage 
 collector?
 
 I.e.
 Nothing in that thread will ever be scanned by the GC.
 Therefore, when the GC stops the world, that thread can just keep on going.
 
 Obviously one could create a separate process, but it would be nice to have 
 it encapsulated within a single process for optimum speed of communication 
 and not having to mess around with pipes.
 
 P.S. Yes I realise how careful one would have to be when using this.


There's a pull request for this that's been discussed on the Druntime list and 
while I'm willing to accept it so long as sufficient safeguards are in place, I 
still really don't understand the need for this feature.  Once you eliminate 
the GC support code there really isn't much left in core.thread.  What 
advantage is there of being able to create Thread objects that aren't managed 
by the GC (which I'll call juggernaut threads)?

Re: Deimos Request: Add flac

2013-07-09 Thread Walter Bright

On 7/8/2013 10:51 PM, Jonathan M Davis wrote:

On Monday, July 08, 2013 22:43:41 Walter Bright wrote:

On 7/8/2013 9:28 PM, Jonathan M Davis wrote:

Walter, would you please create a 1.2.1 branch? I can't create a pull
request with the 1.3.0 stuff until there's branch for 1.2.1, or 1.2.1
won't be particularly usable, and 1.3.0 is recent enough that 1.2.1 is
still quite prevalent (probably more than 1.3.0).


You're a Team Deimos member, you should be able to do it.


Whenever I try and commit to the main repository, it tells me I don't have
permission. Specfically, I get

--
ERROR: Permission to D-Programming-Deimos/flac.git denied to jmdavis.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
--

I know that with the D-Programming-Language organization, permissions must
still be given out for each repo (e.g. I don't have commit access to dmd), so
I'd guess that it's the same with D-Programming-Deimos unless there's some way
to automatically give the team members commit permissions to all repos in the
org. But I don't know exactly what kind of control there is over the
permissions in a github organization, because I don't have the permissions to
manage any of the orgs that I'm in.


You do have push/pull permissions to all Deimos repositories. I think that means 
you need to submit your changes as a pull request, not do it directly.




Re: Phobos rising!

2013-07-09 Thread Walter Bright

On 7/9/2013 2:46 AM, Joseph Rushton Wakeling wrote:

On 07/09/2013 11:44 AM, Joseph Rushton Wakeling wrote:

On 07/08/2013 09:34 PM, Walter Bright wrote:

http://spaceindustrynews.com/mars-curiosity-rover-shoots-video-of-phobos-moon-rising-video/3694/


https://www.youtube.com/watch?v=4Aq_ZvBgIx0#t=31s :-)


... https://www.youtube.com/watch?feature=player_detailpagev=4Aq_ZvBgIx0#t=31s

One joke buggered up, then. :-P



Debbie Gibson still trying to revive her career? :-)


Re: atomic Weapons: The C++ Memory Model and Modern Hardware

2013-07-09 Thread Sean Kelly
On Jul 8, 2013, at 12:04 PM, Flamaros flamaros.xav...@gmail.com wrote:

 http://herbsutter.com/2013/02/11/atomic-weapons-the-c-memory-model-and-modern-hardware/
 
 Is D and DMD aware of those kind of issues with atomic?

I think more thought needs to be given to how the compiler recognizes and 
treats atomic operations in D.  In D1, we had volatile as a means of telling 
the compiler that it shouldn't optimize code according to certain rules, but 
this has been deprecated in D2.  And while DMD doesn't optimize inside or 
across asm blocks, other compilers may.  shared is somewhat helpful here, but 
even then I'm not entirely certain that a compiler like GDC will not do 
something unsafe with code that's intended to be atomic.

From an API perspective, D has a label roughly akin to atomic in shared, 
and even supports relaxed atomics via core.atomic.  If it matters, the original 
API in core.atomic (atomicLoad and atomicStore) is based on a design by 
Alexander Terekhov, who influenced both the Boost and C++0x design.  I think I 
even participated in the C++0x memory model discussion back in the beginning if 
you're inclined to dig through the archives, and aside from Andrei and Walter 
the community has a few other folks with a good knowledge of low-level 
concurrency.  Either way, I think D's support for concurrency is less extensive 
than on C++0x (no futures, for example) but is reasonably solid and with some 
nice overlays, like std.concurrency.  Life is also a bit easier for us because 
D doesn't support as many architectures as C++, so we don't currently need as 
much code behind things like core.atomic to make everything work.  But I'm 
confident that the existing APIs could extend to weak architectures without 
alteration.

In short, we're aware of the issues and have a good foundation, but more work 
needs to be done.

[OT] Why mobile web apps are slow

2013-07-09 Thread Paulo Pinto

A bit off-topic, but well worth reading,

http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/

--
Paulo


Re: atomic Weapons: The C++ Memory Model and Modern Hardware

2013-07-09 Thread Sean Kelly
On Jul 8, 2013, at 5:05 PM, Marco Leise marco.le...@gmx.de wrote:

 Fortunately on x86
 architectures at least, atomic operations are pretty sane and
 fast.

The x86 memory model is sufficiently strict that, by and large, simple 
concurrent interactions actually work without any memory barriers at all.  I've 
never been able to decide whether this is a good or a bad thing however.

Re: [OT] Why mobile web apps are slow

2013-07-09 Thread Sean Kelly
On Jul 9, 2013, at 11:12 AM, Paulo Pinto pj...@progtools.org wrote:

 A bit off-topic, but well worth reading,
 
 http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/

Thanks for the link.  In my experience, mobile networking is slow in general.  
When I run Speedtest on my phone vs. a laptop sitting right next to it, the 
phone has a fraction of the bandwidth of the laptop.  So there's even more at 
issue than raw JS performance.

Re: Poll: how long have you been into D

2013-07-09 Thread Jesse Phillips

On Monday, 8 July 2013 at 19:22:59 UTC, H. S. Teoh wrote:

Y'know what would be an awesome feature? A configurable volume 
level
scheduler, like those old turn-on-the-light-at-night power 
dials, that
automatically shuts off the volume at night, and turns it back 
on in the

morning.

Better yet, turn it off during the times in the week where 
you're in a
library / concert / meeting when it shouldn't be going off. Get 
enough
people to use it, and we might stop having to make the 
now-obligatory
announcement please turn off your cellphones all the time 
(and have

people *still* get loud noisy ringtones in the middle of it).

Anybody wanna code up a D app for this? It might be the killer 
app that

makes D famous. ;-)


Well in Android there is Tasker. I have it play music when I 
leave work and if I have the headphones plugged in. It is easy to 
have it adjust volume at specific times of the day/location.


Re: Deimos Request: Add flac

2013-07-09 Thread Joseph Rushton Wakeling
On 07/09/2013 04:06 AM, Jonathan M Davis wrote:
 Walter (or someone else with the appropriate permissions), would you please 
 add a repo to deimos for flac?

It's unlikely that I'll ever personally use this code (though never say
never:-), but as an enthusiastic audiophile, thank you very much for ensuring
that FLAC is usable with D :-)


Re: Phobos rising!

2013-07-09 Thread Joseph Rushton Wakeling
On 07/09/2013 07:56 PM, Walter Bright wrote:
 Debbie Gibson still trying to revive her career? :-)

I think the octopus was the real rising star here ... :-P



Linear algebra for Win64?

2013-07-09 Thread Kevin McTaggart
Does anyone know of a good D linear algebra library for Win64?  I 
tried scid a year ago and liked it on Win32, but have been unable 
to get it to link on Win64.  When trying to run scid on Win64, 
I've been using prebuilt LAPACK 3.4.1 libraries from 
http://icl.cs.utk.edu/lapack-for-windows/lapack/, but have 
unresolved external symbol dgesv_


Re: [OT] Why mobile web apps are slow

2013-07-09 Thread QAston

On Tuesday, 9 July 2013 at 18:12:24 UTC, Paulo Pinto wrote:

A bit off-topic, but well worth reading,

http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/

--
Paulo


I think that the garbage collection part of the atricle is very 
relevant to the usage of D on mobile.


Re: [OT] Why mobile web apps are slow

2013-07-09 Thread Joakim

On Tuesday, 9 July 2013 at 19:27:22 UTC, QAston wrote:

On Tuesday, 9 July 2013 at 18:12:24 UTC, Paulo Pinto wrote:

A bit off-topic, but well worth reading,

http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/

--
Paulo


I think that the garbage collection part of the atricle is very 
relevant to the usage of D on mobile.

Nobody uses D on mobile, so it's not very relevant. ;)

If Intel ever makes a comeback on mobile- Samsung is putting x86 
chips in their next generation of Galaxy Tab tablets, so it's 
possible- it might not take much effort to port D/ldc to 
Android/x86 though, so maybe it will be relevant someday.


Good article, with some good data.


Re: [OT] Why mobile web apps are slow

2013-07-09 Thread bearophile

On Tuesday, 9 July 2013 at 18:12:24 UTC, Paulo Pinto wrote:

A bit off-topic, but well worth reading,

http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/


An interesting article, a strong critique of many kinds of 
garbage collection. Having good enough built-in means to avoid 
relying on a GC seems quite important to use D where memory is 
limited.


Bye,
bearophile


Re: atomic Weapons: The C++ Memory Model and Modern Hardware

2013-07-09 Thread Robert Schadek
On 07/08/2013 09:04 PM, Flamaros wrote:
 http://herbsutter.com/2013/02/11/atomic-weapons-the-c-memory-model-and-modern-hardware/


 Is D and DMD aware of those kind of issues with atomic?
OT: How does he change slides? I can't see a clicker nor a sign for
somebody off camera?? Anyway, awesome
presentation and awesome presentation style.


Re: [OT] Why mobile web apps are slow

2013-07-09 Thread Brian Rogoff

On Tuesday, 9 July 2013 at 20:02:33 UTC, bearophile wrote:

On Tuesday, 9 July 2013 at 18:12:24 UTC, Paulo Pinto wrote:

A bit off-topic, but well worth reading,

http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/


An interesting article, a strong critique of many kinds of 
garbage collection. Having good enough built-in means to avoid 
relying on a GC seems quite important to use D where memory is 
limited.


It's not just in the limited memory case of mobile devices that 
GC is a problem. There are a few domains that come to mind where 
the ability to escape GC and rely on manual memory management is 
extremely important. While there was some reference made to an 
approach to allocators in the closing talk of DConf, I haven't 
seen much discussion of an approach using D's features.


-- Brian

PS: That silhouette of the SR-71 at the point allocators are 
mentioned sets a high bar for the design!


Re: Deimos Request: Add flac

2013-07-09 Thread Jonathan M Davis
On Tuesday, July 09, 2013 20:27:57 Joseph Rushton Wakeling wrote:
 On 07/09/2013 04:06 AM, Jonathan M Davis wrote:
  Walter (or someone else with the appropriate permissions), would you
  please
  add a repo to deimos for flac?
 
 It's unlikely that I'll ever personally use this code (though never say
 never:-), but as an enthusiastic audiophile, thank you very much for
 ensuring that FLAC is usable with D :-)

I have enough flac files that I need to be able to do stuff to manage them 
better 
as well as transcode them for mobile devices, and to do some of that I need to 
be able to interact with flac (and potentially vorbis-tools or lame if I'm 
transcoding). I've been using std.process.system for the stuff that I've been 
doing, but I really need access to flac metadata in code. So, I'm going to be 
wrapping flac in D (with ranges) at some point here and I intend to create 
bindings for stuff like vorbis-tools, lame, and libcddb at some point and will 
likely wrap them in D libraries as well (though it'll probably all take a 
while given everything else that I have going). Putting the bindings for flac 
in deimos is just the first step. I've had them sitting around for a while and 
figured that it was long past time to get them completed and into deimos.

- Jonathan M Davis


Re: Deimos Request: Add flac

2013-07-09 Thread Jonathan M Davis
On Tuesday, July 09, 2013 10:52:12 Walter Bright wrote:
 You do have push/pull permissions to all Deimos repositories. I think that
 means you need to submit your changes as a pull request, not do it
 directly.

Okay, but AFAIK, you have to have commit permissions to the repo in order to 
create new branches. I don't know of any way to create a branch via a pull 
request. And I specifically need to create a branch for version 1.2.1 of flac 
as 
opposed to simply changing what's in master. So, as far as I can tell (though 
maybe there's something I'm missing), I either need commit permissions to the 
repo so that I can push a new branch to the deimos flac repo, or I need someone 
who does have such permissions to do that for me.

- Jonathan M Davis


Re: typeid(double) does not respect NaNs

2013-07-09 Thread Jonathan M Davis
On Tuesday, July 09, 2013 19:19:18 bearophile wrote:
 Jonathan M Davis:
  That being the case, I'd argue in favor of language consistency
 
 Here I'd like D AAs act as Python dicts. This means breaking
 consistency.

I'm afraid that you'll have to be more specific in terms of what you mean.

But as far as I can tell, using floating point values as keys in an AA is 
fundamentally broken, because using == with floating point values is 
fundamentally broken. As such, I see no reason why it should matter that NaN 
is effectively unusable as an AA key.

- Jonathan M Davis


Re: typeid(double) does not respect NaNs

2013-07-09 Thread bearophile

Jonathan M Davis:

I'm afraid that you'll have to be more specific in terms of 
what you mean.


Please ignore what I have said...



As such, I see no reason why it should matter that NaN
is effectively unusable as an AA key.


OK.

Bye,
bearophile


Re: A thread-safe weak reference implementation

2013-07-09 Thread Robert



if (GC.addrOf(cast(void*)obj))
return obj;



Smart :-) You are waiting for the collection to complete, if we 
are one of the threads started before destructor calls happen. 
Brilliant.


Is it ok if I shamelessly copy parts of your implementation for 
the new std.signals? I will of course mention your name.




Best regards,
Robert


Re: Deimos Request: Add flac

2013-07-09 Thread Walter Bright

On 7/9/2013 2:02 PM, Jonathan M Davis wrote:

Okay, but AFAIK, you have to have commit permissions to the repo in order to
create new branches. I don't know of any way to create a branch via a pull
request. And I specifically need to create a branch for version 1.2.1 of flac as
opposed to simply changing what's in master. So, as far as I can tell (though
maybe there's something I'm missing), I either need commit permissions to the
repo so that I can push a new branch to the deimos flac repo, or I need someone
who does have such permissions to do that for me.



Ok, I created a 1.2.1 branch.


Re: typeid(double) does not respect NaNs

2013-07-09 Thread monarch_dodra

On Tuesday, 9 July 2013 at 21:12:15 UTC, Jonathan M Davis wrote:

On Tuesday, July 09, 2013 19:19:18 bearophile wrote:

Jonathan M Davis:
 That being the case, I'd argue in favor of language 
 consistency


Here I'd like D AAs act as Python dicts. This means breaking
consistency.


I'm afraid that you'll have to be more specific in terms of 
what you mean.


But as far as I can tell, using floating point values as keys 
in an AA is
fundamentally broken, because using == with floating point 
values is
fundamentally broken. As such, I see no reason why it should 
matter that NaN

is effectively unusable as an AA key.

- Jonathan M Davis


Using floating point as keys can make sense in an ordered 
container actually. Just thought I'd point it out.


Basically, instead of looking for specific keys, you try to 
position yourself between two entries.


But since our AA's are hashed sets, then no, it doesn't make 
sense for us.


Re: [OT] Why mobile web apps are slow

2013-07-09 Thread Nick Sabalausky
On Tue, 09 Jul 2013 20:12:25 +0200
Paulo Pinto pj...@progtools.org wrote:

 A bit off-topic, but well worth reading,
 
 http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/
 
 --
 Paulo

Very good article. (Actually, a nice site design, too.)


Re: [OT] Why mobile web apps are slow

2013-07-09 Thread Walter Bright

On 7/9/2013 11:12 AM, Paulo Pinto wrote:

A bit off-topic, but well worth reading,

http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/


It isn't off-topic at all. It's very relevant to D.

I also agree with what he says about GC.



Re: Current version of D.

2013-07-09 Thread Rob T

On Sunday, 7 July 2013 at 07:36:41 UTC, Russel Winder wrote:

On Sat, 2013-07-06 at 15:24 +0200, mike james wrote:
 The current release is 2.063.2, but it's the first time that 
 we've actually
 released point releases like that, so there are likely to be 
 places saying

 2.063 instead of 2.063.2.

Maybe it's time to make the odd-numbered releases the work in 
progress releases and the even-numbered releases the official 
releases?


Everyone, cf. Linux, who used to operate such a strategy has now
stopped. A release is a release and should be releasable. 
Finding
problems in a release is natural which is why the maj.min.bug 
release
numbering is so popular. The issue here is that the releases 
should be
numbered this way always so as to make a monotonic increasing 
sequence.


Thus 2.063 should have been numbered 2.63.0.


Agreed, however we should also have a pre-release package for 
testing that is clearly marked as a pre-release, it can go on a 
separate web page to avoid any possibility of confusion.


The current release is showing as both 2.63.0 and 2.63 but I 
thought it was supposed to be 2.63.2 everywhere. This is very 
confusing.


--rt


Re: Current version of D.

2013-07-09 Thread Rob T

On Tuesday, 9 July 2013 at 22:34:18 UTC, Rob T wrote:



Agreed, however we should also have a pre-release package for 
testing that is clearly marked as a pre-release, it can go on a 
separate web page to avoid any possibility of confusion.


The current release is showing as both 2.63.0 and 2.63 but I 
thought it was supposed to be 2.63.2 everywhere. This is very 
confusing.


--rt


Running latest release shows this ...

DMD64 D Compiler v2.063

It should show the full release number.

--rt


Re: [OT] Why mobile web apps are slow

2013-07-09 Thread bearophile

Walter Bright:


It isn't off-topic at all. It's very relevant to D.

I also agree with what he says about GC.


There's a long way from recognizing those problems, to having 
good enough solutions in D.


Some possible attack strategies for D are:
- A less allocating Phobos to produce a bit less garbage;
- A more precise GC to avoid some memory leaks;
- Perhaps an annotation to disallow heap allocations in a 
function or a piece of code;
- Some good way to allocate variable length arrays on the stack 
(http://d.puremagic.com/issues/show_bug.cgi?id=9832 ) (so some 
arrays produce no garbage);

- The implementation of scope maybe helps a bit;
- Multiple alias this opens some opportunities to use structs in 
more places, avoiding some heap allocations.

- Currently Phobos Scoped/emplace are not very good.

Is that enough? Rust language designers seem to think that's not 
enough. Opinions are welcome.


Bye,
bearophile


Re: Current version of D.

2013-07-09 Thread Tyro[17]

On 7/9/13 6:36 PM, Rob T wrote:

On Tuesday, 9 July 2013 at 22:34:18 UTC, Rob T wrote:



Agreed, however we should also have a pre-release package for testing
that is clearly marked as a pre-release, it can go on a separate web
page to avoid any possibility of confusion.

The current release is showing as both 2.63.0 and 2.63 but I thought
it was supposed to be 2.63.2 everywhere. This is very confusing.

--rt


Running latest release shows this ...

DMD64 D Compiler v2.063

It should show the full release number.

--rt


This is what the latest release shows for me:

Andrews-MacBook-Pro:vapor andrewedwards$ dmd
DMD64 D Compiler v2.063.2
Copyright (c) 1999-2013 by Digital Mars written by Walter Bright
Documentation: http://dlang.org/

Are you actually using the latest release?


access CTFE variables at compile time.

2013-07-09 Thread JS
It seems possible that we can print CTFE variables at compile 
time by using string mixes as the code below demonstrates.


The problem is that we can not pass a variable to a template to 
create a print routine in the first place. e.g., we can't do 
mixin a!(s) if s is a string since s can't be read, supposedly, 
at compile time.


We can't even do mixin(mixin a!(\~s~\);) though to get 
around this.


The following code at least proves that CTFE variables can be 
read at compile time and the limitation is with the internal 
implementation.


(this is easy to see, because on one hand we can't print s but on 
the other we can... hence the limitation with pragma is an 
artificial one.)


import std.stdio, std.cstream, std.conv;

mixin template a()
{
template b()
{
static string c()
{

string s = a; s ~= b;
string x = pragma(msg, \~s~\);;
// pragma(msg, s) // fails
return x;
}
enum b = c();
}
mixin(b!());
}

int main(string[] argv)
{
	mixin a!(); // can't pass a string to a in any way because of 
artificial  ctfe limitation

din.getc();
return 0;
}


Re: Current version of D.

2013-07-09 Thread Rob T

On Tuesday, 9 July 2013 at 22:46:36 UTC, Tyro[17] wrote:

On 7/9/13 6:36 PM, Rob T wrote:

On Tuesday, 9 July 2013 at 22:34:18 UTC, Rob T wrote:



Agreed, however we should also have a pre-release package for 
testing
that is clearly marked as a pre-release, it can go on a 
separate web

page to avoid any possibility of confusion.

The current release is showing as both 2.63.0 and 2.63 but I 
thought
it was supposed to be 2.63.2 everywhere. This is very 
confusing.


--rt


Running latest release shows this ...

DMD64 D Compiler v2.063

It should show the full release number.

--rt


This is what the latest release shows for me:

Andrews-MacBook-Pro:vapor andrewedwards$ dmd
DMD64 D Compiler v2.063.2
Copyright (c) 1999-2013 by Digital Mars written by Walter Bright
Documentation: http://dlang.org/

Are you actually using the latest release?


I did a full removal, and install of latest version as of today 
downloaded from here: http://dlang.org/download.html


dmd_2.063-0_amd64.deb

The version on download page is showing 2.063-0, and so does the 
deb file name, and also the installation process shows 2.063-0 
was installed.


Running compiler shows

DMD64 D Compiler v2.063

Something has gone wrong somewhere.

--rt


Re: [OT] Why mobile web apps are slow

2013-07-09 Thread Adam D. Ruppe

On Tuesday, 9 July 2013 at 22:40:31 UTC, bearophile wrote:

- A less allocating Phobos to produce a bit less garbage;


Yes, and options to pass output ranges to more functions too, 
instead of always returning gc allocated things.


- Perhaps an annotation to disallow heap allocations in a 
function or a piece of code;


I don't think that will often get used, especially when we're 
already doing @safe pure const static void foo(); as it is.


- Some good way to allocate variable length arrays on the stack 
(http://d.puremagic.com/issues/show_bug.cgi?id=9832 ) (so some 
arrays produce no garbage);


These might be cool. Something we can do today is use static 
arrays as buffers. In my non-gc D experiments, I've made great 
use of a StackArray!(type, max_capacity) with the convenience 
operators overloaded. Combined with a solid scope 
implementation, this could be fast, convenient, and safe.


Of course it would need to have a statically known max length big 
enough to store what you want to store without being too 
wasteful. But I don't think that's particularly hard in most 
cases - at least we have RangeError so it dies gracefully instead 
of buffer overflowing like you'd get i C. (It could also 
automatically grow to the gc heap if the programmer is ok with 
that.)



- The implementation of scope maybe helps a bit;


Yes.

Is that enough? Rust language designers seem to think that's 
not enough. Opinions are welcome.


I think if we do scope well enough, we'll have something similar 
to Rust that we can flesh out more in the library.


Is the compiler supposed to accept this?

2013-07-09 Thread Brian Schott
While finishing up work on my parser and grammar specification I 
found this in container.d:


return equal!(function(Elem a, Elem b) = !_less(a,b)  
!_less(b,a))

 (thisRange, thatRange);

It seems to be some strange hybrid of the function literal syntax 
and the lambda syntax. It's not documented anywhere (surprise!) 
and I'm not sure if I should support it or file an 
accepts-invalid bug against DMD.


Memory management design

2013-07-09 Thread BLM768
Given all of this talk about memory management, it would seem 
that it's time for people to start putting forward some ideas for 
improved memory management designs. I've got an idea or two of my 
own, but I'd like to discuss my ideas before I draft a DIP so I 
can try to get everything fleshed out and polished.


Anyway the core idea behind my design is that object lifetimes 
tend to be managed in one of three ways:


1. Tied to a stack frame
2. Tied to an owner object
3. Not tied to any one object (managed by the GC)

To distinguish between these types of objects, one could use a 
set of three storage classes:


1. scope: refers to stack-allocated memory (which seems to be 
the original design behind scope). scope references may not 
be stashed anywhere where they might become invalid. Since this 
is the safest type of reference, any object may be passed by 
scope ref.


2. owned: refers to an object that is heap-allocated but 
manually managed by another object or by a stack frame. owned 
references may only be stashed in other owned references. Any 
non-scope object may be passed by owned ref. This storage class 
might not be usable in @safe code without further restrictions.


3. GC-managed: the default storage class. Fairly 
self-explanatory. GC-managed references may not refer to scope 
or owned objects.


Besides helping with the memory management issue, this design 
could also help tame the hairy mess of auto ref; scope ref 
can safely take any stack-allocated object, including 
temporaries, so a function could have scope auto ref parameters 
without needing to be a template function and with greater safety 
than auto ref currently provides.


Re: Is the compiler supposed to accept this?

2013-07-09 Thread Timon Gehr

On 07/10/2013 01:24 AM, Brian Schott wrote:

While finishing up work on my parser and grammar specification I found
this in container.d:

return equal!(function(Elem a, Elem b) = !_less(a,b)  !_less(b,a))
  (thisRange, thatRange);

It seems to be some strange hybrid of the function literal syntax and
the lambda syntax.


=... is supposed to be just a shorthand for { return ...; }


It's not documented anywhere (surprise!) and I'm not
sure if I should support it or file an accepts-invalid bug against DMD.



I'd say support it and file a bug against the documentation.



Re: [OT] Why mobile web apps are slow

2013-07-09 Thread H. S. Teoh
On Wed, Jul 10, 2013 at 01:01:01AM +0200, Adam D. Ruppe wrote:
 On Tuesday, 9 July 2013 at 22:40:31 UTC, bearophile wrote:
 - A less allocating Phobos to produce a bit less garbage;
 
 Yes, and options to pass output ranges to more functions too,
 instead of always returning gc allocated things.
[...]

+1. I think thus far we've only truly explored the input side of the
range concept. We should do more with output ranges -- they are a lot
more flexible than returning values (be that gc-allocated or not). You
can bypass a lot of unnecessary buffering by doing that (think to!string
and std.format, for example), which helps performance and reduces
garbage for the GC.

We should develop some good idioms for chaining / nesting output ranges,
so that what is today a bunch of string appends, say, could be a
UFCS-empowered chain of output ranges that basically writes the output
directly to its destination instead of sitting around in strings or
buffers, etc..


T

-- 
Error: Keyboard not attached. Press F1 to continue. -- Yoon Ha Lee, CONLANG


Re: Deimos Request: Add flac

2013-07-09 Thread Jonathan M Davis
On Tuesday, July 09, 2013 14:40:43 Walter Bright wrote:
 Ok, I created a 1.2.1 branch.

Thanks!

- Jonathan M Davis


Re: access CTFE variables at compile time.

2013-07-09 Thread Meta

On Tuesday, 9 July 2013 at 22:49:38 UTC, JS wrote:
It seems possible that we can print CTFE variables at compile 
time by using string mixes as the code below demonstrates.


The problem is that we can not pass a variable to a template to 
create a print routine in the first place. e.g., we can't do 
mixin a!(s) if s is a string since s can't be read, supposedly, 
at compile time.


I think there's been mention a couple times of a ctfeWrite 
function that can print values at compile-time, but so far 
nobody's implemented it.


Re: access CTFE variables at compile time.

2013-07-09 Thread bearophile

Meta:

I think there's been mention a couple times of a ctfeWrite 
function that can print values at compile-time, but so far 
nobody's implemented it.


That's not true. This is the ER:
http://d.puremagic.com/issues/show_bug.cgi?id=3952

And the patch:
https://github.com/D-Programming-Language/dmd/pull/237

A significant problem with GitHub is that it's managed mostly as 
as a LIFO (last in first out), it means the last added patches 
get exposure, are discussed, and they often get added to the 
code. But if they are not merged in few weeks, they get out of 
radar and they get forgotten, and they rot for years. This is a 
significant problem for D development that so far doesn't have a 
solution. I don't remember Andrei or Walter every discussing 
about this problem or proposing solutions...


Bye,
bearophile


Re: Linear algebra for Win64?

2013-07-09 Thread dnewbie

On Tuesday, 9 July 2013 at 19:02:09 UTC, Kevin McTaggart wrote:
Does anyone know of a good D linear algebra library for Win64?  
I tried scid a year ago and liked it on Win32, but have been 
unable to get it to link on Win64.  When trying to run scid on 
Win64, I've been using prebuilt LAPACK 3.4.1 libraries from 
http://icl.cs.utk.edu/lapack-for-windows/lapack/, but have 
unresolved external symbol dgesv_


You can try this:

/*
1. Create ABC.DEF with MS-NOTEPAD
 cut ---
LIBRARY LIBLAPACK.DLL
EXPORTS
dgesv_
 cut ---

2. Create ABC.LIB with MS-LIB
C:\Program Files (x86)\Microsoft Visual Studio 
9.0\VC\Bin\amd64\lib.EXE /DEF:ABC.DEF /MACHINE:X64 /OUT:ABC.LIB


3. Compile  link
dmd -m64 test1.d ABC.lib

4. Run
test1.exe
The solution is -0.661082 9.456125 -16.014625
*/

import std.stdio;

extern(System) void dgesv_(const(int)* N, const(int)* nrhs, 
double* A, const(int)* lda,

int* ipiv, double* b, const(int)* ldb, int* info);

void main()
{
/* 3x3 matrix A
 * 76 25 11
 * 27 89 51
 * 18 60 32
 */
double A[9] = [76, 27, 18, 25, 89, 60, 11, 51, 32];
double b[3] = [10, 7, 43];

int N = 3;
int nrhs = 1;
int lda = 3;
int ipiv[3];
int ldb = 3;
int info;

dgesv_(N, nrhs, A.ptr, lda, ipiv.ptr, b.ptr, ldb, info);

if (info == 0) /* succeed */
writefln(The solution is %f %f %f, b[0], b[1], b[2]);
else
writefln(dgesv_ fails %d, info);

}


Re: typeid(double) does not respect NaNs

2013-07-09 Thread deadalnix

On Tuesday, 9 July 2013 at 17:04:47 UTC, Jonathan M Davis wrote:

On Tuesday, July 09, 2013 18:04:29 Maxim Fomin wrote:

On Tuesday, 9 July 2013 at 13:46:48 UTC, H. S. Teoh wrote:
 On Tue, Jul 09, 2013 at 08:05:35AM +0200, deadalnix wrote:
 On Tuesday, 9 July 2013 at 03:03:34 UTC, H. S. Teoh wrote:
 More to the point, *if* typeinfo isn't meant to match == 
 for

 whatever
 reason, then why is it being used as the standard of
 comparison for
 AA keys?
 
 I guess we need NaN == NaN to be true for AA keys, no ?
 
 Not according to:

 http://d.puremagic.com/issues/show_bug.cgi?id=7836
 
 So, should NaN == NaN for AA keys, or not?
 
 
 T


I think it was not decided yet. From language coherency point 
of
view NaN != NaN like in general case, from usefulness 
perspective

you don't need several nans in AA array.


I'd think that having NaN != NaN would cause serious problems 
with retrieving
any elements inserted with NaN as a key, but given how floating 
point values
work, using them as the key for an AA is arguably completely 
broken to begin
with as comparing floating point values for equality is 
generally just plain
wrong. That being the case, I'd argue in favor of language 
consistency and
just point out to anyone that runs into problems that using a 
floating point
type as the key type of an AA is a stupid thing to do to begin 
with.


- Jonathan M Davis


That what I meant, and you explained it much better.


Re: Current version of D.

2013-07-09 Thread Kapps

On Tuesday, 9 July 2013 at 22:53:08 UTC, Rob T wrote:


I did a full removal, and install of latest version as of today 
downloaded from here: http://dlang.org/download.html


dmd_2.063-0_amd64.deb

The version on download page is showing 2.063-0, and so does 
the deb file name, and also the installation process shows 
2.063-0 was installed.


Running compiler shows

DMD64 D Compiler v2.063

Something has gone wrong somewhere.

--rt


The download page has the wrong link, it doesn't seem to have 
been updated for 2.063.2. Can just manually add a .2 at the end, 
such as http://downloads.dlang.org/releases/2013/dmd.2.063.2.zip


Re: access CTFE variables at compile time.

2013-07-09 Thread JS

On Wednesday, 10 July 2013 at 01:10:37 UTC, Meta wrote:

On Tuesday, 9 July 2013 at 22:49:38 UTC, JS wrote:
It seems possible that we can print CTFE variables at compile 
time by using string mixes as the code below demonstrates.


The problem is that we can not pass a variable to a template 
to create a print routine in the first place. e.g., we can't 
do mixin a!(s) if s is a string since s can't be read, 
supposedly, at compile time.


I think there's been mention a couple times of a ctfeWrite 
function that can print values at compile-time, but so far 
nobody's implemented it.



I've heard of this too and even tried __ctfeWrite and it worked!! 
Well, at least no compile time error... just didn't print 
anything.


I believe the error variable can't be read at compile time is 
due to the fact that the compiler doesn't have access to/isn't 
aware of the frame pointers(the stack) of the functions. This 
means that local variables can't be used in compile time, 
before ctfe, constructs because there is no way to get at the 
data.


This seems like a limitation of the system and not some innate 
reason why it should fail...


Re: access CTFE variables at compile time.

2013-07-09 Thread Jonathan M Davis
On Wednesday, July 10, 2013 06:24:02 JS wrote:
 On Wednesday, 10 July 2013 at 01:10:37 UTC, Meta wrote:
  On Tuesday, 9 July 2013 at 22:49:38 UTC, JS wrote:
  It seems possible that we can print CTFE variables at compile
  time by using string mixes as the code below demonstrates.
  
  The problem is that we can not pass a variable to a template
  to create a print routine in the first place. e.g., we can't
  do mixin a!(s) if s is a string since s can't be read,
  supposedly, at compile time.
  
  I think there's been mention a couple times of a ctfeWrite
  function that can print values at compile-time, but so far
  nobody's implemented it.
 
 I've heard of this too and even tried __ctfeWrite and it worked!!
 Well, at least no compile time error... just didn't print
 anything.
 
 I believe the error variable can't be read at compile time is
 due to the fact that the compiler doesn't have access to/isn't
 aware of the frame pointers(the stack) of the functions. This
 means that local variables can't be used in compile time,
 before ctfe, constructs because there is no way to get at the
 data.
 
 This seems like a limitation of the system and not some innate
 reason why it should fail...

Making it work would be like trying to make an if function as a static if. It 
would muddle things considerably and as such is a very bad idea IMHO. Right 
now, there is a very clean distinction between what's done at compile time and 
what's done at runtime as well as between CTFE and templated code. Allowing 
what you're trying to do would ruin that.

- Jonathan M Davis


Re: A thread-safe weak reference implementation

2013-07-09 Thread Kagamin

What race condition do you have in the constructor?

Declare _object field shared and cast it less.


Re: Current version of D.

2013-07-09 Thread H. S. Teoh
On Wed, Jul 10, 2013 at 06:15:08AM +0200, Kapps wrote:
[...]
 The download page has the wrong link, it doesn't seem to have been
 updated for 2.063.2. Can just manually add a .2 at the end, such as
 http://downloads.dlang.org/releases/2013/dmd.2.063.2.zip

This sounds pretty serious. Can somebody who has access please fix this
ASAP? We don't want our users to think they're getting 2.063.2 but
actually it's still 2.063.


T

-- 
They say that guns don't kill people, people kill people. Well I think
the gun helps. If you just stood there and yelled BANG, I don't think
you'd kill too many people. -- Eddie Izzard, Dressed to Kill


Re: GitHub behind proxy servers among other questions

2013-07-09 Thread monarch_dodra

On Monday, 8 July 2013 at 19:57:52 UTC, JohnnyK wrote:

On Monday, 8 July 2013 at 19:37:08 UTC, JohnnyK wrote:
Another thing about GitHub's Download Zip button and this 
process as a whole.  While the Download Zip button does allow 
you to download the master folders with recursive directories I 
do find it somewhat cumbersome or should I say awkward since 
you have to extract these in their correct locations upon 
download.  This is not good when you are trying to follow 
someones instructions on how to download, build, and install 
their wares.  I just don't get git?  Just compile the code and 
put a binary up there for people to use.  If I want to 
contribute to the code base then I will I guess go through all 
this hassle but for those of us not smart enough to contribute 
and just want to use it show me the binary please.  In the 
amount of time it is taking to get this stuff I could have made 
major strides at building my own.  Also I don't know what this 
fragmented downloading is going to do in the future when I want 
an updated version of the software.  Please remember many of us 
are simpletons and don't use all these fancy version control 
systems and just need the binary so that we can use it.  I 
guess you could say we are your customers and not your 
contributors.  Please everyone in the D community try and 
follow the KISS methodology and if you do I bet you could get 
many more users of your wares and not people banging their 
heads until they give up.  Yeah I was only 2 clicks away from 
giving up on this whole D thing thinking it was just too darned 
hard to make it worth my while.  Who knows I still may give up 
since I have not attempted to compile it yet.  I think I will 
wait until tomorrow before I try to tackle that part of the 
destruction's.  For now I think I have it downloaded.  BTW did 
I mention that I really hate git and compiling other people's 
code just to use an edit box and button on a dialog???


Ar you talking about D specifically? You *can* just download the 
package you know:

http://dlang.org/download.html
I'm actually wondering how you even reached git?


Re: GitHub behind proxy servers among other questions

2013-07-09 Thread monarch_dodra

On Monday, 8 July 2013 at 19:20:46 UTC, John Colvin wrote:
I don't see how it is problematic? The firewall doesn't allow a 
particular type of connection, so you cache the result 
somewhere else and then access it via something that is allowed.


It's the same as downloading the zip file from github, only 
you're doing the zipping yourself, then using scp to do the 
download instead of http.


Is it common to have ssh connections banned in the IT policy 
but *not* blocked by the firewall?


I'm just saying that maybe the firwall is blocking that protocol 
on purpose? Github can very easily be seen as File Sharing 
and/or Online Storage. The sole act of downloading/uploading 
anything on there is possible violations of policy. You could 
download viruses, or be stealing your company's code to publish 
it online. Even if you *can* download the zip via http, it 
doesn't mean you are actually allowed to. If your company's 
firewall doesn't block a porn site, does that means its OK to 
surf it?


Now, most companies wouldn't really care that much about it, if 
you connect every now and then, no one will care. Worst case 
scenario, you'll get a reminder not to download/upload crap on 
internet.


But, if you start doing all this via ssh, or other alternative 
routes, then you are *activelly* bypassing protections, and in 
particular, doing something you *know* you shouldn't be doing. 
That's a more serious offense.


Now, do what you want. I'm just saying before going it and 
deploying such tools to download the files on git, please make 
sure you aren't violating your company's policies.


Needing help with basic HTTP requests..

2013-07-09 Thread AlexMcP

Hi guys,

I've only been trying to learn D for a short while, and compared 
to the other more popular programming languages, I've been able 
to find very little helpful and updated documentation or 
tutorials on it.


I basically need help getting data from a website, just the HTML 
of a webpage, in this case a PHP page. I'm using the following 
code which compiles fine, but when run it just encounters a 
'Socket.ERROR' with a value of -1.


I'm not sure what I'm doing wrong, but any help or suggestions 
would be appreciated. As I said, I'm quite new to D...


---
//readData.d
module main;

import std.stdio;
import std.socket;
import std.cstream;

int main(string[] args)
{
string host = www.dprogramming.com;
ushort port = 80;

Socket listener = new TcpSocket;
assert(listener.isAlive);
listener.blocking = false;

listener.connect(new InternetAddress(host, port));

char[] msg;
	char[] req = cast(char[]) GET /internet.php HTTP/1.1\r\nHost: 
www.dprogramming.com\r\n\r\n;


listener.send(req);

while (1)
{
int bytes;
char[1024] buf;
bytes = listener.receive(buf);
if (Socket.ERROR == bytes)
{
writeln(Connection Error , Socket.ERROR);
listener.close();
din.readLine();
return 1;
}
else if (0 == bytes)
{
try
{
writeln(Connection to target lost.);
}
catch (SocketException)
{
writeln(Connection closed.);
}
listener.close();
din.readLine();
return 1;
}
else
{
			writeln(Recieved , bytes, bytes from , 
listener.remoteAddress().toString(), : \, buf[0 .. bytes], 
\);

}
}
}
---

- Alex.


lambdas and function literals in classes

2013-07-09 Thread John Colvin
JS asked about this in the main group, but here is more 
appropriate and I'm quite interested myself.


Can someone explain the rationale behind this:

class A
{
auto a = (){};  //Lambda not allowed
auto b = function(){};  //Function allowed
auto c = delegate(){};  //Delegate not allowed
}

A guess:

Delegate's aren't allowed as members due their context pointer 
(why???), lambdas are assumed to be delegates unless they are 
proved to not need context (and dmd is sucking at proving that).


Re: lambdas and function literals in classes

2013-07-09 Thread Dicebot

On Tuesday, 9 July 2013 at 10:50:02 UTC, John Colvin wrote:
JS asked about this in the main group, but here is more 
appropriate and I'm quite interested myself.


Can someone explain the rationale behind this:

class A
{
auto a = (){};  //Lambda not allowed
auto b = function(){};  //Function allowed
auto c = delegate(){};  //Delegate not allowed
}

A guess:

Delegate's aren't allowed as members due their context pointer 
(why???), lambdas are assumed to be delegates unless they are 
proved to not need context (and dmd is sucking at proving that).


Error message is actually misleading here, because this compiles:

class A
{
void delegate() a;
}

void main()
{
auto a = new A();
a.a = () {};
}

So this has something to do with _initialization_ of class 
members with delegates/lambdas, not their very existence.


Re: lambdas and function literals in classes

2013-07-09 Thread bearophile

Dicebot:

So this has something to do with _initialization_ of class 
members with delegates/lambdas, not their very existence.



So is it worth adding this diagnostic bug report in Bugzilla?


class Foo {
void delegate() dg1;
void delegate() dg2 = delegate(){};
this() {
this.dg1 = (){};
}
}
void main() {
auto f = new Foo;
}



DMD 2.064alpha gives:

temp.d(3): Error: delegate temp.Foo.__dgliteral1 function 
literals cannot be class members
temp.d(3): Error: cannot implicitly convert expression 
(__dgliteral1) of type _error_ delegate() to void delegate()



Bye,
bearophile


Re: Needing help with basic HTTP requests..

2013-07-09 Thread Adam D. Ruppe

On Tuesday, 9 July 2013 at 09:03:32 UTC, AlexMcP wrote:

writeln(Connection Error , Socket.ERROR);


First tip: Socket.ERROR is a constant, so printing it doesn't  
help much (as you probably noticed). More helpful is the function 
lastSocketError(), which returns a string with some details.


writeln(Connection Error , 
Socket.ERROR,  , lastSocketError());


Which tells you:

Connection Error -1 Resource temporarily unavailable



The reason that is an error is because you turned off blocking.

listener.blocking = false;


So, since the connection hasn't had a chance to get established 
and transfer data yet, instead of waiting for it to finish when 
you called receive, it returned the error telling you to try 
again later.


The simplest thing to do here is to comment out that blocking = 
false line, letting receive just wait until data is available. 
Another option is to use Socket.select to notify you when data is 
available, and only receive then.


After that, make sure the req literal is all on one line to avoid 
http 400 errors (not sure if that was a result of copy/paste or 
not, probably) and you should get a response.



Another note: casting a string literal to char[] is usually a bad 
idea, because you can't write to them anyway. Best to just leave 
them typed as string. It should all still work the same after 
doing that.




Finally, if you want a higher level library to do this, check out 
std.net.curl: http://dlang.org/phobos/std_net_curl.html


Re: Needing help with basic HTTP requests..

2013-07-09 Thread Adam D. Ruppe

BTW I also wrote a more complete lower level implementation too:

https://github.com/adamdruppe/misc-stuff-including-D-programming-language-web-stuff/blob/master/http.d

My code is kinda ugly, but might be useful to refer to too. http 
has some other features you'll need to think about, like chunked 
data transfer, to have a more complete implementation, and I have 
some openssl code in there too. Of course, curl takes care of all 
this too.


  1   2   >