2010-12-30 17 views
14

Así que C obviamente tiene una fortaleza de programación de bajo nivel bastante dominante ..... ¿pero está saliendo algo que desafíe/quiera reemplazarlo?¿Reemplazo para la programación de bajo nivel C?

Python/C#/etc parecen estar dirigidos a un nivel muy alto, pero cuando se trata de cosas de bajo nivel C parece ser el rey y no he visto mucho "intentar" reemplazar eso?

¿Hay algo por ahí, o aprender C para las cosas de bajo nivel parece ser el estándar?

+4

¿Puedes aclarar tu pregunta? ¿A qué * exactamente * quieres decir con "cosas de bajo nivel"? ¿Su pregunta está respondida en [* ¿Hay algún idioma que se ajuste a los mismos nichos como C? *] (Http://StackOverflow.Com/q/3342213/#3342538) o tal vez [* Qué idioma se usa para escribir los sistemas operativos (Windows)? *] (Http://StackOverflow.Com/q/3317329/#3321433)? –

+0

Supongo que serían los nichos, realmente no sabía qué más decir. –

Respuesta

0

La tendencia reciente se está moviendo hacia lenguajes orientados a objetos y orientados - Por ejemplo, Symbian como un SO está escrito completamente en C++, También la investigación de Microsoft ha venido con Singularity OS que es un modelo de programación administrada. La idea es que los lenguajes administrados protejan a los usuarios de errores fáciles de cometer en filtraciones de recursos tipo C, corrupciones de punteros, etc. al abstraer estas ideas. También el paradigma orientado a objetos ayuda a escribir código fácil de mantener. Por ahora C todavía gobierna el mundo integrado, sin embargo, podemos ver que cambiará en la próxima década, con más y más mundo integrado que abraza C++ como el lenguaje de elección.

+16

Correcto, porque nunca obtienes fugas de recursos o corrupción de punteros en programas C++. –

+0

La diferencia entre C modular y C++ es casi completamente sintaxis. La mayor ganancia que veo no es "OOP", sino que escribe plantillas seguras. Si no crees que C puede estar orientado a objetos, te sugiero que consultes la base del código ffmpeg. – EnabrenTane

+5

@EnabrenTane algunas de las cosas son realmente difíciles de lograr en C, por ejemplo implementando auto_ptr en C! Aquí radica el poder del lenguaje C++ en la gestión de recursos de manera efectiva. – Neera

6

Si quiere decir nivel de sistema, entonces tal vez D Language.

+0

D no está listo para eso en muchos aspectos – MajesticRa

+5

@MajesticRa la pregunta era "... ¿está saliendo algo que desafíe/quiera reemplazarlo?" ... no qué idioma está listo en todos los aspectos. ¿Qué le parece ofrecer algunos detalles o enlaces sobre por qué "no está listo en muchos aspectos" junto con su voto a la baja? – dgnorton

+0

Por favor, no se enfade conmigo por no votar, vote su respuesta. Mi opinión es que "salir" debería referirse a la herramienta lista para usar hoy, que podría lanzarse recientemente en PRODUCCIÓN pero aún no ha reunido la atención merecida. Sé que D puede verse exactamente así desde el primer vistazo. Pero ... podría escribir algún 'enlace' y vincularlo por ti (no hay muchas publicaciones sobre D). Lo haré con el tiempo, probablemente. Pero por ahora te sugiero que aprendas mejor D y trates de planear un proyecto serio de PRODUCCIÓN de bajo nivel/sistema. Recientemente lo hice. REALMENTE hizo completamente. Hágalo usted mismo y comprenderá mi preocupación. – MajesticRa

0

yo no cosa tan me gusta usar mi viejo Rotines Asamblea, pero C es salvar

2

C para la materia bajo nivel es estándar. C funciona y es conocido. C es rápido porque es de bajo nivel y hace que el programador haga muchas cosas que Python y C# hacen por ti. Podrías escribir otro idioma con el objetivo de reemplazar C, pero no creo que te lleve a ninguna parte excepto a una sintaxis ligeramente diferente. (Si quieres mantener la velocidad de C).

¿Por qué es tan rápido C? Porque su ensamblador brillante. Para las cosas que necesita hacer aún más rápido, usa YASM o ensamblador en línea.

+5

Una vez escuché a alguien describir a C como "el ensamblador portátil". –

+7

En realidad, con los avances recientes en la tecnología de compilación, esas características que fueron diseñadas originalmente para hacer C rápido (tipeo débil, no seguro para la memoria, seguro de puntero o seguro) han evitado técnicas avanzadas de optimización del compilador como Supercompilación, fusión de programa, fusión de mapa, fusión de flujo, etc., lo que hace que C * más lento * no sea más rápido. Las JVM ahora pueden competir rutinariamente con C y, a veces, incluso superarlo, y se están volviendo más rápidas a un ritmo que los compiladores de C no han estado funcionando durante mucho tiempo. Por ejemplo, HotSpot ha estado acelerando entre un 10 y un 30 por ciento con cada versión. –

+1

Haces grandes puntos. Espero con ansias el día en que mi código Ruby sea tan rápido como C :) – EnabrenTane

0

No creo que C tenga un nivel suficientemente bajo. Sugeriría el lenguaje ensamblador. Hasta donde yo sé, es el nivel más bajo que un programador podría ir. Pero todavía tiene que lidiar con el ensamblador, el enlazador y los cargadores. Todavía hay muchos detalles relacionados con la plataforma de destino.

0

Existen lenguajes de bajo nivel específicos de plataforma, como lenguajes de ensamblaje y códigos de máquina. Al comparar estos con C, C es un lenguaje de alto nivel.

