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