2009-06-12 13 views
11

La razón principal para usar C++ sobre un lenguaje administrado en estos días es obtener los beneficios que C++ trae a la mesa. Uno de los pilares de C++ es "no pagas por lo que no necesitas". Sin embargo, se puede argumentar que a veces no se quiere pagar por la compatibilidad con versiones anteriores de C. Muchas de las extrañas peculiaridades de C++ se pueden atribuir a esta compatibilidad con versiones anteriores. ¿Qué otros idiomas hay donde "no pagas por lo que no necesitas", incluida la compatibilidad con C?¿Hay un lenguaje de estilo C++ sin adornos de C?

Edición/aclaración: El verdadero asesino para mí está en esa segunda oración. ¿Hay un lenguaje verdaderamente diseñado desde cero que no impone cosas que no quieres en tu código? C++ tiene eso como filosofía de diseño: ¿no quieres RTTI? No existe. ¿No quieres recolección de basura? No está ahí. El problema con C++ es que (IMO) viola este requisito cuando se niega a romper con el pasado. No quiero que el fragmento de compatibilidad con versiones anteriores con el código de 20 años impida mi avance. C++ no está dispuesto a hacer eso. ¿Qué es/tiene?

Edit2: Supongo que debería haber sido más claro acerca de lo que es un costo. Hay múltiples costos potenciales. El que inicialmente me estaba enfocando era el costo del tiempo de ejecución.

En C++, el polimorfismo a través de métodos virtuales tiene un costo. Pero no todos los métodos pagan ese costo. Se llama a un método C++ no virtual con el mismo costo de tiempo de ejecución que una función simple C antigua (que tiene al menos un parámetro). C++ no requiere que uses polimorfismo. En otros lenguajes de OOP, todos los métodos son virtuales, por lo que no se puede evitar el costo del polimorfismo.

Los costos de tiempo de ejecución son más importantes pero otros costos mitigan eso. El lenguaje ensamblador tendría la menor sobrecarga de tiempo de ejecución, obviamente, pero los costos de escritura y mantenimiento del lenguaje ensamblador son un gran golpe en su contra.

Con esto en mente, la idea es encontrar idiomas que proporcionen abstracciones útiles que, cuando no se usan, no afectan los costos de tiempo de ejecución.

+0

¿Qué significa "estilo C++" significa? – Nosredna

+0

Excelente pregunta. Aunque no creo que realmente pueda decir que la compatibilidad C tiene un/tiempo de ejecución/costo, a veces resulta en opciones de diseño incómodas. –

+0

Nosredna: Está en la segunda oración: solo paga por lo que necesita. Sin memoria administrada. No hay tipos incorporados que no se asocien a tipos de máquinas. – jmucchiello

Respuesta

23

D language

D es un sistemas de propósito y aplicaciones de lenguaje de programación de. Es un lenguaje de nivel superior que C++, pero conserva la capacidad de escribir código e interfaz de alto rendimiento directamente con las API del sistema operativo y con el hardware. D es muy adecuado para escribir programas de línea de millón a gran escala con equipos de desarrolladores. D es fácil de aprender, ofrece muchas capacidades para ayudar al programador y se adapta bien a la tecnología agresiva de optimización del compilador.

El aspecto general de D es como C y C++. Esto facilita el aprendizaje y el código del puerto a D. La transición de C/C++ a D debería ser natural. El programador no tendrá que aprender una forma completamente nueva de hacer las cosas.

D reemplaza C la compatibilidad con el código fuente C. Las extensiones a C que mantienen la compatibilidad con la fuente ya se han hecho (C++ y ObjectiveC). Más trabajo en esta área se ve obstaculizado por tanto código heredado que es poco probable que se puedan realizar mejoras significativas.

+0

Sé de D. Me preguntaba si había algo más. No estoy seguro de que cumpla con mi requisito de "no pagar por lo que no usa". Pero el lenguaje más "no pagues por lo que no usas" sería ensamblado y eso no es realmente mejor que C++. – jmucchiello

+0

@jmucchiello - bueno, estás buscando no solo un lenguaje, que "No Impone Cosas", sino para un mejor "C" D.I.T. " idioma. La pregunta es difícil de responder, porque depende de tu definición de "mejor". Otro definitivamente "D.I.T." el lenguaje es Forth. Pero dejaré la pregunta de "mejor" para ti :) –

+0

@Igor: no tiene que haber una respuesta correcta. He tenido la intención de profundizar en D. @GMan: Y ahora, el ensamblaje y C++ no son iguales en complejidad. Estaba diciendo que la asamblea impone menos (en realidad no) a lo que puede y no puede hacer. – jmucchiello

1

También puede tratar de Ch: http://www.softintegration.com/

+2

Ch es básicamente un subconjunto de C++ destinado a la creación de scripts. No veo que esto responda la pregunta del OP. –

+1

Desde el sitio: Ch es C plus (Ch = C +). Ch es un intérprete de C Ch es C con clases y extensiones de alto nivel. Ch es un superconjunto de C. Tenga en cuenta que C++ ya no es un superconjunto de C. Por ejemplo, la aritmética de punto flotante VLA e IEEE en C no se admite en C++. C es para programación de sistemas de bajo nivel y sistemas integrados; C++ para proyectos a gran escala. Ch es óptimo para scripting independiente de la plataforma en computación y visualización numérica, desarrollo rápido de aplicaciones, programación y trazado web, scripting integrado, programación de shell, integración con sistemas heredados y aprendizaje de C/C++. – auvi

