2009-10-07 16 views
14

Cuando estaba en la universidad hace 20 años, C era nuestro lenguaje preferido porque en ese momento era casi el único juego de la ciudad como lenguaje de programación de propósito general. Aprendimos a programar usando C. Se usó para programación de sistemas, estructuras de datos, sistemas operativos y prácticamente todo lo demás. La E/S de consola basada en texto fue la forma principal de interactuar con la computadora. Las GUIs eran raras y la programación web no existía en absoluto.¿Qué tipo de aplicaciones están programadas en C estos días?

Mueva el reloj hacia adelante más de 20 años. Tenemos una plétora de idiomas que se especializan. Por ejemplo, PHP es bueno para la programación web. Sería una locura escribir una aplicación web en C, pero sería una locura hacer programación de sistemas en PHP.

Ya no escribo en C. Estoy fuera del circuito, por así decirlo, sobre los usos actuales de la industria del idioma. Sé que se usa para el desarrollo de kernel, microcontroladores y demás. ¿Qué más?

¿Cuáles son las industrias clave que usan C porque es el mejor lenguaje para el trabajo? ¿Para qué tipo de aplicaciones es C la opción preferida?

Respuesta

16

Una de las características más importantes de C es su portabilidad. En x86 casi tiene todos los lenguajes de programación, pero en algunas otras arquitecturas, C es con frecuencia la única opción además del ensamblaje. Otro significado de la portabilidad es que, como alguien ha señalado, la mayoría de los otros lenguajes de programación tienen enlaces C. Cuando tienes una biblioteca C, puedes tener relativamente fácil las API Perl o Python con una velocidad comparable a la biblioteca C nativa. Además, los compiladores de C suelen ser mucho más sólidos que los compiladores de C++ y más maduros. Alguien me dijo que esta es una de las muchas razones por las cuales el kernel de Linux está escrito en C.

+0

¿Puede ampliar por qué C se considera altamente portátil? Pensé que describiría un lenguaje altamente portátil como Java, que es independiente de la plataforma. Pero C no es independiente de la plataforma? –

+0

¿Es bueno decir que 'uno puede usar Python en lugar de C'? Solo estoy preguntando cuál prefiere. –

4

dispositivos embebidos, algoritmos de negociación, los algoritmos de procesamiento de sonido, controladores, Linux Kernel, etc.

+6

Y más polémico, git. :-) http://bit.ly/5puz – Justicle

+0

@Justicle, es una publicación increíble. Gracias. – asveikau

+0

¿Cuál es el propósito de un dispositivo integrado? o_O –

1

sé que controladores de bajo nivel tienden a ser escrito en C debido a la pre-sencillo y post-condiciones para cualquier instrucciones dadas Tengo un amigo que escribe controladores de dispositivos de bajo nivel para una empresa de memoria flash y todo el código que escribe está en C.

11

Uso C para programación que no es de sistemas. Mi trabajo está relacionado con bioinformatics. La razón por la que uso C es porque hay muchas bibliotecas C muy buenas, y las rutinas requieren un gran uso del procesador.

C también es fácilmente vinculable a otros idiomas. Así que puedes construir una biblioteca en C y hacer que funcione con C++, Python, Java, .NET, Ruby, PHP, etc. No es tan sencillo en el reverso.

+0

¿Sabe cómo compiten las bibliotecas C con las bibliotecas de Python? Porque escuché que Python tiene un * lote * de bibliotecas, y son muy poderosas. Entonces, ¿quizás Python es un lenguaje aún más importante para aprender? –

5

Cualquier cosa cerca del hardware: controladores de dispositivo y sistemas integrados más destacados. Cosas en las que el nivel de abstracción de C es útil para proporcionar cierta portabilidad pero cualquier otra cosa se interpondrá en el camino.

+0

¿Cuál es el propósito de tener un sistema integrado? –

+0

@Jacob: los sistemas integrados son las partes "electrónicas" en casi todo, desde relojes digitales o calculadoras hasta automóviles, ascensores y aviones. –

8

