Re: How to use C code in D

2017-03-24 Thread MGW via Digitalmars-d-learn

On Thursday, 23 March 2017 at 18:10:20 UTC, Dillen Meijboom wrote:

Hi there,

I'm learning D for a while because it's really easy to use 
C-code in D.
The problem is that I don't really get how to deal with the 
data structures defined in C in D.


Perhaps, it will be interesting to you.
I advise to look at
https://www.youtube.com/watch?v=HTgJaRRfLPk


Re: How to use C code in D

2017-03-24 Thread Jesse Phillips via Digitalmars-d-learn

On Thursday, 23 March 2017 at 18:10:20 UTC, Dillen Meijboom wrote:

Hi there,

I'm learning D for a while because it's really easy to use 
C-code in D.
The problem is that I don't really get how to deal with the 
data structures defined in C in D.


D makes it easy to utilize C code, but there is no magic C to D 
wrapper. There are some functions in Phobos which help (e.g. 
toStringz). You can slice a C string to utilize it as a slice, 
but usually there are ownership issue with this approach. In my 
experience, you'll be writing some C style code to provide a D 
interface.


Re: How to use C code in D

2017-03-23 Thread Laeeth Isharc via Digitalmars-d-learn

On Thursday, 23 March 2017 at 18:10:20 UTC, Dillen Meijboom wrote:

Hi there,

I'm learning D for a while because it's really easy to use 
C-code in D.
The problem is that I don't really get how to deal with the 
data structures defined in C in D.


At one time for instance I've tried to get all environment 
variables on a POSIX system. I succeeded but I think it can be 
done way easier.


So my question basically is:
1. How can I learn to use C code in D? Is there any good 
tutorial or other packages that deal with this a lot?
2. Is the way I'm currently doing it okay or is it wrong and do 
I need to do something else?


As a reference, I'm currently using the following D code to get 
all environment variables:


```
import std.array;
import std.conv: to;
import std.string: fromStringz;

extern (C) extern const char** environ;

string[string] getenv() {
string[string] env;
char* line;

	for (auto data = cast(char**)environ; (line = *data) != null; 
++data) {

auto keyval = to!string(fromStringz(line)).split('=');

env[keyval[0]] = keyval[1];
}

return env;
}
```


https://dlang.org/phobos/std_process.html#.environment means it's 
already done for you.


C global variables are __gshared.

Reading other people's source code - starting with standard 
library and maybe look at some of the bindings and wrappers on 
code.dlang.org.


IRC chat to get a quick answer most of the time.


How to use C code in D

2017-03-23 Thread Dillen Meijboom via Digitalmars-d-learn

Hi there,

I'm learning D for a while because it's really easy to use C-code 
in D.
The problem is that I don't really get how to deal with the data 
structures defined in C in D.


At one time for instance I've tried to get all environment 
variables on a POSIX system. I succeeded but I think it can be 
done way easier.


So my question basically is:
1. How can I learn to use C code in D? Is there any good tutorial 
or other packages that deal with this a lot?
2. Is the way I'm currently doing it okay or is it wrong and do I 
need to do something else?


As a reference, I'm currently using the following D code to get 
all environment variables:


```
import std.array;
import std.conv: to;
import std.string: fromStringz;

extern (C) extern const char** environ;

string[string] getenv() {
string[string] env;
char* line;

	for (auto data = cast(char**)environ; (line = *data) != null; 
++data) {

auto keyval = to!string(fromStringz(line)).split('=');

env[keyval[0]] = keyval[1];
}

return env;
}
```