3

Bueno, para ser honesto, depende de su necesidad de ser "de bajo nivel"/"nivel del sistema" y de qué es el sistema.

Como Neera señala acertadamente, hay una tendencia creciente hacia los lenguajes administrados.

Por lo tanto, si está escribiendo un código de aplicación, a menos que realmente esté escribiendo los algoritmos y las optimizaciones, la idea es que use el código administrado/abstracciones de mayor nivel. La necesidad de hacer cosas de bajo nivel todo el tiempo es, en plataformas comunes, muy reducida. En cualquier lugar donde tenga acceso a una API que esté cerca del bien, probablemente tenga capas de abstracción más bonitas.

Sin embargo, si está implementando en una nueva arquitectura, puede: usar ensamblar para producir un compilador para esa plataforma o escribir un compilador que emita código de máquina desde esa plataforma desde otra plataforma (compilación cruzada). Entonces necesitas compilar un compilador para esa plataforma.

Como se puede imaginar, C++ es más difícil de tratar que C en este sentido. Incluso C es en realidad un gran esfuerzo para hacerlo bien.He escuchado a personas decir que les gustan los lenguajes basados ​​en pila como FORTH porque para el trabajo básico pueden arrancar y ejecutar con muy poco ensamblaje (en comparación con un compilador de c o un esfuerzo de compilación cruzada completa).

Editar (porque me gusta) Aquí hay un link para el repositorio de JonesForth git. Echar un vistazo. Jonesforth es una implementación de adelante en ensamblador i386 completa con comentarios de código que lo guían a través de todo el proceso.

+1

+1 por Adelante.Creo que el compilador Forth más pequeño es algo así como 30 * bytes *. (No, eso no es un error tipográfico). Probablemente no sea más bajo que eso. –

+0

@Jorg También desenterré el compilador/tutorial de Jonesforth ... una buena pieza de codificación. –

2

¿Qué pasó con Google's GO?

+1

¡Me encanta lo rápido que compila Go-Code! Me gusta el lenguaje y parece muy prometedor, pero enfrenta el obstáculo habitual de obtener una masa crítica de aceptación. – dgnorton

+2

No es realmente un lenguaje de bajo nivel de la manera C. –

+0

El GC lo hace no candidato a la C (al menos en incrustado) – themihai

0

¿Qué quiere decir exactamente por bajo nivel?

C también se usa para alto nivel cosas como interfaces de usuario (todo el escritorio GNOME, y su biblioteca GTK están escritos en C).


que había puesto en la categoría C bajo nivel , ya que te permite jugar con la máquina real (por ejemplo: direcciones de memoria en bruto, por citar algo) añadiendo solamente una muy pequeña capa de abstracción.

también otros lenguajes de programación están ofreciendo una limpia visión de la máquina subyacente:

  • Muchos son derivados de C y son compatibles con ella (C++, Objective-C). Estos proporcionan algunas herramientas para facilitar su vida al abstraer algo. Ellos podrían reemplazar C, pero si tendrá que utilizar estos idiomas, se perdería la compatibilidad: ObjectiveC y las interfaces de C++ no pueden ser utilizados por C.

  • otros pertenecen a familias completamente diferentes, y éstos, que no sea el problema anterior, ni siquiera puede usar C cosas directamente.

Por lo tanto, en mi opinión, la razón principal por la que C no se cae es para comercial razón (que sería costar mucho que escribir todo de nuevo, así que todo lo que es compatible con otros lenguajes), más o menos la misma razón por la cual COBOL aún existe.

Hay otras razones, como el hecho de que C es barebone, simple y rápido de analizar y compilar y esas cosas, pero en mi opinión, estas son secundarias.


Algunas grandes empresas que pueden permitirse volver a escribir nada son, sin embargo tratando de patear A apagado (Apple está ampliamente utilizando ObjectiveC, por ejemplo, mientras que otros están usando C++).

Creo que en el futuro C seguirá existiendo, ya que no hay esfuerzos en elegir un lenguaje estándar específico para usar en todas partes en lugar de C (si escribe código C funcionará con C, con C++ y con sistemas ObjectiveC, mientras que lo opuesto no es verdad) y dado que hay una base de códigos demasiado extensa de código C.

1

De hecho, hay un buen número de cosas que se pueden utilizar para la programación de bajo nivel. Aquí hay algunos utilizados en el pasado con ventajas sobre C.

  1. Pascal variantes (utilizado en GEMSOS)
  2. Oberon (utilizado en el sistema Oberson y A2 Bluebottle)
  3. Ada (utilizado en proyectos críticos para la seguridad y al menos tres sistemas operativos en hardware limitada)
  4. PL/0 (MULTICS)
  5. Modula (usado en CVSup y algunos proyectos académicos para el software de sistema correcto)
  6. Smalltalk y Haskell se usaron para prototipos de SO o capas de reemplazo de sistema operativo.
  7. Cyclone, Popcorn, C0 y Typed Assembly Language hacen mejor que C manteniendo gran parte del mismo.

Además, los idiomas con un tiempo de ejecución se pueden utilizar si las partes de nivel más bajo se implementan en otro idioma. Verve de Microsoft y el sistema operativo JX son ejemplos. Para uno de la vieja escuela, busque la máquina Genera LISP y sus "ventajas". Todavía no puede hacer mucho de eso en el desarrollo de sistemas modernos con cadenas de herramientas C/C++. ;)

Por lo tanto, incluso si C no es totalmente reemplazable, es reemplazable en la mayoría de las situaciones sin pérdida de rendimiento. Diviértete con estos.

Cuestiones relacionadas