Realmente me gusta la naturaleza simple y transparente de C: cuando escribo código C me siento libre de "abstracciones con fugas" y casi siempre puedo hacer una suposición astuta sobre el ensamblaje que estoy produciendo. También me gusta la sintaxis simple y familiar para C.
Sin embargo, C no tiene estos elementos simples y útiles que C ++ ofrece como clases, manejo simplificado sin cadenas, etc. Sé que todo es posible implementar en C usando tablas de salto y similares, pero a veces es un poco extraño. , y no es muy seguro de tipo por varias razones.
Sin embargo, no soy fanático del énfasis excesivo en los objetos en C ++, y me da miedo el 'nuevo' operador y similares. C ++ parece tener demasiados problemas para, por ejemplo, ser utilizado como lenguaje de programación del sistema.
¿Existe un lenguaje que se encuentra entre C y C ++ en la escala de widgets y doodads?
Descargo de responsabilidad: me refiero a esto como una pregunta puramente objetiva. No pretendo enojarlo porque no comparto su opinión de que C {, ++} es lo suficientemente bueno como para hacer lo que sea que esté planeando.
new
es principalmente un refuerzomalloc
que también puede encargarse de inicializar la memoria por usted. Con "ubicación nueva" yoperator new
, puede decidir cómo y dónde asigna memoria. Y en cuanto al énfasis del objeto: unas pocas líneas por encima de usted indican que considera las clases como un "doodad simple y útil". ¡Decídete!C+
Diclaimer: Lo siento, no pudet resist. It
el 1 de abril;)Respuestas:
Estos podrían ser los droides que estás buscando ...
Ir - http://golang.org/
D - http://dlang.org/
Rust - http://rust-lang.org/
fuente
struct
s están seriamente en comparación con los valores de C ++: sin herencia, sin referencias de valor, por ejemplo, por lo que es imposible producir algo tan simple como una clase de cadena de valor en D que sea tan eficiente como su equivalente en C ++. Esos son hechos sobre el lenguaje D.Hay bastantes lenguajes (por ejemplo, Java, Go, D, Objective-C) que son más o menos paralelos a C ++, o intentos de solucionar problemas que los autores vieron con C ++.
Sin embargo, al menos IMO, todos ellos funcionan sustancialmente por debajo de C ++ para la mayoría de los propósitos prácticos.
Desafortunadamente, según su gusto aparente por saber qué código de ensamblaje se producirá, probablemente podamos descartar Objective C y Java inmediatamente.
Teóricamente, consideraría Ir como el más interesante de estos: tiene algunas ideas realmente originales y enfoques interesantes para resolver problemas que hacen que algunos tipos de código sean mucho más fáciles. Desafortunadamente, los compiladores actuales no producen un código muy bueno, y no ha habido muchas mejoras al respecto en los últimos años.
Eso deja a D como el único que tiene una oportunidad. Probablemente sea el más similar a C ++ (de estos), pero también el menos probable (IMO) para solucionar lo que parece ver como problemas.
Eso deja un enfoque obvio: use C ++, pero use solo las partes que desee y evite las partes que no le gustan.
fuente
Lo siento, amigo, alarma de contradicción. Se requiere un manejo sin cadenas
new
. Es una necesidad fundamental. No puedes tenerstd::string
sinnew
. Y, además,new
/delete
es exactamente equivalente amalloc
/free
pero más seguro , porque garantiza la correcta construcción y destrucción de los objetos del montón (¡totalmente necesario!) Y utiliza un manejo de excepciones en lugar de unNULL
retorno, y por lo tanto es superior en todas las formas imaginables. En C ++ 11 es muy posible escribir su propianew
función de estilo, porque el reenvío perfecto le permite tratar con cualquier constructor de cualquier tipo. Si tiene miedo a las armasnew
, le sugiero que simplemente no sepa con qué está tratando.Ah, sí, y los punteros inteligentes hacen que nunca, nunca, tengas que lidiar con nada de esto tú mismo.
Además, en C ++ no hay un énfasis excesivo. No tiene que usar ningún objeto que no quiera. Puede programar funcionalmente con lambdas y tal cuando lo desee. Nadie te obliga a usar la herencia y las funciones virtuales; de hecho, muchos buenos programas de C ++ rara vez exhiben herencia. Las plantillas son la técnica de abstracción más poderosa y más útil. Esto no es Java.
fuente
f(g(x))
Parece funcionar bien para mí. Y también creo que el currículum se puede hacer como una biblioteca genéricamente en C ++ 11.std::bind
apoya esas cosas.C es casi un subconjunto de C ++, por lo que puede usar esas partes de C ++ que le gustan y no tener en cuenta el resto. Incluso es posible escribir C válido que también es C ++ válido.
No escribirás C ++ idiomático, pero eso es casi tan "intermedio" como parece.
Alternativamente, puede consultar otros lenguajes que intentan extender C hacia algo más poderoso, especialmente D y Objective-C.
Y finalmente, dependiendo de la naturaleza del proyecto, puede optar por un enfoque políglota: divida su proyecto en módulos y elija el idioma más adecuado para cada parte. La desventaja de esto es que necesita que los idiomas funcionen juntos, lo que puede ser demasiado trabajo para que valga la pena el esfuerzo.
fuente
Solo para ofrecer una respuesta salvaje, lista para usar: si el idioma que desea no existe, ¿por qué no hacer uno usted mismo? Hay una variedad de poderosas herramientas de desarrollo del lenguaje, justo en los viejos recursos de (F) Lex y Yacc / Bison. Como ya conoce C, solo necesita su "compilador" para generar el código C, para el que luego usa su cadena de herramientas existente.
Esto puede ser más simple y más poderoso de lo que piensas. Comience con un analizador / lexer para C, luego agregue las características adicionales que considere importantes. Si las tablas de salto son molestas para escribir a mano, descubra una construcción para expresar el resumen y deje que su intérprete las escriba por usted. Esencialmente, esto es solo un nivel superior de metaprogramación previa al procesador, utilizando herramientas externas para realizar la metaprogramación. Siempre sabrá exactamente cómo será el ensamblaje final, ya que conoce el C y sabe en qué C se expandirán sus extensiones de lenguaje.
Obviamente, existen algunas limitaciones sobre la efectividad de esto sin mucho trabajo adicional. Agregar un sistema de tipo estático completo puede ser un poco más complejo de lo que desea ingresar, pero es una opción que podría explorar si le gusta. Sus extensiones DSL son tan poderosas y complejas como usted tiene tiempo y energía para hacerlas, y quién sabe, tal vez algún día su lenguaje de extensiones se convertirá en "el próximo C ++".
fuente
No ha dicho qué características de C ++ son molestas para usted. de todos modos podrías probar Objective-C. Se enfatiza en Orientado a Objetos en lugar de Biblioteca Estándar en C ++.
fuente
El mundo incrustado especificó Embedded C ++ , que puede ser lo que estás buscando. Quitaron cosas como herencia múltiple y similares. Hasta donde yo sé, sin embargo, se ha extinguido.
fuente
Puede encontrar útil esta comparación detallada de C ++, Objective-C, Java y C # . Personalmente, creo que C # es mucho más limpio para trabajar que C ++. He portado varias funciones C (numéricas / cálculos) a C # antes sin que sean necesarios demasiados cambios debido a la similitud de los tipos de datos numéricos y de sintaxis.
fuente