2010-11-05 9 views
6

,¿Alternativa a C, C++? Todo

Hay tantos lenguajes de programación/sistemas operativos de dispositivos conductores/es decir, los softwares que se construyen usando C y C++. Me preguntaba si C y C++ eran los únicos 2 lenguajes de programación de bajo nivel que todas las compañías alguna vez tuvieron para construir sus propios productos. Si los hay, ¿por qué C y C++ obtienen tanta preferencia sobre otras opciones?

+0

Apple usa Obj-c para obtener grandes partes de su SO – pastjean

+6

http://en.wikipedia.org/wiki/Low-level_programming_language ¿Qué más necesita saber? ¿Por qué preguntar aquí? –

+0

¿Definir "lenguajes de programación de bajo nivel"? ¿Te refieres a lenguajes compilados vs. idiomas interpretados? – EboMike

Respuesta

3

Existen otros lenguajes de bajo nivel, pero C tiene el beneficio de un efecto de 'bola de nieve de popularidad'.

Es tan eficiente como cualquier lenguaje razonablemente portátil, por lo que es una buena opción para la programación de sistemas. Una vez que construyes un sistema operativo en él, tiene sentido construir herramientas para el mismo sistema con él, por lo que muchos programadores se expusieron a él en los años 80 y 90. Así se convirtió en lingua franca con la que todos los programadores de sistemas estaban familiarizados.

Hay relativamente poco que puede hacer para mejorar C sin comprometer ni su eficiencia ni su portabilidad, por lo que no había un lugar obvio para competir contra él en el nivel bajo.

+0

Eso es lo que quería entender. Ha habido tanta competencia cuando se trata de lenguajes de programación web o programación orientada a objetos. Pero en el caso de los lenguajes de procedimiento, por alguna razón, C siempre ha estado en el centro de atención de las empresas corporativas. –

+0

* "Hay relativamente poco que puede hacer para mejorar C sin comprometer ni su eficiencia ni su portabilidad, por lo que no había un lugar obvio para competir contra él en el nivel bajo". * La sintaxis. Estoy pensando en la "declaración que refleja el uso" de C para los tipos. Es terrible. Lo reemplazaría con una sintaxis de tipo postfix como la de Scala, Go, Haskell o ML; ej., 'var x: int = 5;', 'var dptr: ** double;', 'def sort (a: * int, len: int, cmp_lt: (int, int) -> bool): unidad;' . OMI, la mejora sería inmensa, y el cambio tendría * ningún * impacto en el rendimiento o la portabilidad. – Harrison

+0

No puede señalar esa sintaxis y decir que es objetivamente suficiente mejor que la sintaxis C que las personas deberían cambiar. Incluso si fue, obviamente, objetivamente mejor, una vez que C tiene un punto de apoyo, eso no es razón suficiente para cambiar. Considere Esperanto vs. Inglés, Dvorak vs. QWERTY. Si esa sintaxis puede acortar los tiempos de compilación a la mitad o algo así, entonces puede hacer que la gente cambie. –

2

No, hay una gran cantidad de idiomas que las empresas utilizan para producir su software. C tiene una clara ventaja sobre todos ellos para un área en particular, la de cosas de muy bajo nivel, ya que impone muy poco entre el código y el hardware.

La mayoría de los otros idiomas (incluido C++ hasta cierto punto, a menos que se limite al lado C) tienden a llevar una gran cantidad de equipaje innecesario que, aunque es un don absoluto para la programación de aplicaciones, tiende a obstaculizar el camino para cosas de nivel de sistema.

Por supuesto, también podría usar el código de ensamblaje, pero eso rara vez es necesario hoy en día con la calidad de los compiladores de C.

+0

En C++ no necesita incluir en el subconjunto C de la misma. Hay muchas funciones no disponibles en C que no imponen ningún costo: construcción y destrucción (RAII), plantillas (pueden imponer un costo en la memoria, pero no en la velocidad), las funciones virtuales no son peores que los indicadores de función cuando sea necesario. –

0

¿Qué hay de C#? Muchas aplicaciones de Windows se crean usando C#.

¿Qué tal Perl/Python? Muchas aplicaciones en Windows y Linux obtienen compilación usando esos lenguajes.

¿Qué tal D? Siempre es un buen lenguaje para usar, pero es triste que no hable tan bien como lo necesito con C++ nativo.

+6

OP parecía estar preguntando específicamente sobre los lenguajes de bajo nivel para los sistemas y controladores de dispositivos, no los lenguajes de aplicación. –

0

En parte porque fue uno de los primeros idiomas de alto nivel (después de B) que se adoptó a gran escala. Los lenguajes como Java son propiedad de las compañías, que en el momento de la caída de un pin se pueden descartar y luego no verías ninguna actualización de Oracle. También está el hecho de que c y C++ se traducen en cantidades relativamente bajas de código ensamblador, lo que lo hace mucho más pequeño y compacto.