razones por las que se podría ver nuevo código C escrito incluyen:

  1. Código que todavía necesita acceder al "metal desnudo" (controladores de dispositivos, etc.).
  2. Rutinas de biblioteca (que se pueden llamar desde otros idiomas, por favor) donde el rendimiento es crucial.
  3. Interoperabilidad con la base de código C existente.
  4. Entornos (por ejemplo, controladores integrados) donde las limitaciones de recursos limitan las soluciones.

Código de aplicación de uso general verdadero (especialmente cuando hay un humano en el circuito) ... no tanto.

+0

¿Qué son los controladores integrados? ¿Son lo mismo que los microcontroladores? –

+0

@DarkTemplar A los efectos de mi respuesta a la pregunta original, puede tratar esos términos como iguales. –

1

La aplicación en la que trabajo (una caja que controla los sistemas de cámaras IP) comenzó en C, porque inicialmente la desarrollábamos para un sistema integrado muy pequeño y C++ no funcionaba en el entorno uclibc.

Con el tiempo cambiamos a regularc libc, pero el núcleo de la aplicación se mantuvo en C. Hay algunas partes en las que nos beneficiaríamos del diseño orientado a objetos y las excepciones, pero creo que el lenguaje todavía funciona bien para nosotros.

1

Juegos, especialmente juegos de consola y servidores para MMO.

+0

Y los clientes de los MMO también. – Crashworks

+0

¿Por qué servidores y juegos? –

2

En mi función actual, generalmente solo escribimos el código C cuando modificamos los sistemas heredados (kernel VxWorks) u ocasionalmente para herramientas o programas simples.

C también es terriblemente portátil; (casi) cada sistema operativo y kernel tiene un compilador de C, por lo que para las aplicaciones que exigen dicho soporte, C es una de las mejores opciones disponibles.

C++ es visto como generalmente superior a C, aunque mi opinión es que en menos de condiciones estrictas, se prefieren los compiladores de C - condiciones tales como controladores de bajo nivel, pequeños sistemas embebidos, etc.

y me llaman de edad de moda, pero creo que C es el mejor lenguaje para enseñar a programadores novatos: PHP, C++, Java ... todos tienen una sintaxis similar a C: comencé a aprender C hace 10 años y ahora me siento seguro de abordar cualquier lenguaje de programación . Y luego está el problema con todos estos graduados no entender la gestión de memoria ... :(

1

robots.        

+1

No sé acerca de sus robots ... pero todos mis robots están programados en el logo :-) –

2

Ha habido un montón de buenas respuestas hasta el momento. Otra razón es que es lo menos -common-denominator — muchos lenguajes de alto nivel tienen implementados los tiempos de ejecución en C y admiten extensiones de escritura en C. Por lo tanto, si escribe una biblioteca en C, puede estar disponible en una amplia variedad de idiomas. Este no es el caso si utilice, por ejemplo, Java o Python para implementar su biblioteca. El kit de herramientas GTK + GUI y las bibliotecas relacionadas están escritos en C con este objetivo en mente. Están diseñados para ser envueltos y han sido para una gran cantidad de idiomas.

Por lo tanto, en general, C es bueno no solo para el código de bajo nivel que todavía es portátil en todas las plataformas, sino también para el código que es portátil entre entornos de lenguaje de alto nivel.

+1

En GUADEC en 2007, sugerí a los mantenedores de GTK que GTK 3 se reescribiera en C++ "debajo del capó", mientras se conserva los enlaces C actuales. Es ciertamente factible, y no creo que nadie lo considere imposible, pero no recibió exactamente una cálida recepción. –

+0

Hola Bob Murphy ... ¿Qué quieres decir exactamente con el término "enlaces" aquí? –

5

Actualmente estoy haciendo un gran trabajo con Linux, y una cantidad asombrosa de código de Linux está escrita en C en lugar de en C++ u otra cosa.

