2010-07-02 23 views

Respuesta

14

No lo creo, al menos conceptualmente son muy diferentes. Go es mucho más similar a C++ y está orientado a "bajo nivel" que C#, y C# tiene solo unas pocas características funcionales, mientras que Scala le permite escribir un código "funcional" típico (más detallado que OCaml o Haskell, pero similar). El sistema de tipos de Scala es bastante sofisticado, pero se basa en una base de tipo Java/C#. Por otro lado, la parte orientada a objetos de Go se ve bastante diferente. No probé Go, ya que lo encontré demasiado similar a C y de muy bajo nivel. Como programador de Java, sé que C# está técnicamente a la vanguardia y tiene muchas características bonitas que faltan en Java. Al aprender Scala amplió mi visión, dándome la ventaja y el poder del código funcional sin perder las cosas buenas del mundo orientado a objetos. Después de los años en Java, la programación de la cárcel en Scala es una experiencia realmente refrescante y alucinante.

+2

En Wikipedia, la primera frase es "Scala es un lenguaje de programación multi-paradigmático ..." Así que, como dices, te permite escribir un código "funcional" típico pero no hay nada de malo si prefieres un estilo imperativo. Y estoy de acuerdo, el verdadero nombre de Go es C2. –

1

He visto a algunas personas convertir casi directamente código Java en código Go, código C en código Go, etc. Ahora veo que puede convertir casi directamente código Scala en código Go. Cuando las lenguas tienen un legado similar, a menudo eso no es difícil de hacer. Sin embargo, la comparación debe hacerse entre un código escrito específicamente para aprovechar las expresiones idiomáticas de un idioma en particular. Recientemente miré algún código C dependiente del puntero convertido casi directamente al código Go. No solo fue doloroso leer; también fue dolorosamente lento.

Y, para complementar el ejemplo de MJP del Tamiz de Eratóstenes en Scala, mire la sección Prime numbers de A Tutorial for the Go Programming Language para una descripción detallada de una implementación de programación simultánea idiomática del Sieve of Eratosthenes en Go.

26

Honestamente, ese código de Scala está escrito en un estilo extremadamente imperativo. No soy un purista funcional, sino que contrasto el código del tamiz de Eratosthenes de esa página con el ejemplo del Tamiz de Eratosthenes mucho más corto y legible al comienzo del Scaladoc para el Stream class. El código de esa página tiene montones de vars y while-loops, por no mencionar bitshifts, por todo el lugar. Ahora, no sé cuánto consenso hay sobre lo que se considera código idiomático de Scala, pero esto definitivamente no está cerca de eso. Como tal, no dice nada acerca de la similitud entre Scala y Go, aparte del hecho de que ambos son descendientes de C.

+1

Honestamente, ¿ha notado que su 'respuesta' no dice nada acerca de mi pregunta? –

+14

¿Notaste que introduceste tu pregunta con una comparación risible entre Scala y Go basada en algún código muy pésimo? Su prefacio a su pregunta es lo que realmente necesita abordarse. –

+1

El código en esa página se ve mal porque está optimizado para la velocidad. Verá dicho código si busca también en las bibliotecas estándar de Scala: montones de ciclos while, construcciones imperativas, etc. Por lo tanto, aunque este código no debe usarse como ejemplo de código idiomático bien escrito, no es del todo justo criticar de esa manera. – Landei

10

Ir es solo otro lenguaje imperativo que todavía está en pañales. A partir de ahora, Go no tiene genéricos. Además, no hay soporte para programación funcional.

C# es un lenguaje OO/imperativo con muy poco soporte para programación funcional. Tiene genéricos. La versión actual no admite las anotaciones de Covarianza y Contravarianza (aunque están planificadas para la próxima versión del idioma).

Scala es un lenguaje híbrido que intenta combinar lo mejor de ambos mundos (es decir, OO y funcional) en un idioma. Como se puede ver en la siguiente figura (Fuente: http://james-iry.blogspot.com/2010/05/types-la-chart.html), Scala tiene un sistema de archivos muy sofisticado, algo que tanto C# como Go carecen.

alt text http://www.pogofish.com/types.png

Así featurewise, Scala es la lengua más rica en características (considerando tanto OO y características funcionales) de los tres. C# proporciona algunas construcciones funcionales pero no está cerca de Scala. Y la comparación de IMO Ir con Scala/C# es como comparar el carro de bueyes con un Lamborghini.

+1

Si tuviera que colocar Go en el gráfico de arriba, lo colocaría un poco a la derecha de C. La posición vertical permanecería igual. –

+0

@Jay: es absurdo usar un carro de bueyes a través de la escala de calificación de Lamborghini para lenguajes de programación. Los lenguajes de programación son herramientas y, como cualquier herramienta, deben clasificarse según su aptitud para un propósito particular. Si desea despejar tierra de rocas y árboles, use un buey o un elefante, no un Lamborghini. Cuando cruzo un océano, prefiero un Boeing a un Lamborghini. La mayoría de los días, uso de 3 a 6 idiomas diferentes, usando el mejor idioma para un propósito determinado. – peterSO

+2

@peterSO: _ "Si quieres despejar tierra de rocas y árboles, usa un carro de bueyes o un elefante" _ _ - Piensa en la programación de bajo nivel como una tierra con rocas y árboles aquí. :) –

Cuestiones relacionadas