· Visão Geral
· D para Win32 · Win32 DLLs em D · C .h para Módulos D · FAQ · Guia de Estilo · Exemplo: wc · Futuro · D Change Log · Questões Técnicas · Razão · Advertências Artigos · Segurança de Exceções · Gabaritos Revisados Ferramentas · Compilador DMD · Compilador GDC · Linker · Profiler · Code Coverage · DMD Script Shell · Depurador Windows Comunidade · Novidades · Fórum · Anúncios · Aprenda · D links Arquivos · digitalmars.D · digitalmars.D.dtl · digitalmars.D.announce · digitalmars.D.dwt · digitalmars.D.learn · digitalmars.D.bugs · D.gnu · Antigo D Apêndices · Glossário · Tabela Ascii · Reconhecimentos |
RazãoQuestões sobre as razões de várias decisões de projeto para D que surgem freqüentemente. Isso dirige-se a muitas delas.Sobrecarga de OperadoresPor que não nomeá-los operator+(), operator*(), etc.?Esse é o modo como C++ faz isso, e apela para ser capaz de se referir a sobrecarregar '+' com 'operator+'. O problema é que as coisas não se ajustam totalmente. Por exemplo, há os operadores de comparação <, <=, >, e >=. Em C++, os quatro devem ser sobrecarregados para ter a cobertura completa. Em D, somente uma função cmp() deve ser definida, e os operadores de comparação são derivados dela pela análise semântica.Sobrecarregar operator/() também não provê nenhum modo sométrico, como uma função membro, para sobrecarregar a operação reversa. Por exemplo, class AA segunda sobrecarga faz a sobrecarga reversa, mas ela não pode ser virtual, assim tem uma assimetria confusa com a primeira sobrecarga. Por que não permitir funções de sobrecarga de operadores definida globalmente?
class A { }Deveria add() estar na classe A ou B? A solução estilistica óbvia seria colocá-la na classe do primeiro operando, class A Por que não permitir operadores definidos pelo usuário?Estes podem ser muito úteis para adicionar novas operações infixas para vários símbolos unicode. O problema é que em D, os tokens são supostos como sendo completamente independentes da análise semântica. Operadores definidos pelo usuário poderiam quebrar isso.Por que não permitir precedência de operadores definida pelo usuário?O problema é que isso afeta a análise sintática, e a análise sintática é suposta como sendo completamente independente da análise semântica em D.Por que não usar nomes de operadores como __add__ and __div__ ao invés de add, div, etc.?Palavras-chave com __ deveriam indicar uma extensão proprietária da linguagem, não uma parte básica da linguagem.Por que não ter sobrecarga de operadores binários sendo membros estáticos, assim ambos os argumentos são especificados, e não há qualquer questão sobre a operação reversa?Isso significa que sobrecarga de operador não pode ser virtual, e então provavelmente seria implementada como uma concha ao redor de outra função virtual para fazer o trabalho real. Isso ventará parecendo um entalhe feio. Secundariamente, a função cmp() já é uma sobrecarga de operador definida em Object, ela precisa ser virtual por várias razões, e torná-la assimetrica com outras sobrecargas de operador faz confusão desnecesária.PropriedadesPor que D tem propriedades como T.infinity na linguagem
núcleo para dar o infinito de um tipo de ponto flutuante, ao
invés de fazer isso em uma biblioteca como em C++:
std::numeric_limits
Vamos refomular a frase como "se há um modo de expressar isso na
linguagem existente, por que embutir isso na linguagem núcleo?"
A respeito de
T.infinity:
|