Skip to content

Commit

Permalink
areas-of-d-usage: Proofread text
Browse files Browse the repository at this point in the history
  • Loading branch information
CyberShadow committed Jun 17, 2016
1 parent 100af25 commit bd8bcc4
Showing 1 changed file with 78 additions and 79 deletions.
157 changes: 78 additions & 79 deletions areas-of-d-usage.dd
Expand Up @@ -37,7 +37,7 @@ $(DIVC start-icons,

$(DIV,
$(P This list highlights a selection of applications written in D from various areas.
For an overview of of D's differentiating features, have a look at the
For an overview of D's differentiating features, have a look at the
$(LINK2 $(ROOT_DIR)overview.html, D Overview page).
)

Expand All @@ -49,75 +49,78 @@ $(SECTION2 $(LNAME2 industry, Industry), $(SECTION_FA_ICON building)

$(DIVC area-section2,
$(P
Companies usually have codebases that are far larger than regular
hobby projects, hence one of their major aims is to write elegant code
that is easy to understand and hence to maintain. In comparison to other languages
like Java and C++, D has many features that help to keep a codebase clean and
boilerplate-free - thus allowing one to be $(LINK2 $(ROOT_DIR)overview.html#productivity, productive).
For example have a look at D's simple and yet powerful
Companies usually have codebases that are considerably larger than most
hobbyist projects, thus an important goal is to write elegant code
that is easy to understand, and therefore maintain. In comparison to other languages,
D has many features that help keep a codebase clean and
boilerplate-free - thus increasing $(LINK2 $(ROOT_DIR)overview.html#productivity, productivity).
Some examples of simple and yet powerful D features are
$(LINK2 https://dlang.org/spec/template.html, templates)
or at D's $(LINK2 https://en.wikipedia.org/wiki/Uniform_Function_Call_Syntax, Uniform
Function Call Syntax) that allows any function to be called using the syntax
for method calls.
and $(LINK2 https://en.wikipedia.org/wiki/Uniform_Function_Call_Syntax, Uniform
Function Call Syntax).
)

$(P Moreover $(LINK2 https://dlang.org/spec/function.html#pure-functions, pure functions),
$(P $(LINK2 https://dlang.org/spec/function.html#pure-functions, Pure functions),
the memory-safe subset $(LINK2 $(ROOT_DIR)safed.html, SafeD),
$(LINK2 $(ROOT_DIR)spec/unittest.html, special unittest blocks),
$(LINK2 $(ROOT_DIR)spec/contracts.html, contracts) and a sane approach to
$(LINK2 $(ROOT_DIR)spec/errors.html, error handling) help
shipping a bug-free program.
$(LINK2 $(ROOT_DIR)spec/errors.html, error handling) aid in
shipping a bug-free product.
If at the end of the day $(LINK2 $(ROOT_DIR)overview.html#performance, performance)
matters $(MDASH) D has you covered!
You can tune your program with various tools starting from
You can tune your code with tools starting from
$(LINK2 https://dlang.org/spec/version.html, conditional compilation) over
$(LINK2 https://dlang.org/spec/simd.html, SIMD vector optimizations) to
to $(LINK2 https://dlang.org/spec/iasm.html, Inline Assembler) and many more.
$(LINK2 https://dlang.org/spec/iasm.html, inline assembler),
and $(LINK2 https://wiki.dlang.org/Development_tools#Profiling, many more).
)
$(P D has been used in many, diverse domains. A short selection will be presented below.
For a full overview you can browse the list of reported
$(LINK2 $(ROOT_DIR)orgs-using-d.html, organizations which use the D Language).
$(P D has been used in numerous diverse domains. A short selection is presented below.
For a complete overview, see the list of
$(LINK2 $(ROOT_DIR)orgs-using-d.html, organizations using the D Language).
)
)

$(AREA_SECTION3 $(LNAME2 games, Games), $(ARTICLE_FA_ICON gamepad),

Binary compatibility to existing libraries is important in large-scale
Binary compatibility with existing libraries is important in large-scale
projects.
Remedy Entertainment has successfully shipped the first $(HTTP www.quantumbreak.com,
AAA game) to use D code for XBox One and Windows 10.
For more details see Ethan Watson's
For more details, see Ethan Watson's
$(HTTP dconf.org/2016/talks/watson.html, presentation).

There exist many pure D open source projects that show the rising popularity
Many pure-D open source projects show the rising popularity
of D among game developers.
For example have a look at the cross-platform 3D game engine
$(HTTP dash.circularstudios.com, Dash) or at the D game development toolkit
Examples are the cross-platform 3D game engine
$(HTTP dash.circularstudios.com, Dash) and the D game development toolkit
$(HTTPS github.com/d-gamedev-team/gfm, gfm).
)

$(AREA_SECTION3 $(LNAME2 web, Web applications), $(ARTICLE_FA_ICON cloud),

D's ability to combine low and high-level code in one language, asynchronous
features like Fibers and compile-time function execution makes it well suited
for high-performance asynchronous I/O, concurrency and web applications like
$(HTTPS github.com/rejectedsoftware/vibe.d, vibe.d).

As an example, have a look at this talk about a
$(HTTPS www.youtube.com/watch?v=_gCFpHxAJRc, mobile game server backend in D)
features like Fibers, and compile-time function execution, makes it well suited
for high-performance asynchronous I/O, concurrency and web applications.
The $(HTTPS github.com/rejectedsoftware/vibe.d, vibe.d) framework is D's
flagship solution for all needs pertaining to networking and asynchronous
event handling.

For an example success story, see the DConf presentation
$(HTTPS www.youtube.com/watch?v=_gCFpHxAJRc, Mobile Game Server Backend in D).
)

$(AREA_SECTION3 $(LNAME2 gui, GUI Applications), $(ARTICLE_FA_ICON desktop),

D's high productivity is also beneficial when creating GUI applications.

For example a popular application under Linux is the tiling terminal emulator
Some examples are the Linux tiling terminal emulator
$(HTTP github.com/gnunn1/terminix, terminix),
another good example is the D development environment
$(HTTPS github.com/buggins/dlangide, DLangIDE) which is based
the D development environment
$(HTTPS github.com/buggins/dlangide, DLangIDE), which is itself based
on the cross-platform D library $(HTTPS github.com/buggins/dlangui, dlangui).

Due to binary compatibility all existing GUI libraries can still be
Thanks to binary compatibility, all existing GUI libraries written in C, C++,
and other languages can be
$(HTTPS wiki.dlang.org/GUI_Libraries, easily accessed).

))
Expand All @@ -126,10 +129,10 @@ $(SECTION2 $(LNAME2 system-programming, Systems Programming),

$(AREA_SECTION3 $(LNAME2 compilers, Compilers), $(ARTICLE_FA_ICON code),

$(P D has been used to write the D reference compiler dmd itself, Facebook's fast C/C++ preprocessor
$(P D is used in the reference DMD compiler itself, Facebook's fast C/C++ preprocessor
$(HTTPS github.com/facebookarchive/warp, warp), the $(HTTPS github.com/higgsjs/Higgs,
Higgs Javascript Virtual Machine) and many more.
Moreover D's compile time function execution allows to generate custom grammar parsers
Higgs JavaScript Virtual Machine), and more.
D's compile time function execution allows generating custom grammar parsers
at compile time - see e.g. $(HTTPS github.com/PhilippeSigaud/Pegged, Pegged)
as an example.
)
Expand All @@ -138,9 +141,9 @@ $(AREA_SECTION3 $(LNAME2 compilers, Compilers), $(ARTICLE_FA_ICON code),
$(AREA_SECTION3 $(LNAME2 operating_systems, Operating systems), $(ARTICLE_FA_ICON linux),

$(DIV,
D is a systems programming language and well suited for bare metal
or kernel development. It's easy to write an Operating System in D and many
project have proven so $(COMMA) to name a few:
D is a systems programming language and is well suited for bare metal
or kernel development. It's easy to write an Operating System in D, and many
project have proven so. To name a few:

$(UL
$(LI $(HTTPS github.com/xomboverlord/xomb/tree/unborn, XOmB) - Exokernel operating system)
Expand All @@ -152,40 +155,39 @@ $(AREA_SECTION3 $(LNAME2 operating_systems, Operating systems), $(ARTICLE_FA_ICO

$(AREA_SECTION3 $(LNAME2 embedded, Embedded applications), $(ARTICLE_FA_ICON gears),

Using $(HTTPS github.com/ldc-developers/ldc, LDC) (with LLVM as backend)
enables one to target many CPU architectures,
ranging from ARM and MIPS-based embedded systems and smartphones
over server systems based on POWER and Sparc up to the "big iron" z System.
Using $(HTTPS github.com/ldc-developers/ldc, LDC) (the LLVM D compiler)
enables targeting most popular CPU architectures,
starting from ARM and MIPS-based embedded systems and smartphones,
ranging to server systems based on POWER and Sparc, and up to the "big iron" z Systems.

))

$(SECTION2 $(LNAME2 cutting-edge, Cutting-edge research), $(SECTION_FA_ICON space-shuttle)

$(DIVC area-section2,
D is similar to popular scientific languages like Python as it provides
the conveniences of a modern language with a friendly syntax and is
garbage collected by default, allowing you to worry about writing your program,
rather than handling memory issues that few scientific programmers need to worry about.
However it is is a compiled, statically typed language that can produce code as fast as C,
allows to easily parallelize your algorithm and pipelines,
and as a system language it gives complete control (including manual memory management)
if you need to squeeze the last few cycles out of your processor to make your program
even faster.

We now spotlight a few specific areas:
D is similar to popular scientific languages like Python, as it provides
the conveniences of a modern language with a friendly syntax, and is
garbage collected by default. Convenience features allow spending time on rapid prototyping,
rather than fighting memory issues that few scientific programmers need to worry about.
However, it is also a compiled, statically typed language that can produce code as fast as C,
allows easily parallelizing algorithms and pipelines,
and, as a system language, provides complete control (including manual memory management)
to get those last few extra cycles.

A few specific spotlight areas:
)

$(AREA_SECTION3 $(LNAME2 numerical, Numerical computing), $(ARTICLE_FA_ICON calculator),

Like NumPy, D is convenient and offers the ability to bind to existing C libraries.
Unlike NumPy, D does not become slow for computations not covered by preexisting libraries,
and does not force its user to escape into another language.
Additionally due to D's introspection at compile-time it enables
Additionally, due to its compile-time introspection capabilities, D enables
further optimizations for superior performance. See Andrei's talk
$(HTTPS www.youtube.com/watch?v=AxnotgLql0k, Fastware) on this topic.

D's standard library includes support for $(LINK2 $(ROOT_DIR)phobos/std_experimental_ndslice.html, multidimensional arrays)
with supplemental third-party libraries like $(HTTPS github.com/libmir/mir, mir).
D's standard library includes support for $(LINK2 $(ROOT_DIR)phobos/std_experimental_ndslice.html, multidimensional arrays),
with supplemental third-party libraries such as $(HTTPS github.com/libmir/mir, mir).
)

$(AREA_SECTION3 $(LNAME2 gpu, GPU Programming), $(ARTICLE_FA_ICON flash),
Expand All @@ -194,51 +196,48 @@ $(AREA_SECTION3 $(LNAME2 gpu, GPU Programming), $(ARTICLE_FA_ICON flash),
working with GPUs for general purpose computation can appear daunting and laborious.
Even seasoned users will admit that the performance improvements are often not worth the extra effort.

Thanks to the power the power of D’s type system and static introspection,
Thanks to the power of D’s type system and static introspection,
$(HTTP dconf.org/2016/talks/colvin.html, GPU Programming) is
safer and easier to use than traditional APIs with no compromise in performance.

)

$(AREA_SECTION3 $(LNAME2 data_science, Data science), $(ARTICLE_FA_ICON area-chart),

D's high-level abstraction and fast runtime make it well-suited for scientific
analysis. For example $(LINK2 http://ddili.org/ders/d.en/ranges.html, D's ranges)
D's high-level abstraction and fast execution make it well-suited for scientific
analysis. For example, $(LINK2 http://ddili.org/ders/d.en/ranges.html, D's ranges)
are a natural fit for pipes and data streams.
One can start from a small D script with a small subset to test
some analysis and easily switch to the full set by enabling optimizations
One can start from a small D script with a small subset of data for
an analysis, and easily switch to the full set by enabling optimizations
for superior performance.
Read Adroll's (Big data marketing company) testimonial
Read Adroll's testimonial
$(HTTP tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html, "D is for Data Science")
which explains why D is a keystone language for their critical infrastructure.
on why D is a keystone language for their critical infrastructure.
eBay recently open-sourced their internal $(HTTPS github.com/eBay/tsv-utils-dlang, data processing utilities)
that are used in their large-scale data mining environment.
used in their large-scale data mining environment.
))

$(SECTION2 $(LNAME2 academia, Academia),

$(AREA_SECTION3 $(LNAME2 teaching, Teaching), $(ARTICLE_FA_ICON graduation-cap),

$(P D's multi-paradigm (imperative, structured, object oriented, generic, functional programming
purity, and even assembly) approach allows to teach in one language and gradually
explain new features without needing to switch to a different language.
purity, and even assembly) approach allows teaching in one language and gradually
explaining new features without needing to switch to a different language.
)
$(P At universities Java is commonly taught because of its memory safety.
D has a memory-safe subset $(I $(LINK2 $(ROOT_DIR)/safed.html, SafeD))
which safety and ease of use is comparable to Java while still being efficient.
Beginners will also highly profit from the Garbage Collection in D which helps
them to write simple code without any memory management knowledge.
However more sophisticated memory management can easily be done in an advanced
$(P At universities, Java is commonly taught because of its memory safety.
$(LINK2 $(ROOT_DIR)safed.html, SafeD), a memory-safe subset of D, provides
safety and ease of use comparable to Java while remaining efficient.
Beginners will also benefit from garbage collection, which helps
write simple code without requiring any knowledge of explicit memory management.
$(LINK2 $(ROOT_DIR)phobos/std_experimental_allocator.html, More sophisticated memory management) can be introduced in an advanced
learning stage.
)
$(P Moreover D's blazingly fast runtime allows it to be used as a high level,
$(P D's blazingly fast compilation allows it to be used as a high level,
productive scripting language - just like Python, but with the
advantage of getting $(I static) type checking.

This also means instead of using a toy language, students can use a real language
that provides all the advantages of multiple languages and enjoy playing with it.
advantages $(I static) type checking.
)
$(P Last but not least there are $(LINK2 http://ddili.org/ders/d.en/index.html,
$(P Last but not least, there are $(LINK2 http://ddili.org/ders/d.en/index.html,
books) and $(LINK2 http://tour.dlang.org/, tutorials) freely available online
which can be used as resources.
)
Expand Down

0 comments on commit bd8bcc4

Please sign in to comment.