Re: Emacs d-mode indentation, 2 spaces to 4?
On 10/04/2017 09:57 PM, John Gabriele wrote: I'm using Emacs 25.2.2 with d-mode-20161022.717 on Debian Testing, and by default this mode indents by 2 spaces. Is there an easy way to configure it to use 4 spaces instead? I can't imagine it has its own tab width. d-mode is based on cc-mode. Setting the tab width in that mode or in general should work for d-mode as well. Just research tab width for Emacs. If nothing else works and you're happy with a global tab-width of 4, add this to your .emacs file: (setq-default tab-width 4) Ali
Emacs d-mode indentation, 2 spaces to 4?
I'm using Emacs 25.2.2 with d-mode-20161022.717 on Debian Testing, and by default this mode indents by 2 spaces. Is there an easy way to configure it to use 4 spaces instead?
Re: Imports
On Wednesday, 4 October 2017 at 16:31:35 UTC, Jiyan wrote: Hey, as i see it the -Ipath command for dmd just imports the files within a directory but it doesnt work for sub directories, so i can write something like: import subdirectoryFromPath.file; Also with dub this doesnt seem possible (sourcePaths seems to work as the -I command). Is there a way to do what i want? Or am i doing something wrong? If you have this directory tree: - mylib -- pack1 --- a.d --- b.d pack2 - c.d Then you would pass -Imylib to the compiler. In your code, you can write the following: import pack1.a; import pack1.pack2.c; You don't import files or directories, just packages and modules. By default, package names correspond to directory names and module names correspond to file names, but they don't have to (it's best practice, though). And by the way what is the difference from sourcePaths to importPaths? sourcePaths where DUB can find additional files, outside of the default source directory, to pass to the compiler for compilation. importPaths will all be passed to the compile as -I. It seems you think that importing a module causes its source file to be automatically compiled. That doesn't happen. imports are strictly for the compiler to know which symbols are available for the current module to use. It does not attempt to compile imported modules. Imported modules might be part of your program or they might be part of a precompiled library. In the latter case, they don't need to be compiled because they already are. So the compiler leaves it up to you to decide which modules need to be compiled. Dub, by default, will make sure all modules in your source directory are compiled. It will also guarantee the compiler knows where to find them for imports. Sometimes, you might also want to import files from a library that isn't available from code.dlang.org. You can use importPaths to tell dub additional paths to give the compiler. If those files are part of a precompiled library you can link the library and you're done. If they aren't, you can use sourcePaths to tell DUB that all the source modules in the additional paths also need to be passed to the compiler for compiling and linking into the final executable.
Iterating over functions in module in order?
Any ideas on how someone could iterate over functions in a module as they appear, rather than any random order, without having to manually label them?
Re: Andrei's "The D Programming Language" book. Up to date?
Andrei's book contains some outdated and some not-yet-implemented things but it's still a great read. It explains core features and design decisions of D very well. Ali
Re: What the hell is wrong with D?
On 2017/09/19 19:40, EntangledQuanta wrote: writeln(x + ((_win[0] == '@') ? w/2 : 0)); writeln(x + (_win[0] == '@') ? w/2 : 0); The first returns x + w/2 and the second returns w/2! WTF!!! This stupid bug has caused me considerable waste of time. Thanks Walter! I know you care so much about my time! I assume someone is going to tell me that the compiler treats it as writeln((x + (_win[0] == '@')) ? w/2 : 0); Yeah, that is really logical! No wonder D sucks and has so many bugs! Always wants me to be explicit about the stuff it won't figure out but it implicitly does stuff that makes no sense. The whole point of the parenthesis is to inform the compiler about the expression to use. Not use everything to the left of ?. Thanks for wasting some of my life... Just curious about who will justify the behavior and what excuses they will give. When you get too angry about the little things in life. "There are people dying in the world and this angers you, chill".
Andrei's "The D Programming Language" book. Up to date?
Hi all, This is my first message to this forum. And what a pleasure it is to be here. :) I was just looking around at what D books are available. I see that Andrei's "The D Programming Language" was published in 2010. What's changed in the language, library, and community since then that I should be aware of if following along with and learning from that book? Incidentally, is a new edition is on its way any time soon? Thanks!
Re: For fun: Expressive C++ 17 Coding Challenge in D
On Wednesday, 4 October 2017 at 15:30:08 UTC, Ali Çehreli wrote: the hidden \r characters at the ends Those got me too! Here's my less than optimal solution: int main(string[] args) { import std.stdio; import std.algorithm.iteration : map, splitter, joiner, each; import std.algorithm.searching : countUntil; import std.range : enumerate; import std.string : chomp; if (args.length != 5 && args.length != 4) { stderr.writeln("Something went wrong and it's obviously your fault."); return 1; } immutable columnID = args[2]; immutable substitute = args[3]; auto data = File(args[1], "r").byLine.map!chomp; if (data.empty) { stderr.writeln("input file missing\n\n(actually it exists, it's just " ~ "empty)\n\n(your fault regardless)"); return 1; } File output; if (args.length == 5) output = File(args[4], "w"); else output = stdout; immutable matchedColumn = data.front.splitter(",").countUntil(columnID); if (matchedColumn < 0) { stderr.writeln("column name doesn’t exist in the input file\n\n(and " ~ "it's your fault)"); return 1; } output.writeln(data.front); data.popFront; data.map!(line => line .splitter(",") .enumerate .map!(a => a.index == matchedColumn ? substitute : a.value) .joiner(",")).each!(a => output.writeln(a)); return 0; } I think the biggest problem is the lack of support for quoted content.
Re: Does writing from NNTP work?
On 2017/10/04 21:20, Jonathan M Davis wrote: On Wednesday, October 04, 2017 17:26:36 ketmar via Digitalmars-d-learn wrote: Tristan B. Kildaire wrote: Does this work? btw. there is "D" newsgroup which you can use for testing your NNTP client. web interface: http://forum.dlang.org/group/D NNTP name: "D" You can also just post whatever actual content you wanted to post and see if it shows up on forum.dlang.org or not. - Jonathan M Davis Oh yes but at the time I didn't have anything to write so I tested this.
Re: For fun: Expressive C++ 17 Coding Challenge in D
On Wednesday, 4 October 2017 at 15:26:02 UTC, Ali Çehreli wrote: On 10/04/2017 02:04 AM, Biotronic wrote: ... Hey where is the list of features used e.g: ranges, ufcs...
Re: Does writing from NNTP work?
On Wednesday, October 04, 2017 17:26:36 ketmar via Digitalmars-d-learn wrote: > Tristan B. Kildaire wrote: > > Does this work? > > btw. there is "D" newsgroup which you can use for testing your NNTP > client. > > web interface: http://forum.dlang.org/group/D > NNTP name: "D" You can also just post whatever actual content you wanted to post and see if it shows up on forum.dlang.org or not. - Jonathan M Davis
Re: For fun: Expressive C++ 17 Coding Challenge in D
On Wednesday, 4 October 2017 at 15:30:08 UTC, Ali Çehreli wrote: On 10/04/2017 02:26 AM, Atila Neves wrote: > in D so trivial it'd probably make me sleep out of boredom. I spent more time on this obviously trivial program than necessary. :( In addition to facing known template resolution issues, the hidden \r characters at the ends of some of the fields in the example textcolumns threw me off for a while. (Compounded by silly mistakes that I was making.) But it's not wasted time. You could also use it somewhere else. Blog post, updated version of your book, new book, etc.
Re: Looking for a mentor in D
On 10/02/2017 11:54 PM, eastanon wrote: > I would like to dive deeper into D, however sometimes it can get > intimidating when I read some of the discussions on the forums and I > realise I know nothing. I think it happens to everyone at different level. (Certainly happens to me all the time.) I find such discussion areas excellent places to improve myself. I started learning C++ on comp.lang.c++.moderated and D here without any CS background myself. Current discussions make it obvious what is in fashion these days and then you go ahead and read a little bit about the ones that are interesting to you. > Please let me know if you would like to be a D mentor. I think it's beneficial to others as well as to you if we keep the conversation on this forum. Many more opportunities to learn from others' questions and many less opportunities of BS by mentors... You can still email me, a person without CS background, at acehr...@yahoo.com. :) Ali
Re: Looking for a mentor in D
On Tuesday, 3 October 2017 at 06:54:01 UTC, eastanon wrote: I would like to choose D as my go to language and to do that I realise I need a mentor, someone who will walk and guide me and not get irritated by basic questions. I am pretty much a DIY person, so don't worry about mundane issues. I want to have someone with whom I can discuss some practical choices and algorithms. I am a self-taught programmer and never took CS classes. I am good in R, Python and Ruby. Please let me know if you would like to be a D mentor. I haven't seen anyone blasted for asking programming questions on these forms as long as they were using D to solve them. Though maybe that wouldn't be true if the forum was consumed by such questions. Feel free to shoot me an email though jesse.k.phill...@gmail.com and we can see how it goes.
Imports
Hey, as i see it the -Ipath command for dmd just imports the files within a directory but it doesnt work for sub directories, so i can write something like: import subdirectoryFromPath.file; Also with dub this doesnt seem possible (sourcePaths seems to work as the -I command). Is there a way to do what i want? Or am i doing something wrong? And by the way what is the difference from sourcePaths to importPaths?
Re: Vibe.d using Windows Certificate binding, possible?
On Wednesday, 4 October 2017 at 03:39:22 UTC, rikki cattermole wrote: On 04/10/2017 3:54 AM, Jesse Phillips wrote: https://msdn.microsoft.com/en-us/library/windows/desktop/cc307220(v=vs.85).aspx "Application program source files include the Http.h header file to access function prototypes and structure definitions for the HTTP Server API. Developers can use the Httpapi.lib library file to build applications that use the HTTP Server API. At runtime, applications link to the Httpapi.dll." So no, vibe.d can't work with it. This a special snow flake feature from 2k3 server days. Thank you, and it looks like core.sys.windows doesn't have this header file defined either. And now I've learned something new about MSDN docs.
Re: For fun: Expressive C++ 17 Coding Challenge in D
On 10/04/2017 02:26 AM, Atila Neves wrote: > in D so trivial it'd probably make me sleep out of boredom. I spent more time on this obviously trivial program than necessary. :( In addition to facing known template resolution issues, the hidden \r characters at the ends of some of the fields in the example textcolumns threw me off for a while. (Compounded by silly mistakes that I was making.) > Maybe that should be our new catchphrase: > > "D: Making programming boring" While still keeping it interesting enough to scratch your head once in a while. :) Ali
Re: For fun: Expressive C++ 17 Coding Challenge in D
On 10/04/2017 02:04 AM, Biotronic wrote: > I opted for writing to stdout instead, because 1) it's easier, x) it's > less code, and b) it's more flexible. Exactly! :) > a simple replacement of readText with an mmapped equivalent should > enable humongous file support with no other code change required. Here is one from me: import std.stdio; import std.algorithm; import std.string; import std.range; const delim = ","; auto byColumn(R)(R range) { return range .splitter(delim) .map!strip; } int main(string[] args) { if (args.length != 3) { stderr.writefln("USAGE: %s ", args[0]); return 1; } const columnName = args[1]; auto lines = stdin.byLine; const columnNumber = lines .front .byColumn .countUntil(columnName); if (columnNumber == -1) { stderr.writefln(`ERROR: Failed to find "%s".`, columnName); return 1; } writeln(lines.front); lines.popFront(); const replacement = args[2]; auto replaced = lines .map!(line => line .byColumn .enumerate .map!(t => (t[0] == columnNumber) ? replacement : t[1]) .joiner(delim)); writefln("%(%s\n%)", replaced); return 0; } Ali
Re: Does writing from NNTP work?
On Wednesday, 4 October 2017 at 14:26:36 UTC, ketmar wrote: Tristan B. Kildaire wrote: Does this work? btw. there is "D" newsgroup which you can use for testing your NNTP client. web interface: http://forum.dlang.org/group/D NNTP name: "D" Ah okay. Thanks.
Re: Does writing from NNTP work?
Tristan B. Kildaire wrote: Does this work? btw. there is "D" newsgroup which you can use for testing your NNTP client. web interface: http://forum.dlang.org/group/D NNTP name: "D"
Re: Looking for a mentor in D
On 2017/10/03 08:54, eastanon wrote: I have been reading the D forums for a while and following on its amazing progress for a long time. Over time I have even written some basic D programs for myself, nothing major or earth shuttering. I have downloaded and read Ali's excellent book. I would like to dive deeper into D, however sometimes it can get intimidating when I read some of the discussions on the forums and I realise I know nothing. People argue on and on about a feature or lack of and the future of the language and it starts to cast doubts on my desire to learn and be proficient in D. I would like to choose D as my go to language and to do that I realise I need a mentor, someone who will walk and guide me and not get irritated by basic questions. I am pretty much a DIY person, so don't worry about mundane issues. I want to have someone with whom I can discuss some practical choices and algorithms. I am a self-taught programmer and never took CS classes. I am good in R, Python and Ruby. Please let me know if you would like to be a D mentor. I don't have a mentor or anything. I am doing CS next year but I went to school and did IT there (I am almost done with school). I recommend watching some computer science videos (like one on the fundamentals, binary, etc.) and then things start to make more sense (atleast for me). Also, this is a good place to ask for help and along with the IRC channel (#d on irc.freenode.net).
Re: Looking for a mentor in D
On 2017/10/03 08:54, eastanon wrote: I have been reading the D forums for a while and following on its amazing progress for a long time. Over time I have even written some basic D programs for myself, nothing major or earth shuttering. I have downloaded and read Ali's excellent book. I would like to dive deeper into D, however sometimes it can get intimidating when I read some of the discussions on the forums and I realise I know nothing. People argue on and on about a feature or lack of and the future of the language and it starts to cast doubts on my desire to learn and be proficient in D. I would like to choose D as my go to language and to do that I realise I need a mentor, someone who will walk and guide me and not get irritated by basic questions. I am pretty much a DIY person, so don't worry about mundane issues. I want to have someone with whom I can discuss some practical choices and algorithms. I am a self-taught programmer and never took CS classes. I am good in R, Python and Ruby. Please let me know if you would like to be a D mentor. Oh sorry I see you have read the book on D by Ali. Well we can always help you with your questions then.
Re: Does writing from NNTP work?
On 2017/10/04 16:20, Andrea Fontana wrote: On Wednesday, 4 October 2017 at 14:18:52 UTC, Tristan B. Kildaire wrote: Does this work? No, I don't read you. Try again :) Haha, thanks. :)
Re: Does writing from NNTP work?
On Wednesday, 4 October 2017 at 14:18:52 UTC, Tristan B. Kildaire wrote: Does this work? No, I don't read you. Try again :)
Re: Does writing from NNTP work?
Tristan B. Kildaire wrote: Does this work? if you can see this reply, it works.
Re: Does writing from NNTP work?
On Wednesday, 4 October 2017 at 14:18:52 UTC, Tristan B. Kildaire wrote: Does this work? Sorry about this guys, just wanted to check out if NNTP access worked on my side. Won't happen again.
Does writing from NNTP work?
Does this work?
Re: For fun: Expressive C++ 17 Coding Challenge in D
On Wednesday, 4 October 2017 at 09:04:58 UTC, Biotronic wrote: Since the code uses ranges though, a simple replacement of readText with an mmapped equivalent should enable humongous file support with no other code change required. Drop-in replacement for readText: struct MmText { import std.mmfile; ulong _fileOffset; MmFile _file; this(string filename) { _file = new MmFile(filename); } dchar front() { auto end = min(_file.length, _fileOffset+4); auto data = cast(string)_file[_fileOffset..end]; return decodeFront(data); } void popFront() { auto end = min(_file.length, _fileOffset+4); auto data = cast(string)_file[_fileOffset..end]; size_t bytes; decodeFront(data, bytes); _fileOffset += bytes; } bool empty() { return _fileOffset >= _file.length; } } -- Biotronic
Re: How to implement `isTemplate` traits?
04.10.2017 12:54, Biotronic пишет: template isTemplate(T...) if (T.length == 1) { enum isTemplate = __traits(isTemplate, T[0]); } -- Biotronic Thank you!
Re: How to implement `isTemplate` traits?
On Wednesday, 4 October 2017 at 09:32:31 UTC, drug wrote: I need to separate templates: ``` foreach(member; __traits(allMembers, V)) { static if (__traits(compiles, { auto _val = &__traits(getMember, value, member); }) { // a template needs to be instantiated to be addressable, so it works, but I think it's dirty hack instead of dry and clean way... } } ``` May be phobos has such traits somewhere? template isTemplate(T...) if (T.length == 1) { enum isTemplate = __traits(isTemplate, T[0]); } -- Biotronic
How to implement `isTemplate` traits?
I need to separate templates: ``` foreach(member; __traits(allMembers, V)) { static if (__traits(compiles, { auto _val = &__traits(getMember, value, member); }) { // a template needs to be instantiated to be addressable, so it works, but I think it's dirty hack instead of dry and clean way... } } ``` May be phobos has such traits somewhere?
Re: For fun: Expressive C++ 17 Coding Challenge in D
On Tuesday, 3 October 2017 at 19:25:56 UTC, Ali Çehreli wrote: Found on Reddit: https://www.reddit.com/r/programming/comments/740617/the_expressive_c17_coding_challenge/ How would you do it in D? Ali P.S. You can ignore the following note from the challenge text; I don't think it applies to D. Honestly, I don't think it matters for C++17 either. :) "You can assume input files won't be super large and can fit fully into memory." I can't bring myself to code a solution in C++17 or D. In C++17 it'd be too painful, and in D so trivial it'd probably make me sleep out of boredom. Maybe that should be our new catchphrase: "D: Making programming boring" :P Atila
Re: conversion error related to array index
On Wednesday, October 04, 2017 09:04:10 thorstein via Digitalmars-d-learn wrote: > Hi, > > I get the following compile error with this function below: > source\mod_data\matrices.d(66,12): Error: cannot implicitly > convert expression (j) of type ulong to uint > > (66,12) is [j] in row[j] > > Using uint as type for rows, cols (i.e. the indices) works. Is > ulong not allowed for array indices? I could not find the > respective information. Array indices - and array length - are size_t. If you're on a 32-bit system, that's an alias to uint, whereas on a 64-bit system, it's an alias to ulong. In general, code should be using size_t when dealing with arrays not uint or ulong (unless you're talking about having elements of uint or ulong). If you don't use size_t, then you're likely to run into problems when compiling for a different architecture. But if you have a ulong that you need to convert to a uint, then you can always cast or use std.conv.to!uint so long as the number will actually fit in a uint. - Jonathan M Davis
Re: For fun: Expressive C++ 17 Coding Challenge in D
On Tuesday, 3 October 2017 at 19:25:56 UTC, Ali Çehreli wrote: Found on Reddit: https://www.reddit.com/r/programming/comments/740617/the_expressive_c17_coding_challenge/ How would you do it in D? Ali P.S. You can ignore the following note from the challenge text; I don't think it applies to D. Honestly, I don't think it matters for C++17 either. :) "You can assume input files won't be super large and can fit fully into memory." https://gist.github.com/Biotronic/0bc6048b880d67bfdca970453cc47cf9 I opted for writing to stdout instead, because 1) it's easier, x) it's less code, and b) it's more flexible. The memory limitations certainly do apply - readText would fail upon reading humongous files, and for 32-bit programs the resulting string wouldn't be able to hold enough data. Since the code uses ranges though, a simple replacement of readText with an mmapped equivalent should enable humongous file support with no other code change required. -- Biotronic
conversion error related to array index
Hi, I get the following compile error with this function below: source\mod_data\matrices.d(66,12): Error: cannot implicitly convert expression (j) of type ulong to uint (66,12) is [j] in row[j] Using uint as type for rows, cols (i.e. the indices) works. Is ulong not allowed for array indices? I could not find the respective information. Thanks! 49 private double[][] matrix_uniform(ulong rows, ulong cols, double lbound, double ubound, ulong precision) 50 { 51double[][] array; 52double[] rowT; 53auto gen = Random(unpredictableSeed); 54auto rndUniform = uniform(lbound, ubound, gen); 55 56foreach(ulong i; 0..cols) 57{ 58 rowT ~= 0; 59} 60 61foreach(ulong i; 0..rows) 62{ 63 foreach(ulong j; 0..cols) 64 { 65rndUniform = uniform(lbound, ubound, gen); 66rowT[j] = to!double(rndUniform) / 10^^precision; 67 } 68 array ~= rowT.dup; 69} 70 return array; 71 }