También existe, la filosofía más importante de C. No pagas por lo que no necesitas. (es decir, en Java tienes recolección de basura, pero si escribes un programa que no necesita un recolector de basura, entonces tienes recursos desperdiciados y lo pagas es la velocidad y la eficiencia.) En C, si necesitas algo, hazlo tú mismo , sin recursos perdidos, código mucho más eficiente (según el programador).

+0

idiomas 'A' y 'B'? Cita por favor? C vino de BCPL que vino de CPL. A menos que seas gracioso. – paxdiablo

+0

http://www.livinginternet.com/i/iw_unix_c.htm Tiene razón en que surgió de eso, pero hubo primeros idiomas llamados A, y uno llamado B. Vinieron antes de C, y estoy seguro de que si pasé más tiempo en google, probablemente puedas averiguar por qué lo llamó C en lugar de Awesome Language (sin intención de sarcasmo). Es solo el orden de los nombres de los idiomas. – Jim

+0

"El desarrollo inicial de C ocurrió en AT & T Bell Labs entre 1969 y 1973; [2] según Ritchie, el período más creativo ocurrió en 1972. Se llamó" C "porque sus características se derivaron de un lenguaje anterior llamado" B " ", que según Ken Thompson era una versión simplificada del lenguaje de programación BCPL". De Wikipedia http://en.wikipedia.org/wiki/C_%28programming_language%29#Early_developments – Jim

7

Hay muchos lenguajes de "nivel medio" adecuados para el desarrollo de sistemas operativos, pero C y en menor medida C++ son, con mucho, los más populares. Hay muchas razones para esto, incluyendo:

  • El éxito inicial de C como la implementación de Unix llevó a su adopción generalizada.

  • La gran disponibilidad de excelentes herramientas de desarrollo (compiladores, pelusa, editores, análisis de pérdida de memoria, perfiles, generadores de código, ad nauseam) hace que C sea aún más convincente.

  • La cercanía de C al nivel de "máquina abstracta"; a diferencia, digamos, de Pascal, que tiene mucho más tiempo de ejecución. Esto es deseable cuando se escribe software de alto rendimiento. C a veces se ha llamado un "ensamblador portátil" por su cercanía al hardware.

+2

+1 Su primera viñeta es la respuesta correcta. C = Unix, C# = Microsoft, ObjC = iPhone. La plataforma hace que el lenguaje sea popular. – tidwall

+1

@jojaba: Microsoft sigue siendo C para el sistema operativo real (AFAIK), al igual que el kernel de MacOSX, incluso si las capas superiores se implementan sobre eso con C#/ObjC –

+0

@David: su derecho. Y no quise dar a entender que el sistema operativo para cada empresa o tecnología respectiva está escrito en dicho idioma, sino que se necesita una plataforma popular para ayudarlo a subir un peldaño. Si Apple no lanzó el iPhone, dudo que la etiqueta 'objective-c' sea más alta que la etiqueta' c' en SO. (Pura especulación) – tidwall

6

Forth a veces se utiliza para desarrollar software de bajo nivel, como controladores de dispositivos. Por ejemplo, el baile de arranque para los servidores basados ​​en SUN SPARC solía escribirse en Forth. Vea http://en.wikipedia.org/wiki/Open_Firmware para más detalles.

+0

+1 Estaba a punto de publicar Forth :-) – pmg

+0

No es solo SPARC por cierto. Creo que Apple tenía esto, al igual que algunos cuadros de IBM pSeries (AIX) de la memoria. – paxdiablo

+0

@paxdiablo, tiene toda la razón, algunos sistemas Apple e IBM sí usan Open Firmware. Sin embargo, fue en los sistemas SPARC donde lo encontré, así que por eso me vino a la mente. – corriganjc

3

Conozco a algunas personas que hacen programación de sistemas en D. Es un nivel más bajo que C#, etc., pero tenía muchos de los mismos beneficios de los idiomas modernos.

+0

D depende en gran medida de GC. Es difícil imaginar escribir código de bajo nivel con eso. – rustyx

+0

Wikipedia comienza diciendo: "El lenguaje de programación D es un lenguaje de programación del sistema imperativo, multi-paradigmático y orientado a objetos ..." Da mucho control sobre el GC y permite la liberación explícita de memoria, lo cual creo que lo haría apropiado. –

3

Aún más que el bajo nivel de abstracción, la característica clave de C y (C++ con RTTI deshabilitado) que se aplica al software del sistema es que no necesitan ninguna biblioteca de tiempo de ejecución.