0

Trate Aikido. Sintácticamente similar a C++, y no creo que herede compatibilidad retroactiva de estilo C.

Aikido @ Wikipedia

+0

Pero está interpretado, y creo que tiene una recolección de basura incorporada. Lo cual no encaja realmente con lo que quiere en su pregunta. – Nosredna

+0

OK, ¡simplemente lo sugerí como otra opción! –

4

estoy tentado a downvote esta pregunta (pero hasta el momento no tengo). Su requisito de que "usted no paga por lo que no usa" depende en gran medida de lo que use exactamente.Ya mencionó en uno de sus comentarios que ensamblar es quizás el lenguaje más libre de fluff que existe, pero se queja de C, que se encuentra en algún lugar entre el ensamblado y C++.

Si encuentra que la recolección de basura y las características explícitas orientadas a objetos son "pelusas", entonces, francamente, creo que C es probablemente el mejor candidato. El lenguaje es realmente pequeño y elegantemente diseñado. Cumple con el requisito de "encajar en la cabeza" de la mayoría de las personas. Para un lenguaje que le da un control tan estrecho sobre el hardware, es muy expresivo.

Si no estás vinculado al hardware, entonces Scheme o algún otro dialecto minimalista de Lisp probablemente se adecue a "no impone lo que no quieres en tu código", pero de nuevo, todo depende tanto en qué es exactamente lo que no quieres.

Si hay algunas características de nivel superior que "no se puede vivir sin" (que parece implicar al nombrar "C++ sin compatibilidad C" como idioma de su elección), debe decir explícitamente cuáles son. ¿Qué es exactamente lo que C++ trae a la mesa que no quieres sacrificar?

+1

En realidad C es ciertamente un lenguaje que impone poco al programador. La pregunta es si puedes agregar más funciones de idioma y aún mantener ese minimalismo. Por ejemplo, agregar pato-tipeo impone una sobrecarga. Si un idioma (de alguna manera) le permite usar el tipo de pato o le permite apagar el pato-tipado, entonces cumple con mis criterios para pagar solo por lo que usa. El punto no es qué "no puedo vivir sin". Es lo que puedo ganar cuando lo necesito y tirar cuando no lo necesito. – jmucchiello

1

SPECS es una unión sintáctica alternativa para C++. Este enlace incluye una sintaxis simple para declarar y definir tipos, funciones, objetos y plantillas, y cambia varios operadores problemáticos y estructuras de control. La sintaxis resultante es LALR (1) parseable.

+0

+1 ¡Eso es asombroso! Realmente no responde la pregunta, pero eso es genial ... – Zifre

+1

Esto sería genial si Pascal no lo estuviera buscando. Y si estuviera actualizado con C++ 0x. – jmucchiello

1

Eiffel. Parece que Pascal tiene semántica de tipo C++. Además, agrega aserciones especiales de "programación por contrato" que están integradas en la definición del idioma, años antes de que la gente hablara sobre las bibliotecas de la "Unidad X".

+0

No he mirado a Eiffel desde hace tiempo. ¿Hay funciones de idioma que agreguen gastos generales que puedo desactivar cuando no necesito las funciones? Esa es la esencia de mi pregunta. ¿Puedo escribir mi propia gestión de memoria? Si creo una jerarquía sin excepciones, ¿habrá código de manejo de excepciones en mi tiempo de ejecución? – jmucchiello

+0

Ojalá pudiera responder a sus preguntas. Han pasado años desde que miré esto también, en el contexto de aprender más sobre el uso de C++ y Borland ObjectPascal. No creo que puedas deshabilitar el manejo de excepciones. * Puede * desactivar las condiciones previas y las verificaciones posteriores a la condición. – Roboprog

0

No estoy exactamente seguro de lo que cuesta la compatibilidad con C tiene ...

+1

¿Macros? ¿No es tanto el costo de tiempo de ejecución como una fuente de problemas? ¿El puntero maneja el desorden en general? Además, realmente me gusta cómo Pascal enmascara muchas operaciones de apuntador con parámetros "var", que tienen que ser "desreferenciables" cuando se llama a la rutina. No estoy seguro de que los parámetros "by" de referencia de C++ sean de tan alto nivel. – Roboprog

0

I' No estoy seguro de que haya éxitos en el tiempo de ejecución asociados con la compatibilidad con versiones anteriores de C, ¿podría explicarlo? Ciertamente, la compatibilidad con versiones anteriores le da más cuerda para colgarse, pero la aplicación estricta de las normas puede mitigar eso. Entonces, supongo que mi respuesta es que C++ es el lenguaje que hace lo que pide y solo necesita una herramienta para aplicar construcciones válidas.

Editar: extraño que no me di cuenta el cargo directamente debajo de mí con la misma primera línea de comentario

+0

La compatibilidad con versiones anteriores con C está en el lado del mantenimiento de los costos. Nunca dije que C++ no cumplía el propósito. Me pregunto si hay alternativas. ¿Por qué no hay más idiomas con el mantra "no pagues por lo que no usas"? – jmucchiello

Cuestiones relacionadas