sábado, 6 de agosto de 2011

Exceptions in C++ - Cómo manejar excepciones - Primera Parte.

Información General
Las excepciones proporcionan una forma de tener el control sobre los "sucesos extraños", errores u horrores en tiempo de ejecución.

La forma en que C++ hace esto, es por medio de pasar el "mando" a funciones especiales llamadas manejadores o "handlers" en Inglés.

Para que esto suceda, debemos encerrar una porción de nuestro código, - o todo :) - en el bloque de código llamado try o intentar, en español, pero no lo escriban así en su código fuente... xD.

En el momento en que ocurre un error o anomalía en el código que colocamos dentro del try, salta una excepción que como ya dije, pasa el control a los manejadores, que se encargarán de hacer la tarea que nosotros le hayamos asignado.

De lo contrario, los handlers o manejadores, son ignorados.

La excepción salta, si utilizamos la palabra clave throw dentro del bloque try.


Una expresión throw acepta un solo parámetro, la cual pasa como argumento a los manejadores. (handlers)

Los manejadores pueden ser creados con la instrucción catch, la que debe ir inmediatamente después de la instrucción try y debe contener como mínimo un  parámetro el cual es comparado con el tipo de los manejadores y capturado por el cual tiene el mismo tipo, valga la redundancia.


Si queremos que nuestro manejador se atipado, o sea sin ningún tipo por defecto, debemos colocar ... (tres puntos suspensivos). De esta forma, ocurra lo que ocurra, nuestro manejador lo capturará.

Ejemplos:

try {
  // Aquí va tu código
}
catch (int param) {
    cout << "excepción de int";
}
catch (char param) {
    cout << "excepción de char";
}
catch (...) {
    cout << "excepción estandar";
}

Opinion Personal:

Como menciona el artículo original, es la forma natural que tiene este lenguaje para controlar

los eventos inesperados, que puedan surgir en nuestros programas.

Por supuesto, lo recomiendo ampliamente, aunque no hay que abusar de su uso, como todo.

Más adelante voy a traducir más del artículo original.

Fuente: cPlusPlus.com

martes, 2 de agosto de 2011

lunes, 1 de agosto de 2011

VB.Net vs C++ Segunda Parte

Ahora le toca a vb.net, para empezar utilicé el bucle While en lugar del For, como en el caso del código en C++ anterior.

Código:

Module Module1
     Sub Main()
         Dim i, j, k, l As Integer
         Console.WriteLine("Enter: ")
         Console.ReadLine()
         While i < 255
             While j < 255
                 While k < 255
                     While l < 255
                         l += 1
                     End While
                     l = 0
                     k += 1
                 End While
                 k = 0
                 j += 1
             End While
             j = 0
             i += 1
         End While
         Console.WriteLine("Hola")
     End Sub
End Module

En este caso, el código generado tarda solo 5 segundos en finalizar su ejecución, en comparación con los 3,5 de C++.


Conclusión
No es posible sacar una conclusión contundente, pero sí de que vb.net puede ser viable para desarrollos de mediano y talvéz gran porte.

C++ es un EXELENTE lenguaje de programación, y al ser compilado, goza de muchas ventajas con respecto al JIT de vb.net.
C++ es un lenguaje que utilizaría en situaciones donde necesite un verdadero V12 de potencia en algoritmos de encriptación, verificación de documentos, tratamiento de archivos por lotes, mientras que vb.net es perfectamente utilizable para lo demás...

Duda
Me gustaría saber si se pueden usar 2 lenguajes de programación en conjunto para un mismo proyecto, de ser así podríamos juntar el martillo con el cincel...

VB.Net vs C++

Bueno, realizando nuevas pruebas, y gracias al aporte de unos compañeros de Foro, ahora compilé el siguiente código en C++:

#include
using namespace std;
int main(){
    register int i = 0;
    register int j = 0;
    register int k = 0;
    register int l = 0;
    while (i < 255){
        while (j < 255){
            while (k < 255){
                while (l < 255){
                    l += 1;
                  
                }
                l = 0;
                k += 1;
            }
            k = 0;
            j += 1;
        }
        j = 0;
        i += 1;
    }
  
    std::cout << "Terminé\n";
    return 0;
}

Utilizando g++ sobre GNU/Linux y la opción de optimizado simple (-O), este código se ejecuta en 3.5 Segundos aproximadamente.

Only Love - Dread Mar I ft Luciano

domingo, 31 de julio de 2011

.NET vs C++

Concretamente se trata de Visual Basic.Net contra código c++ compilado por gcc (el compilador de GNU).

Para hacer esta simplísima prueba de rendimiento, escribí 4 bucles "for" anidados, los cuales recorren 256 items cada uno.

