Converta C++ em Crystal usando IA

A tradução de código fonte para fonte de C++ usando IA envolve a utilização de técnicas de processamento de linguagem natural (PNL) e algoritmos de aprendizado de máquina para analisar e compreender o código-fonte

CoffeeScript

FAQ

Desafios de Tradução

Desafio Exemplo de Sintaxe C++ Exemplo de Sintaxe Crystal Pontuação (1-10)
Especialização de Template template<typename T> void func(T t); def func(T) (t : T) 7
Herança Múltipla class A {}; class B {}; class C : public A, public B {}; class A; class B; class C < A, B; 6
Sobrecarga de Operadores class Complex { public: Complex operator+(const Complex& other); }; struct Complex; def +(other : Complex) : Complex; 5
RAII (Aquisição de Recursos é Inicialização) std::unique_ptr<int> ptr(new int(10)); ptr = Pointer(Int32).new(10) 8
Diretivas de Pré-processador #define PI 3.14 PI = 3.14 (sem pré-processador) 9
Tratamento de Exceções try { throw std::runtime_error("Error"); } catch (const std::exception& e) {} begin; raise "Error"; rescue e; end 6
Sobrecarga de Funções void func(int); void func(double); def func(x : Int); def func(x : Float64); 4
Constexpr e Cálculo em Tempo de Compilação constexpr int square(int x) { return x * x; } def square(x : Int32) : Int32 = x * x 7

Especialização de Template

C++ permite a especialização de templates, que pode ser bastante complexa. Por exemplo:

template<typename T>
void func(T t) {
    // Implementação
}

Em Crystal, a sintaxe é mais simples, mas carece de alguns dos recursos avançados dos templates de C++:

def func(T)(t : T)
  # Implementação
end

Referência: Documentação de Templates C++

Herança Múltipla

C++ suporta herança múltipla, o que pode levar ao problema do diamante. Por exemplo:

class A {};
class B {};
class C : public A, public B {};

Em Crystal, a herança múltipla é tratada de forma diferente:

class A; end
class B; end
class C < A, B; end

Referência: Documentação de Herança C++

Sobrecarga de Operadores

C++ permite a sobrecarga de operadores, que pode ser bastante poderosa:

class Complex {
public:
    Complex operator+(const Complex& other) {
        // Implementação
    }
};

Em Crystal, a sobrecarga de operadores também é suportada, mas com uma sintaxe diferente:

struct Complex
  def +(other : Complex) : Complex
    # Implementação
  end
end

Referência: Documentação de Sobrecarga de Operadores C++

RAII (Aquisição de Recursos é Inicialização)

C++ utiliza RAII para gerenciamento de recursos:

std::unique_ptr<int> ptr(new int(10));

Em Crystal, o gerenciamento de memória é tratado de forma diferente, frequentemente usando ponteiros:

ptr = Pointer(Int32).new(10)

Referência: Documentação de RAII C++

Diretivas de Pré-processador

C++ utiliza extensivamente diretivas de pré-processador:

#define PI 3.14

Crystal não possui um pré-processador, então constantes são definidas de forma diferente:

PI = 3.14

Referência: Documentação de Pré-processador C++

Tratamento de Exceções

C++ utiliza blocos try-catch para tratamento de exceções:

try {
    throw std::runtime_error("Error");
} catch (const std::exception& e) {
    // Tratar exceção
}

Em Crystal, o tratamento de exceções é feito usando begin e rescue:

begin
  raise "Error"
rescue e
  # Tratar exceção
end

Referência: Documentação de Tratamento de Exceções C++

Sobrecarga de Funções

C++ permite a sobrecarga de funções com base nos tipos de parâmetros:

void func(int);
void func(double);

Crystal suporta a sobrecarga de funções, mas com uma sintaxe mais simples:

def func(x : Int); end
def func(x : Float64); end

Referência: Documentação de Sobrecarga de Funções C++

Constexpr e Cálculo em Tempo de Compilação

C++ suporta constexpr para cálculos em tempo de compilação:

constexpr int square(int x) {
    return x * x;
}

Em Crystal, o cálculo em tempo de compilação é feito de forma diferente:

def square(x : Int32) : Int32 = x * x

Referência: Documentação de Constexpr C++