< Return to Video

Software II (11 mins)

  • 0:01 - 0:05
    Ya has visto pequeños trosos de código javascript
  • 0:05 - 0:08
    En esta sección, quiero hablar sobre lo que conecta ese mundo
  • 0:08 - 0:11
    con el código de máquina en el CPU
  • 0:11 - 0:14
    Así que esto será generalmente sobre el tema de los lenguajes informáticos.
  • 0:14 - 0:19
    Por lo tanto un programador trabaja en algunos lenguajes de programación.
  • 0:19 - 0:23
    Y se dice que los lenguajes de programación tienen funciones de alto nivel.
  • 0:23 - 0:27
    Y eso quiere decir, cosas como, bucles (loops), y si las sentencias "if"
  • 0:27 - 0:30
    y cadenas (strings) y aquellas facilidades que son más complicadas
  • 0:30 - 0:33
    y que están en un simple código de máquina en el CPU.
  • 0:33 - 0:36
    Por lo que el programador escribe lo que se denomina código fuente
  • 0:36 - 0:40
    en cualquier lenguaje de programación, que estén escribiendo
  • 0:40 - 0:42
    Aquí hay un ejemplo de algún código fuente de C++.
  • 0:42 - 0:46
    Esto asigna una cadena (string), a una variable y a continuación pone un
  • 0:46 - 0:49
    signo de exclamación (!) al final de la cadena.
  • 0:49 - 0:50
    Esto es un poco similar al código javascript que hemos visto.
  • 0:50 - 0:52
    Todos estos lenguajes a nivel de sintaxis
  • 0:52 - 0:54
    son un poco similares.
  • 0:54 - 1:03
    Así, um, ¿cómo se consigue que el código fuente de C++, digamos, se ejecute en la CPU?
  • 1:03 - 1:07
    una estrategia utiliza lo que se llama un compilador.
  • 1:07 - 1:10
    el compilador es un programa separado y lo que el
  • 1:10 - 1:14
    compilador hace es que mirar todo el código fuente
  • 1:14 - 1:19
    y hace una traducción mayor para crear un gran cuerpo de código máquina.
  • 1:19 - 1:23
    Así, por ejemplo, puede ser que haya una parte del código fuente,
  • 1:23 - 1:27
    donde hay una instrucción "if" y no hay una
  • 1:27 - 1:29
    instrucción específica de código máquina para una instruccion "if"
  • 1:29 - 1:31
    pero puede haber una secuencia de 5 instrucciones de código máquina
  • 1:31 - 1:34
    que de hecho constituyen una sentencia "if"
  • 1:34 - 1:37
    Por lo que el compilador hace ese tipo de expansión.
  • 1:37 - 1:41
    Así que, sólo como ejemplo, Firefox está escrito en C++.
  • 1:41 - 1:47
    Por lo tanto, para hacer una nueva versión de Firefox, alguien corre
  • 1:47 - 1:52
    el compilador de C++ y este lee en los muchos archivos fuentes,
  • 1:52 - 1:55
    el "gran cuerpo" de código fuente que conforma a firefox,
  • 1:55 - 1:57
    y básicamente produce firefox.exe
  • 1:57 - 2:00
    Firefox.exe es la salida del compilador al
  • 2:00 - 2:04
    traducir todo ese código fuente.
  • 2:04 - 2:07
    Un par de cosas a señalar es que,
  • 2:07 - 2:10
    la compilación sólo tiene que pasar una vez.
  • 2:10 - 2:12
    Así, algunos cuerpo de código fuente, alguien hace firefox.exe
  • 2:12 - 2:16
    y, a continuación, sólo puede enviarse firefox.exe
  • 2:16 - 2:18
    Los usuarios finales no necesita el código fuente y
  • 2:18 - 2:21
    no necesitan el compilador. Por lo que realmente se realiza la compilación
  • 2:21 - 2:26
    en la fábrica, de hecho. Otra característica es
  • 2:26 - 2:30
    no funciona al revés. Por lo que yo puedo distribuir firefox.exe
  • 2:30 - 2:34
    todas esta máquina código, pero no algo que
  • 2:34 - 2:37
    puede leer en e ir hacia atrás para darme un gran cuerpo de código fuente.
  • 2:37 - 2:39
    Al menos no perfectamente, puede hacerlo de modo imperfecto.
  • 2:39 - 2:42
    Lo ideal, para producir una inversión realmente desea
  • 2:42 - 2:45
    el código fuente. Por lo tanto, hablemos sobre el código fuente.
  • 2:45 - 2:52
    Por lo tanto, si desea agregar una funcionalidad o corregir un error en firefox, realmente
  • 2:52 - 2:54
    la forma de hacerlo es volver al código fuente,
  • 2:54 - 2:57
    y repasarlo, sólo una que he hecho en java script.
  • 2:57 - 2:58
    Así que añadir unas líneas o un si instrucción para cambiar algunos
  • 2:58 - 3:02
    comportamiento de alguna manera, en el código fuente y, a continuación, ejecutar
  • 3:02 - 3:04
    el compilador una vez más, de hecho para hacer una nueva versión de
  • 3:04 - 3:07
    Firefox que tiene este pequeño cambio que ha puesto
  • 3:07 - 3:11
    en el código fuente. Como estamos tomando sobre código fuente,
  • 3:11 - 3:14
    Esto también le da un buen sentido de qué abierto
  • 3:14 - 3:19
    software de origen significa. Un software de código abierto es una
  • 3:19 - 3:22
    formato donde se distribuye el programa, sino también
  • 3:22 - 3:26
    no hay acceso al código fuente original, a la
  • 3:26 - 3:28
    programa. Y esto viene normalmente con una licencia,
  • 3:28 - 3:30
    diciendo: ' Hey, aquí está el código fuente. Si desea
  • 3:30 - 3:33
    hacer su propia versión o corregir un error o lo que sea, este programa,
  • 3:33 - 3:37
    Siéntase libre. " Eso de las 2 principales características del software de código abierto
  • 3:37 - 3:43
    uno, normalmente se distribuye gratuitamente, por lo que saben, su barata. Pero el
  • 3:43 - 3:46
    otra característica es que viene con una especie de libertad.
  • 3:46 - 3:51
    Porque si el software es un código cerrado y
  • 3:51 - 3:53
    desea alguna característica diferente, hay que algunos fallos
  • 3:53 - 3:56
    necesario se aplique, usted realmente depende del proveedor, quien tiene la
  • 3:56 - 3:58
    código fuente, como bien-do se sienten como aplicación
  • 3:58 - 4:01
    ¿esa característica? En contraste con el software de código abierto,
  • 4:01 - 4:04
    es como que no hay esposas. El código fuente está disponible,
  • 4:04 - 4:07
    y si hay algo que realmente quieres hacer,
  • 4:07 - 4:10
    o decir que el proveedor original va fuera del negocio, entonces
  • 4:10 - 4:15
    porque tienes el código fuente, usted sabe, usted puede puede ser
  • 4:15 - 4:17
    pagar a alguien para hacer un cambio y producir sus propios
  • 4:17 - 4:20
    versión personalizada. Por lo que viene con este tipo de profundidad, uh-
  • 4:20 - 4:22
    puede considerar como una póliza de seguro.
  • 4:22 - 4:26
    A menudo hay muchos tipos diferentes de los términos de licencia
  • 4:26 - 4:29
    para un software de código abierto, pero, más a menudo
  • 4:29 - 4:31
    requieren en algunos casos, que si usted tomar sus
  • 4:31 - 4:35
    código fuente y agregar alguna característica, entonces debe ofrecer
  • 4:35 - 4:38
    esos cambios a la comunidad. Así, en el mismo
  • 4:38 - 4:40
    manera han beneficiado del otro trabajo, puede beneficiarse de su trabajo.
  • 4:40 - 4:44
    Los detalles de cómo se puede hacer es complicado.
  • 4:44 - 4:46
    Hay muchas formas diferentes de la misma.
  • 4:46 - 4:48
    Me vas a hablar del software de código abierto un
  • 4:48 - 4:49
    poco más tarde, sólo menciono esto ahora,
  • 4:49 - 4:51
    porque nos da la idea de lo que es el código fuente
  • 4:51 - 4:55
    del programa vs sólo tener el archivo .exe de algo.
  • 4:55 - 5:02
    Así que hasta el momento hablé acerca de C++, por lo que es esto
  • 5:02 - 5:05
    toda otra gran categoría de lenguas, que
  • 5:05 - 5:07
    Me va a llamar, lenguajes dinámicos o a veces
  • 5:07 - 5:11
    Idiomas de intérprete. Y esto es una especie de una gran prueba
  • 5:11 - 5:12
    estrategia y hay muchos idiomas diferentes con
  • 5:12 - 5:15
    muchas cualidades diferentes y yo apenas estoy va a ordenar de bulto,
  • 5:15 - 5:17
    tumor les en esta gran categoría.
  • 5:17 - 5:19
    Ejemplos de lenguajes dinámicos son actualmente Java,
  • 5:19 - 5:24
    Secuencia de comandos de Java y Python. Por lo tanto, va a una manera de que estos son
  • 5:24 - 5:27
    el trabajo es que se apliquen por lo que se llama
  • 5:27 - 5:30
    un intérprete. Supongo que el caso de compilador estaba tomando antes.
  • 5:30 - 5:36
    Un intérprete es un programa que toma en código escrito en algún lenguaje
  • 5:36 - 5:43
    y tipo de [inaudible] lo ejecuta. El mejor ejemplo es
  • 5:43 - 5:46
    hay este lenguaje informático llamado java script,
  • 5:46 - 5:49
    que realmente han estado utilizando y navegadores que son web
  • 5:49 - 5:52
    incluye programas como una parte de ellos, un java
  • 5:52 - 5:55
    intérprete de comandos. Y cuando viene el navegador web
  • 5:55 - 5:57
    a través de una página con código java script
  • 5:57 - 6:01
    puede utilizar el intérprete para ejecutar ese código para que sea
  • 6:01 - 6:06
    hacer todo lo que se va a hacer. Así que la forma del intérprete
  • 6:06 - 6:11
    obras son que trata con el programa 1 línea a la vez.
  • 6:11 - 6:14
    Así que aquí es un poco de código de secuencia de comandos de java,
  • 6:14 - 6:16
    Si el intérprete quería ejecutar este, bien
  • 6:16 - 6:18
    se verá en la primera línea y a mirar
  • 6:18 - 6:20
    lo que dice esa línea y, a continuación, el intérprete
  • 6:20 - 6:22
    lo haría. Así que en este caso, el intérprete dirá,
  • 6:22 - 6:24
    UH-así que supongo que necesito una variable denominada A, y
  • 6:24 - 6:26
    Necesito poner un 1 en ella. Así que una vez se realiza con esa línea
  • 6:26 - 6:29
    luego va hacia adelante, y lo hace la siguiente línea.
  • 6:29 - 6:33
    Y así sucesivamente. Lo mismo ocurre con el compilador de este gran grueso
  • 6:33 - 6:37
    traducción del código fuente en el código de máquina
  • 6:37 - 6:38
    Pero no realmente está ejecutando el código, su justo
  • 6:38 - 6:40
    haciendo la traducción para ejecutarse en el futuro.
  • 6:40 - 6:43
    Por el contrario intérprete vive realmente en el momento.
  • 6:43 - 6:45
    Sólo pasando por el código línea por línea y sólo
  • 6:45 - 6:49
    hacerlo. Así que permítanme hablar un poco sobre las diferencias
  • 6:49 - 6:53
    entre estos dos. Debo decir como una renuncia,
  • 6:53 - 6:56
    Hay muchos lenguajes de programación, no hay ninguna mejor
  • 6:56 - 6:59
    el viejo chiste de lenguaje, es que realmente saben,
  • 6:59 - 7:01
    cuando estás en el seminario y cuando estás
  • 7:01 - 7:02
    argumentando sobre los pros y los contras de algo,
  • 7:02 - 7:05
    en última instancia, la respuesta es simplemente, depende.
  • 7:05 - 7:08
    Como no hay ninguna mejores idiomas, pero bien lo que es
  • 7:08 - 7:09
    los idiomas mejores esta situación, con todos los
  • 7:09 - 7:13
    características. Tan ampliamente hablando, código de compilador justo
  • 7:13 - 7:17
    tiende a correr más rápido. Cuando se compila un código de C++
  • 7:17 - 7:19
    y producir ese .exe, es una especie de en un sentido magro,
  • 7:19 - 7:24
    gran cantidad de detalles y decisiones ha sido despojado
  • 7:24 - 7:27
    tanto como sea posible. Por otro lado dinámico o
  • 7:27 - 7:31
    idiomas de intérprete, tienden a tener más funciones.
  • 7:31 - 7:33
    Más funciones que hace el trabajo del programador un
  • 7:33 - 7:36
    poco más fácil. O puesto de otra manera, ampliamente
  • 7:36 - 7:39
    hablando, el programador puede tienden a hacer más trabajo
  • 7:39 - 7:42
    por hora, en lenguajes dinámicos, que lo hacen en la compilación
  • 7:42 - 7:47
    Idiomas. Sin embargo hay no hay almuerzo gratis, es
  • 7:47 - 7:50
    también el caso de que el código de lenguaje dinámico tiende a
  • 7:50 - 7:53
    ejecutar más lento de la CPU en términos de sólo obtener sólo
  • 7:53 - 7:57
    el trabajo realizado, en comparación con las lenguas de compilador.
  • 7:57 - 7:59
    Código de fuente del compilador se va a hacer lo mismo.
  • 7:59 - 8:05
    Así que un ejemplo de esto, es un gran ejemplo de esto,
  • 8:05 - 8:07
    Administración de memoria. Por lo que la administración de memoria se refiere a la
  • 8:07 - 8:10
    problema en el código de saber cuántos bytes son
  • 8:10 - 8:12
    ¿necesarios para almacenar algo y, en particular por cuánto tiempo?
  • 8:12 - 8:16
    Bueno necesito esos bytes para la línea 6, sabes, pero
  • 8:16 - 8:18
    quizás en la línea 20, y no necesitan ya
  • 8:18 - 8:21
    y realmente puedo reutilizarlos para algo más.
  • 8:21 - 8:23
    Y en realidad es un problema de tipo de complicted.
  • 8:23 - 8:27
    En c y C++, administración de memoria es un grado
  • 8:27 - 8:30
    Manual. y eso sólo significa que el programador
  • 8:30 - 8:31
    se están produciendo todas estas líneas de códigos para cosas
  • 8:31 - 8:33
    y va a ser a veces, cuando puede tener a
  • 8:33 - 8:36
    agregar algunas líneas para hacer algún pensamiento, para ayudar a la Guía
  • 8:36 - 8:38
    la administración de la memoria. Así que hay algunos
  • 8:38 - 8:41
    esfuerzo de programador requerido. En contraste, la mayoría
  • 8:41 - 8:44
    lenguajes dinámicos tienen lo que se llama, automático
  • 8:44 - 8:47
    Administración de memoria. Y esto significa que, no
  • 8:47 - 8:53
    entrada de programador es necesario. El lenguaje se va
  • 8:53 - 8:57
    a notar automáticamente, cuando se necesita memoria,
  • 8:57 - 8:58
    Cuando memoria no es necesaria ya,
  • 8:58 - 9:03
    puede ser reciclado y eche en ese conjunto
  • 9:03 - 9:05
    problema. Por lo tanto, esto encaja dentro de la tendencia de
  • 9:05 - 9:07
    lenguajes dinámicos que estaba mencionando anteriormente,
  • 9:07 - 9:09
    Por eso, este un ejemplo de cómo, bueno, ya sabes, porque
  • 9:09 - 9:12
    el programador tiene menos que ver, son capaces de justo
  • 9:12 - 9:14
    obtener cosas hecho un poco más rápido. Administración de memoria tan
  • 9:14 - 9:16
    es un gran ejemplo de ello. Sin embargo también se puede imaginar
  • 9:16 - 9:17
    Esta es una de las cosas que hace dinámico
  • 9:17 - 9:19
    código de idioma ejecutar un poco más lento. Porque,
  • 9:19 - 9:23
    la CPU tiene ahora suggestional libro manteniendo el problema,
  • 9:23 - 9:25
    donde su mirando la memoria y tratando de
  • 9:25 - 9:28
    figura fuera, cuando puede ser reutilizado. Por lo tanto, muy amplia
  • 9:28 - 9:32
    hablando, la tendencia para el equipo de programación hoy
  • 9:32 - 9:37
    es hacia los lenguajes dinámicos. El rasgo que la
  • 9:37 - 9:41
    programador obtendrá un liitle rápido, cosas
  • 9:41 - 9:43
    a expensas de utilizar un poco más CPU o más
  • 9:43 - 9:46
    memoria, es un equilibrio bastante atractivo para
  • 9:46 - 9:49
    muchos de los problemas. Esto puede ser un poco intuitiva,
  • 9:49 - 9:52
    pero se puede pensar lo que es la escasa calidad,
  • 9:52 - 9:55
    para un programa de ordenador y muchas veces es el
  • 9:55 - 9:59
    programador, que tenga programador experto trabajando
  • 9:59 - 10:01
    en que, sabes, trabajando en este dominio, mucho
  • 10:01 - 10:06
    de los tiempos son difíciles de encontrar. Y así
  • 10:06 - 10:09
    sus horas, es decir, utilizando algunas de sus horas,
  • 10:09 - 10:13
    luce atractivo, en contraste, la CPU siempre
  • 10:13 - 10:14
    quiero trabajar tan rápido como sea posible, pero
  • 10:14 - 10:17
    CPUs son bastante barato y bastante eficaz
  • 10:17 - 10:19
    y hay incluso este efecto curioso donde esta Moore
  • 10:19 - 10:24
    Derecho, sigue haciendo más cierto, donde la CPU cada año obtiene más barata
  • 10:24 - 10:27
    y si pensamos en el equilibrio entre el programador
  • 10:27 - 10:29
    costo y el costo de CPU de conseguir algo,
  • 10:29 - 10:32
    Esto significa en términos de la parte del pastel,
  • 10:32 - 10:33
    el programador de hecho cada vez más caro
  • 10:33 - 10:36
    cada año, un poco más escaso. Por lo que estos se ajusta
  • 10:36 - 10:41
    en el patrón. En el conjunto de los lenguajes dinámicos
  • 10:41 - 10:44
    se están volviendo populares. La última cosa que será
  • 10:44 - 10:47
    mención es que existe una cosa llamada "JIT",
  • 10:47 - 10:50
    un compilador Just In Time. Y este tipo de
  • 10:50 - 10:53
    la síntesis natural del compilador e intérprete
  • 10:53 - 10:55
    estrategias, de tratar de obtener lo mejor de ambos mundos.
  • 10:55 - 10:57
    Tan su parecido, bueno, nos gustaría tener un lenguaje dinámico,
  • 10:57 - 10:59
    con todas estas funciones, todas estas favorables de programador
  • 10:59 - 11:02
    características, pero nos quieren correr rápido. Y así
  • 11:02 - 11:05
    Este JIT tomar partes del código y probar
  • 11:05 - 11:07
    y compilar sobre la marcha. Por lo que trata de una especie de
  • 11:07 - 11:12
    para casarse con dos de ellos. Resulta funciona
  • 11:12 - 11:15
    bastante bien. Así que todos los navegadores tienen ahora
  • 11:15 - 11:19
    JITs para código de secuencia de comandos de Java. Así que realmente cuando usted
  • 11:19 - 11:22
    está ejecutando código Java Script en esta clase,
  • 11:22 - 11:25
    dentro del explorador había un JIT que estaba en el
  • 11:25 - 11:28
    mosca, teniendo esos trozos de código Java Script y
  • 11:28 - 11:32
    compilarlos sobre la marcha, en el código de máquina.
  • 11:32 - 11:35
    De todos modos, no obtendrá exactamente los formatos del compilador
  • 11:35 - 11:39
    código, pero se obtiene bastante estrecha. SO. Esto es realmente
  • 11:39 - 11:42
    Cómo funciona la mayoría de los lenguajes dinámicos. Es un activo
  • 11:42 - 11:44
    área de investigación. Pero parece que funciona bastante bien.
Title:
Software II (11 mins)
Description:

It is extremely rare to write machine code by hand. Instead, a programmer writes code in a more "high level" computer language with features that are more useful and powerful than the simple operations found in machine code.

more » « less
Video Language:
English

Spanish subtitles

Revisions