What is the D plan's to become a used language?

Adam D. Ruppe via Digitalmars-d digitalmars-d at puremagic.com
Thu Jan 15 07:38:04 PST 2015


On Thursday, 15 January 2015 at 14:57:48 UTC, Ola Fosheim Grøstad 
wrote:
> Sounds like perfect topic for your newsletter? :)

I could totally fill in the "project spotlight" with stuff from 
that repo for at least a year, not even kidding. But I don't want 
it to be all about me! (and oauth.d isn't new, i wrote that like 
three years ago... it had to be updated a while ago because 
twitter deprecated v1 of their api, but other than that, it 
hasn't changed much)

Over the years though, I've written a lot of D programs and do my 
own libs as required. I've done 2d games, working on a 3d game 
now, web applications with social media interop for authorization 
and posting, email marketing, email parsing, I've written a 
terminal emulator, taskbar, the list goes on and on.

And only about 1/3 of the D code I've written is even on Github! 
(Of course, about half of my D code is totally uninteresting, 
closed source business logic stuff, though it would make nice 
examples to how to use the libraries for real world tasks...)



Let me give an outline of the misc modules to give you an idea of 
how varied this is:

audio.d, screen.d, engine.d - my old game stuff, wrapping SDL, 
works in D1 and D2 (or at least did last time I tried it about a 
year ago). Soon to be replaced by the dependency-free 
simpledisplay.d, simpleaudio.d, joystick.d combo.

bmp.d, png.d - read/write for bmp and image files.
jpg.d - partial read support for jpeg headers (just to get the 
size of the image).

cgi.d - basic module for making web apps. Includes cgi, fastcgi, 
scgi, and an embedded http server. Reads url encoded data, MIME 
data (for file uploads on the web), and has full URL parsing, 
among other things.

characterencodings.d - stuff for converting other strings to 
UTF-8. Supports about twenty other encodings based on webpage and 
email mining I've done in the past. Also has a lossy conversion 
as a catchall.

color.d - a color struct for RGBA, also does CSS color string 
read/writing, HSL <-> RGB, some color manipulation, alpha 
blending, and image base classes including palette to true color 
and true color to palette (quantization).

csv.d - simple csv reader, predates std.csv (and is a bit simpler)

curl.d - wrapper for libcurl (predates std.net.curl)

database.d - base class for RDBMS access. Also includes basic ORM 
and query builder in the form of DataObject and SelectBuilder. It 
is a simple, low-level wrapper of sql so you can manipulate it 
semantically more easily but you still need to understand sql to 
use it. (It also doesn't limit your options!)

mysql.d, postgres.d, mssql.d, sqlite.d - drivers for database.d 
(wrapping C libraries)

dom.d - XML and HTML parsing and manipulation, including CSS 
selectors and other tools that can help for implementing a 
browser. API inspired by modern Javascript DOM, capable of 
scraping tag soup web pages.

email.d - functions for reading and writing emails with MIME 
attachments, html and text versions, character sets. Can scrape 
mbox format, I used it to automatically monitor and reply to some 
email addresses sitting on the smtp server.

english.d - printing numbers in English

eventloop.d - an epoll based event loop for responding to and 
sending events. My other modules can optionally tie into it, so 
you can have one event loop driving files, networks, terminals, X 
windows, and more.

html.d - stuff for html and CSS manipulation. Includes the Css 
Macro Expander, which is similar to functionality offered by SASS 
(also available as a stand alone dub package on code.dlang.org 
btw), and a Javascript macro expander which you can use to add 
stuff like foreach to that language. Also has HTML sanitization 
based on a full parser and whitelist.

htmltotext.d - converts html to plain text so you can display it 
in a terminal or an email, etc.

http.d - my old standalone http client. Does NOT depend on curl. 
I'm in the process of replacing it with http2.d, which has a more 
flexible, asynchronous api (still dependency free, though I have 
to add OpenSSL and SChannel support for SSL soon). http2 provides 
an object that kinda works like a browser -it can understand 
relative links, maintain cookies, etc.

joystick.d - code for accessing XBox 360 controllers (and similar 
ones, like the PS1 controller via usb) on Windows and Linux.

jsvar.d - a var type similar to Javascript, usable in D. Can be 
used to read and write JSON with a natural syntax and other 
dynamic type tasks.

mangle.d - mangles a D name

minigui.d - small, dependency-free (except for simpledisplay.d 
and color.d but doesn't even need Phobos) widget set, using Win32 
native widgets where possible, custom Xlib based ones otherwise. 
Still work in progress but already works for some basic forms.

oauth.d - OAuth library for client and server. I've used it with 
Twitter, Linked In, AWeber, Facebook, and more. Has specific 
functions for the Facebook Graph API, tweeting, serving oauth 1.0 
requests, and doing the OAuth authorization flow. Depends on the 
mhash C library.

querygenerator.d - a user-contributed module for sql query 
generation

rpc.d - a remote procedure call library for D, making interfaces 
available across the network. You might prefer the apache thrift 
bindings or something, this is a custom job that I haven't 
seriously used.

script.d - a script interpeter based on jsvar.d. The script 
language is like a cross of D and Javascript. Made for API 
convenience - very very easy to embed in an application.

sha.d - implementation of SHA1 and SHA2 in pure D (well and some 
inline asm).

simpleaudio.d - access to WinMM on Windows and ALSA on Linux for 
waveform sound I/O and MIDI I/O.

simpledisplay.d - dependency-free base windowing library. Allows 
drawing, input, and other basic functionality. Also allows OpenGL 
access.

sslsocket.d - Uses OpenSSL to inherit from std.socket.Socket and 
give client SSL support.

stb_truetype.d - port of C library for writing ttf fonts to 
images. Has some convenience functions (but they aren't great, 
works, but not great)

terminal.d - I/O support for the text console. Does real time 
input, cellular output, getting lines with user editing, 
coloring, mouse input, and more.

xwindows.d - functions for working with X, beyond what 
simpledisplay.d offers. Stuff like interacting with the window 
manager, getting window icons, etc. I wrote it to support my D 
xlib taskbar.

web.d - wraps a D class in an HTTP api, with automatic url 
routing, view generation, argument conversion, and much more. 
Also includes a HTML templating system among other stuff that 
brings a lot of these modules together.



There's a few other hidden gems in the files themselves, and so 
much more on my pipeline. Among the ones you might see added in 
the next month:

game.d - helper functions for writing games (bringing together 
the display, audio, and joystick stuff). I have OpenGL texture 
stuff written now, almost done with the high level input api, and 
some math stuff that will probably be in there.

model.d - loading and displaying a 3d model format with open gl.

midi.d, wav.d - loading, saving, and working with midi and wav 
files


(Yes, I'm writing a pair of D games again, finally! First time in 
a long time, but it is moving along well... and I don't need SDL 
this time!)


More information about the Digitalmars-d mailing list