imported>3LD3R4N3 Sem resumo de edição |
imported>Ricvelozo Sem resumo de edição |
||
(109 revisões intermediárias por 60 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
{{Info/Linguagem de computador | |||
|nome = D | |||
|logotipo = [[Ficheiro:D Programming Language logo.svg]] | |||
|paradigma = | |||
* [[Orientação a objetos|orientada a objetos]] | |||
* [[Programação imperativa|imperativa]] | |||
* [[Programação genérica|genérica]] | |||
|ano = {{ani|1999}} | |||
|ultima_versao = 2.098.0 | |||
|ultima_data = {{Data de lançamento|2021|10|10}}<ref>{{citar web |url=https://dlang.org/changelog/2.098.0.html |título=Change Log: 2.098.0 |autor=Michael Parker |website=dlang.org |língua=inglês |data=10 de outubro de 2021 |acessodata=16 de outubro de 2021}}</ref> | |||
|versao_beta = | |||
|beta_data = | |||
|criador = | |||
* [[Walter Bright]] | |||
* [[Andrei Alexandrescu]]<ref>{{citar web |url=http://www.wired.com/2014/07/d-programming-language/ |título=The Next Big Programming Language You’ve Never Heard Of |acessodata= |autor=Cade Metz |data=7 de julho de 2014 |obra=[[Wired]] |publicado=[[Condé Nast Publications]] |língua=inglês}}</ref> | |||
|tipagem = | |||
* forte | |||
* estática | |||
|compiladores = | |||
* DMD<ref name="dmd">{{citar web |url=https://wiki.dlang.org/DMD |título=DMD - D |website=wiki.dlang.org |língua=inglês |data=25 de janeiro de 2018 |acessodata=16 de outubro de 2021}}</ref> | |||
* [[GNU Compiler Collection|GDC]]<ref name="gdc">{{citar web |url=https://wiki.dlang.org/GDC |título=GDC - D |website=wiki.dlang.org |língua=inglês |data=23 de agosto de 2021 |acessodata=16 de outubro de 2021}}</ref><ref name="gcc">{{citar web |url=https://gcc.gnu.org/frontends.html |título=GCC Front Ends |website=gcc.gnu.org |língua=inglês |data=28 de julho de 2021 |acessodata=16 de outubro de 2021}}</ref> | |||
* LDC ([[LLVM]])<ref name="llvm">{{citar web |url=https://wiki.dlang.org/LDC |título=LDC - D |website=wiki.dlang.org |língua=inglês |data=26 de setembro de 2021 |acessodata=16 de outubro de 2021}}</ref> | |||
|dialetos = | |||
|influenciada_por = | |||
* [[C (linguagem de programação)|C]] | |||
* [[C++]] | |||
* [[C Sharp|C#]] | |||
* [[Java (linguagem de programação)|Java]] | |||
|influenciou = | |||
|extensão = .d | |||
|website = {{URL|https://dlang.org/}} | |||
}} | |||
'''D''' é uma [[linguagem de programação]] de uso geral projetada por [[Walter Bright]] da [[Digital Mars]]. É baseada majoritariamente em [[C++]], apesar de não ser apenas uma variante. A versão estável da primeira especificação (v1.0) foi lançada em janeiro de [[2007]]. O código D nativo é geralmente tão rápido quanto o código C ++ equivalente, embora seja mais curto e economize memória . | |||
==Histórico== | == Histórico == | ||
A linguagem D foi criada por [[Walter Bright]], desenvolvedor de [[compilador | A linguagem D foi criada por [[Walter Bright]], desenvolvedor de [[compilador]]es para as linguagens [[C (linguagem de programação)|C]] e [[C++]] e fundador da [[Digital Mars]]. Ela foi concebida em dezembro de [[1999]] para ser uma sucessora das linguagens C e C++. | ||
É uma linguagem de programação de sistemas, focada em combinar o alto desempenho das linguagens C e C++ com a produtividade de outras linguagens modernas, tais como Ruby e Python. | |||
==Características== | == Características == | ||
A linguagem D apresenta, dentre outras | A linguagem D apresenta, dentre outras características: | ||
* Fortemente tipada estaticamente; | |||
* Compilada para código nativo; | |||
* Multiparadigma: suporta os estilos imperativo, orientado a objetos e multiprogramação de template; | |||
* Projetada para a [[orientação a objetos]] e [[programação genérica]]; | |||
* Pertencente à família com sintaxe semelhante à Linguagem C, com aparência próxima à Linguagem C++ (Compatibilidade com [[código objeto|códigos objeto]] C); | |||
* Arranjos dinâmicos e associativos; | |||
* Presença de [[Coletor de lixo (informática)|coletor de lixo]]; | |||
* ''[[inline Assembler]]''. | |||
== | == Principais metas de D == | ||
* Reduzir os custos de desenvolvimento de software em ao menos 10% com adição de produtividade comprovada, realçando características e ajustando características da linguagem de modo que erros comuns e bugs, que consomem tempo, sejam eliminados; | |||
* Torná-la fácil para escrever código que seja portável de compilador para compilador, máquina para máquina, e sistema operacional para sistema operacional; | |||
* Suportar multi-paradigmas de programação, isto é, com um mínimo de suporte a paradigmas imperativos, estruturados, orientados a objetos, e programação genérica; | |||
* Ter uma curta linha de aprendizagem para programadores acostumados com programação em C ou C++; | |||
* Tornar D substancialmente mais fácil para implementar um compilador próprio que C++; | |||
* Ser compatível com as APIs C locais; | |||
* Ter uma gramática livre de contexto; | |||
* Incorporar metodologia de Programação de Contrato e teste de unidade; | |||
* Ser capaz de construir programas leves por si próprio; | |||
* Reduzir os custos da criação de documentação. | |||
===Olá Mundo=== | == Exemplos de Códigos == | ||
< | === Olá Mundo === | ||
import std. | {{Artigo principal|Programa Olá Mundo}} | ||
<syntaxhighlight lang="D"> | |||
import std.stdio; | |||
void main() | |||
{ | |||
writefln("Olá, Mundo!"); | |||
} | |||
</syntaxhighlight> | |||
ou, equivalente: | |||
<syntaxhighlight lang="D"> | |||
import core.stdc.stdio; | |||
void main() | |||
{ | |||
printf("Olá, Mundo!\n"); | |||
} | |||
</syntaxhighlight> | |||
=== N-Primeiros Números Perfeitos === | |||
<syntaxhighlight lang="D"> | |||
/* | |||
Para compilar: | |||
rdmd NumerosPerfeitos.d | |||
* / | |||
import core.stdc.stdio; | |||
void main(char[][] args) | |||
{ | { | ||
int n; // n primeiros números perfeitos | |||
int num = 0; | |||
int soma; | |||
int contador = 0; | |||
printf( "Entre com o valor de 'N': "); | |||
scanf("%d", &n); | |||
printf( "\nOs N primeiros numeros perfeitos sao:\n"); | |||
do | |||
{ | |||
num += 1; | |||
soma = 0; | |||
for ( int i=1; i <= num-1 ; i++ ) | |||
{ | |||
if( (num % i) == 0 ) | |||
{ | |||
soma += i; | |||
} | |||
} | |||
if ( soma == num ) | |||
{ | |||
printf("%d\n", soma); | |||
contador += 1; | |||
} | |||
}while (contador != n); | |||
} | } | ||
===Classes=== | /* | ||
< | NÚMEROS PERFEITOS | ||
- Um número se diz perfeito se é igual a soma de seus divisores próprios. | |||
- Divisores próprios de um número positivo N são todos os divisores inteiros positivos de N exceto o próprio N.'); | |||
- Por exemplo, o número 6, seus divisores próprios são 1, 2 e 3, cuja soma = 6 (1 + 2 + 3 = 6); | |||
Outro exemplo é o número 28, cujos divisores próprios são 1, 2, 4, 7 e 14, e a soma dos seus divisores próprios | |||
é 28 (1 + 2 + 4 + 7 + 14 = 28) | |||
* / | |||
</syntaxhighlight> | |||
=== Classes === | |||
<syntaxhighlight lang="D"> | |||
class A | class A | ||
{ | { | ||
public this() //Construtor | |||
{ | |||
x = 10.0 + 7i; | |||
} | |||
private cfloat x; //número complexo | |||
} | } | ||
class B : A | class B : A | ||
{ | { | ||
public this() | |||
{ | |||
super(); //Chama o construtor da classe pai | |||
} | |||
} | } | ||
</ | </syntaxhighlight> | ||
===Arrays=== | === Arrays === | ||
< | <syntaxhighlight lang="D"> | ||
//Arranjos dinâmicos: | |||
int[] a; | int[] a; | ||
a.length = 10; //comprimento igual a 10 posições | a.length = 10; //comprimento igual a 10 posições | ||
a = 50; //a[0], a[1] ... a[9] = 50 | a = 50; //a[0], a[1] ... a[9]= 50 | ||
a ~= 48; //adiciona uma posição ao array e atribui 48 a ela | a ~= 48; //adiciona uma posição ao array e atribui 48 a ela | ||
Linha 53: | Linha 167: | ||
for(int i=0; i<30; i++) | for(int i=0; i<30; i++) | ||
{ | { | ||
b ~= i; | |||
} | } | ||
int[] c; | int[] c; | ||
c = b[1..10]; //c[0] = b[1], c[1] = b[2] ... c[8] = b[9] | c = b[1..10]; //c[0]= b[1], c[1] =b[2] ... c[8]= b[9] | ||
int[] d; | int[] d; | ||
Linha 63: | Linha 177: | ||
int* p = b.ptr; //p aponta para o primeiro elemento de b | int* p = b.ptr; //p aponta para o primeiro elemento de b | ||
for(int i=0; i<b.length; i++) | for(int i = 0; i < b.length; i++) | ||
printf("%d\n", *(p+i)); | |||
c.sort; //ordena o vetor c | c.sort; //ordena o vetor c | ||
</ | </syntaxhighlight> | ||
< | <syntaxhighlight lang="D"> | ||
//Arranjos associativos: | |||
int[char[]] a; //array associativo | int[char[]] a; //array associativo | ||
a["hello"] = 4; | a["hello"] = 4; | ||
Linha 81: | Linha 196: | ||
if(p != null) //encontrou o índice | if(p != null) //encontrou o índice | ||
{ | { | ||
printf("%d\n", *p); | |||
} | } | ||
a.remove("oi"); //remove a chave "oi" | a.remove("oi"); //remove a chave "oi" | ||
</ | </syntaxhighlight> | ||
< | <syntaxhighlight lang="D"> | ||
uint toHash(char[] str) | uint toHash(char[] str) | ||
{ | { | ||
uint hash; | |||
foreach (char c; str) | |||
hash = (hash * 9) + c; | |||
return hash; | |||
} | } | ||
</ | </syntaxhighlight> | ||
é o mesmo que | é o mesmo que | ||
< | |||
<syntaxhighlight lang="D"> | |||
uint toHash(char[] str) | uint toHash(char[] str) | ||
{ | { | ||
uint hash; | |||
for(int i=0; i<str.length; i++) | |||
{ | |||
char c = str[i]; | |||
hash = (hash * 9) + c; | |||
} | |||
return hash; | |||
} | } | ||
</ | </syntaxhighlight> | ||
== | == Ver também == | ||
* [ | * [[C (linguagem de programação)]] | ||
* [ | * [[C++]] | ||
* | * [[C Sharp|C#]] | ||
* | * [[Java (linguagem de programação)]] | ||
* | |||
* | {{Referências}} | ||
* | |||
== Ligações externas == | |||
* | * {{Oficial|https://dlang.org/|en}} | ||
* {{Link|en|2=http://www.walterbright.com/|3=Página de Walter Bright}} | |||
* {{Link|en|2=http://www.dsource.org/|3=Repositório de programas e projetos escritos em D}} | |||
* {{Link|en|2=http://dui.sourceforge.net/index.html|3=''Toolkit'' gráfico para a linguagem baseado no GTK+}} | |||
* {{Link|en|2=http://www.dprogramming.com/|3=Tutoriais e arquivos de referência para a linguagem}} | |||
* {{Link|en|2=http://dlang.org/comparison.html|3=Comparação de D com C, C++, C# e Java}} | |||
{{Linguagens de programação}} | {{Linguagens de programação}} | ||
[[Categoria:Linguagens de programação]] | [[Categoria:Linguagens de programação]] | ||
[[Categoria:Linguagens de programação orientadas a objetos]] | |||
[[de | [[Categoria:Linguagens de programação baseadas em classes]] | ||
[[ | |||
Edição atual tal como às 15h49min de 16 de outubro de 2021
Predefinição:Info/Linguagem de computador D é uma linguagem de programação de uso geral projetada por Walter Bright da Digital Mars. É baseada majoritariamente em C++, apesar de não ser apenas uma variante. A versão estável da primeira especificação (v1.0) foi lançada em janeiro de 2007. O código D nativo é geralmente tão rápido quanto o código C ++ equivalente, embora seja mais curto e economize memória .
Histórico
A linguagem D foi criada por Walter Bright, desenvolvedor de compiladores para as linguagens C e C++ e fundador da Digital Mars. Ela foi concebida em dezembro de 1999 para ser uma sucessora das linguagens C e C++.
É uma linguagem de programação de sistemas, focada em combinar o alto desempenho das linguagens C e C++ com a produtividade de outras linguagens modernas, tais como Ruby e Python.
Características
A linguagem D apresenta, dentre outras características:
- Fortemente tipada estaticamente;
- Compilada para código nativo;
- Multiparadigma: suporta os estilos imperativo, orientado a objetos e multiprogramação de template;
- Projetada para a orientação a objetos e programação genérica;
- Pertencente à família com sintaxe semelhante à Linguagem C, com aparência próxima à Linguagem C++ (Compatibilidade com códigos objeto C);
- Arranjos dinâmicos e associativos;
- Presença de coletor de lixo;
- inline Assembler.
Principais metas de D
- Reduzir os custos de desenvolvimento de software em ao menos 10% com adição de produtividade comprovada, realçando características e ajustando características da linguagem de modo que erros comuns e bugs, que consomem tempo, sejam eliminados;
- Torná-la fácil para escrever código que seja portável de compilador para compilador, máquina para máquina, e sistema operacional para sistema operacional;
- Suportar multi-paradigmas de programação, isto é, com um mínimo de suporte a paradigmas imperativos, estruturados, orientados a objetos, e programação genérica;
- Ter uma curta linha de aprendizagem para programadores acostumados com programação em C ou C++;
- Tornar D substancialmente mais fácil para implementar um compilador próprio que C++;
- Ser compatível com as APIs C locais;
- Ter uma gramática livre de contexto;
- Incorporar metodologia de Programação de Contrato e teste de unidade;
- Ser capaz de construir programas leves por si próprio;
- Reduzir os custos da criação de documentação.
Exemplos de Códigos
Olá Mundo
import std.stdio;
void main()
{
writefln("Olá, Mundo!");
}
ou, equivalente:
import core.stdc.stdio;
void main()
{
printf("Olá, Mundo!\n");
}
N-Primeiros Números Perfeitos
/*
Para compilar:
rdmd NumerosPerfeitos.d
* /
import core.stdc.stdio;
void main(char[][] args)
{
int n; // n primeiros números perfeitos
int num = 0;
int soma;
int contador = 0;
printf( "Entre com o valor de 'N': ");
scanf("%d", &n);
printf( "\nOs N primeiros numeros perfeitos sao:\n");
do
{
num += 1;
soma = 0;
for ( int i=1; i <= num-1 ; i++ )
{
if( (num % i) == 0 )
{
soma += i;
}
}
if ( soma == num )
{
printf("%d\n", soma);
contador += 1;
}
}while (contador != n);
}
/*
NÚMEROS PERFEITOS
- Um número se diz perfeito se é igual a soma de seus divisores próprios.
- Divisores próprios de um número positivo N são todos os divisores inteiros positivos de N exceto o próprio N.');
- Por exemplo, o número 6, seus divisores próprios são 1, 2 e 3, cuja soma = 6 (1 + 2 + 3 = 6);
Outro exemplo é o número 28, cujos divisores próprios são 1, 2, 4, 7 e 14, e a soma dos seus divisores próprios
é 28 (1 + 2 + 4 + 7 + 14 = 28)
* /
Classes
class A
{
public this() //Construtor
{
x = 10.0 + 7i;
}
private cfloat x; //número complexo
}
class B : A
{
public this()
{
super(); //Chama o construtor da classe pai
}
}
Arrays
//Arranjos dinâmicos:
int[] a;
a.length = 10; //comprimento igual a 10 posições
a = 50; //a[0], a[1] ... a[9]= 50
a ~= 48; //adiciona uma posição ao array e atribui 48 a ela
int[] b;
for(int i=0; i<30; i++)
{
b ~= i;
}
int[] c;
c = b[1..10]; //c[0]= b[1], c[1] =b[2] ... c[8]= b[9]
int[] d;
d = a ~ c; // d[0]=a[0],d[1]=a[1]...,d[10]=a[10],d[11]=c[0]... d[19]=c[8]
int* p = b.ptr; //p aponta para o primeiro elemento de b
for(int i = 0; i < b.length; i++)
printf("%d\n", *(p+i));
c.sort; //ordena o vetor c
//Arranjos associativos:
int[char[]] a; //array associativo
a["hello"] = 4;
a["tchau"] = 10;
a["oi"] = 50;
a["nome"] = 70;
int* p;
p = ("tchau" in a); //p aponta para uma chave de índice "tchau" e se ela
//não existir, p será igual a null
if(p != null) //encontrou o índice
{
printf("%d\n", *p);
}
a.remove("oi"); //remove a chave "oi"
uint toHash(char[] str)
{
uint hash;
foreach (char c; str)
hash = (hash * 9) + c;
return hash;
}
é o mesmo que
uint toHash(char[] str)
{
uint hash;
for(int i=0; i<str.length; i++)
{
char c = str[i];
hash = (hash * 9) + c;
}
return hash;
}
Ver também
Referências
Ligações externas
- Sítio oficial (em inglês)
- «Página de Walter Bright» (em English)
- «Repositório de programas e projetos escritos em D» (em English)
- «Toolkit gráfico para a linguagem baseado no GTK+» (em English)
- «Tutoriais e arquivos de referência para a linguagem» (em English)
- «Comparação de D com C, C++, C# e Java» (em English)