UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

126 lines (80 loc) 5.04 kB
From [Wikipedia:D (programming language)](https://en.wikipedia.org/wiki/D_(programming_language) "wikipedia:D (programming language)"): "The D programming language, also known simply as D, is an object-oriented, imperative, multi-paradigm system programming language by Walter Bright of Digital Mars. It originated as a re-engineering of C++, but even though it is predominantly influenced by that language, it is not a variant of it. D has redesigned some C++ features and has been influenced by concepts used in other programming languages, such as Java, C#, and Eiffel". ## Contents * [1 Installation](#Installation) * [2 Testing the installation](#Testing_the_installation) * [3 Considerations](#Considerations) * [4 hardening-wrapper](#hardening-wrapper) * [5 Useful libraries and bindings](#Useful_libraries_and_bindings) * [6 See Also](#See_Also) ## Installation To program in D you will need two things - a D compiler and a library. Easiest way to get started fast is to install [dlang-dmd](https://www.archlinux.org/groups/x86_64/dlang-dmd/) package group. It will provide the official compiler ([dmd](https://www.archlinux.org/packages/?name=dmd)), standard lbrary [libphobos-devel](https://www.archlinux.org/packages/?name=libphobos-devel) and collection of small development tools [dtools](https://www.archlinux.org/packages/?name=dtools). ## Testing the installation To make sure that everything is installed and set up correctly, a simple Hello World program should suffice. ``` import std.stdio; void main() { string yourName = "archer"; writefln("Hello %s!", yourName); } ``` Paste the code into a file, name it hello.d, and run ``` $ dmd hello.d ``` in the same directory as the file. You should then be able to execute the program with: ``` $ ./hello ``` You can also execute ``` $ dmd -run hello.d ``` which will simply compile and run without leaving any object files in the directory. ## Considerations There are however possible choices regarding the compiler you choose. The standard (reference one) is dmd, but [gdc](https://aur.archlinux.org/packages/gdc/) (GNU D Compiler) and [ldc](https://www.archlinux.org/packages/?name=ldc) (LLVM D Compiler) are also popular. Those are also in [community]. The main difference is that the dmd's back end is not FOSS (licensed from Symantec), while the others compilers are completely FOSS. All 3 compilers share same front-end code and thus have almost identical support for language features (assuming same front-end version). ## hardening-wrapper In Arch Linux [dmd](https://www.archlinux.org/packages/?name=dmd) and [libphobos](https://www.archlinux.org/packages/?name=libphobos) packages are built without PIC support. Using [hardening-wrapper](https://www.archlinux.org/packages/?name=hardening-wrapper) forces building executables with PIC support which results in: ``` dmd app.d /usr/bin/ld: app.o: relocation R_X86_64_32 against `__dmd_personality_v0' can not be used when making a shared object; recompile with -fPIC app.o: error adding symbols: Bad value collect2: error: ld returned 1 exit status --- errorlevel 1 ``` There are few possible workarounds: * uninstall [hardening-wrapper](https://www.archlinux.org/packages/?name=hardening-wrapper) * use [gdc](https://aur.archlinux.org/packages/gdc/) compiler which is compiled with PIC support ``` gdc app.d ``` or for [dub](https://aur.archlinux.org/packages/dub/) ``` dub --compiler=gdc ``` * recompile [dmd](https://www.archlinux.org/packages/?name=dmd) and [libphobos](https://www.archlinux.org/packages/?name=libphobos) with -fPIC flags using [abs](/index.php/Abs "Abs") or manually * use clang linker ``` CC=/usr/bin/clang dmd app.d ``` if using dub ``` CC=/usr/bin/clang dub ``` more information * [https://issues.dlang.org/show_bug.cgi?id=15054](https://issues.dlang.org/show_bug.cgi?id=15054) * [FS#34983](https://bugs.archlinux.org/task/34983) * [FS#46260](https://bugs.archlinux.org/task/46260) * [http://wiki.dlang.org/Installing_LDC_on_Gentoo#Hardened_Gentoo](http://wiki.dlang.org/Installing_LDC_on_Gentoo#Hardened_Gentoo) ## Useful libraries and bindings * [DDT](https://code.google.com/p/ddt/) - Eclipse plugin for project and code management in D * [Mono-D](http://mono-d.alexanderbothe.com/) - [MonoDevelop](http://monodevelop.com/) addin for programming in D * [QtD](https://bitbucket.org/qtd/repo) - Qt bindings for D * [GtkD](http://gtkd.org/) - An object oriented GTK+ wrapper for D * [Derelict](https://github.com/aldacron/Derelict3) - Bindings for multimedia libraries, focused toward game development * [Deimos](https://github.com/D-Programming-Deimos) - A project that houses a lot of bindings to different C libraries ## See Also * [Phobos source on github](https://github.com/D-Programming-Language/phobos/) - The official Phobos repo * [The D Programming Language](http://dlang.org/) - The official home of D * [Planet D](http://planet.dsource.org/) - A collection of blogs about D