La idea básica sería generar números con el formato de una IP o sea:

0.0.0.0
0.0.0.1
...
0.0.1.0
0.0.1.1

y así sucesivamente hasta llegar a 255.255.255.255.

Empiezo con C++:
Fue compilado bajo Linux y utilizando GCC, mediante NetBeans 7.0 (utilizando la terminal, se obtiene el mismo resultado).

#include

using namespace std;

int main(){
for (int i = 0; i < 255; i++){
for (int i = 0; i < 255; i++){
for (int i = 0; i < 255; i++){
for (int i = 0; i < 255; i++){

}
}
}
}
cout << "Terminé";
return 0;
}

En mi humilde pc, este código tarda 13 segundos aproximadamente.

¿Cuánto tardará en Vb.net? - Compilado bajo Windows 7, utilizando Visual Studio 2008 Express.

Module Module1

Sub Main()
For i = 0 To 255
For j = 0 To 255
For k = 0 To 255
For l = 0 To 255

Next
Next
Next
Next
Console.WriteLine("Terminé")
Console.ReadLine()
End Sub

End Module

En este caso, el código tarda unos 16 segundos en ejecutarse, lo que nos da una idea del potencial de .Net.

Conclusión:
C++, me encanta y podría usarlo para muchos algoritmos, a su vez .Net tiene una velocidad de ejecución muy aceptable, además de que es sencillo programar bajo esta plataforma.

Para hablar un poco sobre "portabilidad", puedo decir que MONO esta en una linda etapa de desarrollo, y puede ejecutar código .Net con gran fluidez, claro que no tanto como en Windows.

De yapa quisiera hablar de python, el cual queda a años luz de estos tiempos... aunque su versatilidad asombra.

Saludos!

jueves, 17 de marzo de 2011

Vb.net no es un Avance, Python...

Vb.net es una hermosura, con su velocidad de proceso, comparable con Python, sumado al IDE que ofrece Microsoft "Visual Studio", uno puede conseguir una aplicación gráfica de gran poder, en poco tiempo.

Por este motivo lo sigo prefiriendo para aplicaciones comerciales, claro, siempre y cuando estemos programando bien, con la ayuda de Dios.

Claro, cada quien con sus Ventajas y Desventajas. Aunque a veces es cuestión de costumbre...En CPython por ejemplo, tenemos a nuestra disposición librerías o módulos que nos permíten hacer casi cualquier cosa, aunque en lo que se refiere a GUIs, debemos recurrir a escribir nuestra ventana, aunque contamos con algúnos IDEs, como ser: (Me tomo la libertad de transcribir comentarios de algunos foros):
"Eclipse con el plugin para Python eso si tienes RAM que te sobre"

Bien, he aquí un ejemplo que hice con Tkinter, o sea la herramienta que viene por defecto con python, para la creación de widgets, aunque no sepa traducir correctamente la palabra |:'(

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Tkinter import *

class ventMain(Tk):
def __init__(self):
Tk.__init__(self)
self.minsize(300, 300)
self.crearControles()
def crearControles(self):
self.ebtnOK = Label (self, text='Ok')
self.ebtnOK.text = 'Hola'
self.ebtnOK.pack(anchor=NW)
self.btnOK = Button(self, text = 'OK', command = self.quit)
self.btnOK.pack(anchor = SE)

def main():
# Verdadera Ventana
ventanaInicio = ventMain()
ventanaInicio.mainloop()
return 0

if __name__ == '__main__':
main()

viernes, 4 de febrero de 2011

4 en Línea


Bueno este fue uno de mis primeros juegos, lo hice junto con un amigo (Camilo Perdomo), está escrito en vb.net, tiene un buen rendimiento (Mejor que el Crysis - Seguro), está bueno para pasar el rato, es unicamente, humano contra humano... y solamente se puede hacer 4 en línea horizontal y verticalmente.
Tiene 2 modalidades (básico y avanzado), tabla de puntajes, estadísticas por fechas, permite guardar los jugadores (con sus contraseñas :-). (sin BD)
Como se aprecia en la imagen, tiene contador de tiempo (en el modo avanzado), a su vez, en esta modalidad, los turnos tiene un límite de 20 segundos.
Al estar programado en .Net, necesitamos el Framework (un amigo, jaja...¬¬).
Nunca más lo tocamos, quien esté interesado en tenerlo para jugarlo, puede escribir un e-mail a temografo@gmail.com.

Para darle una mirada al código, escribir a la misma dirección. Gracias.

Nota: en el pantallazo se ve que corre en Win7, pero también corre hasta en un cepillo de dientes (que tenga FrameWork.NET, claro...)

Dios los bendiga.