Hay muy buenas razones, el núcleo de Linux, y para el caso, otros granos como Darwin, las distintas distribuciones BSD, y así sucesivamente están escritos en C. Aquí están algunos:

  • C tiene a menudo se ha llamado un "lenguaje ensamblador portátil". Es bastante fácil mentalmente "compilar" declaraciones C simples para la CPU objetivo e imaginar lo que va a suceder, en términos de instrucciones y registros, etc. Y realmente quiere poder hacer eso cuando trabaje en un kernel de sistema operativo.

  • Hay muchas rutinas de biblioteca que simplemente no puede usar en un kernel, como malloc() o printf(), porque no son seguras en ese contexto. En su lugar, debe usar equivalentes especiales del kernel.El problema con C++ es que muchas cosas que las personas consideran características fundamentales del lenguaje, como el nuevo operador o iostreams o la construcción automática de objetos en la pila, no serían seguras en el kernel en sus configuraciones predeterminadas. Es posible que pueda piratear algo que funcionaría, pero es mucho más fácil seguir con la solución conocida, que es usar C.

  • El código base ya está escrito en C, y sería un gran trabajo para convertirlo a C++.

  • Para una arquitectura de CPU determinada, el código generado a partir de C es bastante estandarizado. No ocurre lo mismo con C++, particularmente para cosas como plantillas y funciones en línea. El lenguaje de máquina de C++ es bastante impredecible, y algunos compiladores de C++ producen código realmente inflado. Eso no es algo que desee en un kernel, cuyo código debe ser tan predecible, rápido y pequeño como sea posible.

Mucha otra funcionalidad de "espacio de usuario" en Linux está escrita en C también. Algunos de los componentes con los que trabajo incluyen: X Windows, GLib/GObject, GDK/GTK, Cairo, Pango y Clutter. Todos estos podrían haber sido escritos o reescritos en C++, pero parece haber una preferencia por C en el mundo de Linux.

1

Decodificadores, televisores digitales y sistemas integrados siguen utilizando "C" para el desarrollo de aplicaciones.

1

mayoría de los sistemas embebidos, aplicaciones HPC (mucho Fortran aquí también), sistemas operativos, gran cantidad de aplicaciones Unix (Apache y Sendmail viene a la mente)

Los compiladores/intérpretes para la mayoría de los otros idiomas pueden estar contenidas en C en diferentes grados!

+0

¿Por qué escribirías un compilador en C? –

+0

Para reducir el tiempo de desarrollo, supongo. Los compiladores para un nuevo objetivo se escriben en C porque adaptan un compilador existente, que se escribió en C, probablemente por la misma razón. Por ejemplo, NVIDIA's nvcc es una adaptación del compilador Open64. Además, hay varios generadores de analizadores que generan código C para usted, y la mayoría de los desarrolladores de compiladores/sistemas habrían aprendido C así como lex/yacc en la escuela. –

1

Como alguien señaló, C se usa para programar cerca del hardware. Esta es una de las razones principales por la que se usa C en muchas aplicaciones de robótica. Existen numerosos compiladores cruzados que le permiten codificar en C y luego portar el código en un microprocesador, microcontroller, dispositivo incorporado e incluso DSP processors. Incluso hay lenguajes especiales basados ​​en C como nesC que se usan específicamente para programar sensores inalámbricos de corto alcance.

Incluso para la robótica industrial pesada, encontrará que la programación del controlador de bajo nivel se realiza en C y luego los ingenieros colocan la GUI de Java o C# que interactúa con extensas bibliotecas de C.

+0

Hola wiznick, ¿sabes algo sobre Objective-C y cómo difiere de la C real? –

1

Un tema que aún no se ha mencionado es la velocidad. Mientras que muchos compiladores de lenguajes de alto nivel hacen un buen trabajo, si tiene una aplicación que necesita ejecutarse extremadamente rápido o un pequeño bucle interno de código que se llama muchas veces en un entorno de rendimiento crítico, el código C bien escrito puede hacer el trabajo mejor que la mayoría de las demás opciones, salvo el código de máquina.

0

C/C++ también se utilizan para la velocidad, por lo que las cosas como los videojuegos todavía se escriben en C/C++. Las aplicaciones comerciales en tiempo real también están probablemente escritas en C.

+0

¿Por qué aplicaciones comerciales en tiempo real? –

Cuestiones relacionadas