Vea, puede escribir un compilador en el mismo idioma, pero no puede escribir un tiempo de ejecución en el idioma que depende de ello.

C tiene una biblioteca estándar pero no una biblioteca de tiempo de ejecución, por lo que puede implementar la biblioteca estándar en C y también puede usarla para escribir las bibliotecas de tiempo de ejecución para otros idiomas. Ídem para C++ (con RTTI desactivado).

2

Ada, Pascal, ensamblado, Fortran, etc. Aunque esté limitando la discusión a idiomas de bajo nivel, todavía tiene muchas opciones. Hay muchas empresas que no hacen mucho trabajo C o C++ en absoluto (por ejemplo, el ejército de EE. UU. Hace una cantidad considerable de trabajo usando Ada).

Una razón por la que C y C++ son tan populares es porque mucha gente conoce esos idiomas (me doy cuenta de que es una respuesta recursiva). Las empresas usan C o C++ porque es fácil encontrar un desarrollador que conozca el idioma y los desarrolladores aprenden el idioma porque eso es lo que las empresas están contratando. Tampoco está de más que haya una gran selección de libros, compiladores, IDE, depuradores, bibliotecas, etc. para C y C++, y que los compiladores C/C++ estén disponibles para prácticamente cualquier plataforma que pueda encontrar. Además, estos lenguajes han existido por bastante tiempo. Es más probable que el código C heredado sea mantenido por un desarrollador C que reescrito en otro idioma. Tanto C como C++ son idiomas versátiles y potentes que se seguirán utilizando para el futuro previsible. Sin embargo, están lejos de ser la opción .

1

C ha sido la lingua-franca desde los primeros días de Unix. Hay tanto código C existente, tanta raíz cultural, que las personas solo usan el lenguaje. Es más que eso: C es así que bien diseñado: en su simplicidad, en su velocidad de aprendizaje, velocidad de compilación, velocidad de codificación, velocidad de ejecución; en su libro de tutoriales bíblicos, en la gran cantidad de sólidos códigos de código abierto que aún utilizamos y pirateamos hoy, y la lista continúa. Es solo un lenguaje útil, como ningún bolígrafo de un millón de dólares con independencia de la presión, independiente de la gravedad y con centelleo de diamantes que pueda reemplazar un lápiz.

En cuanto a C++, no es tan simple como C. Por el contrario: es posiblemente más complejo que cualquier otro idioma, en términos de gramática, esquinas oscuras, curva de aprendizaje, código moderno adecuado y otros criterios. Uno podría pensar que esta complejidad mataría el lenguaje, y muchos de hecho han estado diciendo esto por décadas.Java nació en esta premisa. Pero aquí estamos hoy, aproximadamente treinta años después de que nació el lenguaje, y sigue vivo y pateando entre las 10 etiquetas más populares en StackOverflow. Hay un número de personas que son apasionado sobre el idioma, el tuyo-verdaderamente entre ellos.

Concedido, eso no explica por qué C++ está prosperando hoy como un lenguaje popular. Creo que es la libertad que C++ le brinda al admitir tantos paradigmas de programación diferentes. Así es como C++ admite la programación a un nivel tan bajo como C, con la misma eficacia y un nivel tan alto como otros lenguajes, con las bibliotecas de ayuda adecuadas. Te recomiendo que leas this interview with Bjarne Stroustrup.

C y C++ ciertamente no son las únicas alternativas para la programación de bajo nivel. Pero son una opción que es muy difícil de resistir. La mejor opción , si puedo sugerir con valentía, aunque solo sea por su larga y sólida historia, que insinúa que ambos llegaron para quedarse; y para el repertorio de código sólido que demuestra las cosas que puedes hacer con estos idiomas. El soporte que demanda el software existente promete muchas juntas activas en la red, muchas compañías de contratación y, en general, un par de idiomas en vivo.

+1

Si crees que C es un brillante ejemplo de buen diseño, no has intentado enseñarle a nadie la sintaxis del puntero de función recientemente. (No me malinterpreten, uso C y me gusta, pero tiene muchas verrugas.) – Porculus

+0

@Porculus felicidades, encontraron una incomodidad en la sintaxis de C. Y ahora sabes que cualquier idioma tiene sus fallas sintácticas. Pero C es un lenguaje simple, sin embargo, y esto reduce mucho las áreas en las que puede tener una incomodidad de sintaxis. – wilhelmtell

+0

También: sí, todavía creo que C es un ejemplo ** brillante de buen diseño del lenguaje. (Olvidaste el énfasis). Bjarne Stroustrup dijo que hay dos tipos de idiomas: esas personas se quejan y las que nadie usa. Por lo tanto, allí. – wilhelmtell

Cuestiones relacionadas