1 00:00:01,269 --> 00:00:04,569 Você já viu pequeno código javascript trosos 2 00:00:04,569 --> 00:00:08,119 Nesta seção, eu falo sobre o que conecta o mundo 3 00:00:08,119 --> 00:00:11,431 com o código de máquina na CPU 4 00:00:11,431 --> 00:00:13,595 Portanto, este será geralmente sobre o tema das linguagens de computador. 5 00:00:13,595 --> 00:00:18,682 Portanto, um programador trabalhando em algumas linguagens de programação. 6 00:00:18,682 --> 00:00:23,080 Diz-se que as linguagens de programação são funções de alto nível. 7 00:00:23,080 --> 00:00:27,020 E isso significa coisas como loops (ciclos), e se o "se" declarações 8 00:00:27,020 --> 00:00:30,032 e strings (cordas) e as instalações que são mais complicados 9 00:00:30,032 --> 00:00:32,512 e estão em um código de máquina única na CPU. 10 00:00:32,512 --> 00:00:36,298 Assim que o desenvolvedor escreve o que é chamado de código fonte 11 00:00:36,298 --> 00:00:39,515 em qualquer linguagem de programação que você está escrevendo 12 00:00:39,776 --> 00:00:42,498 Aqui é um exemplo de um código-fonte C + +. 13 00:00:42,498 --> 00:00:45,769 Isso aloca uma string (string), uma variável e, em seguida, coloca uma 14 00:00:45,769 --> 00:00:48,765 ponto de exclamação (!) no final da cadeia. 15 00:00:48,765 --> 00:00:50,218 Isto é algo semelhante ao código javascript que temos visto. 16 00:00:50,218 --> 00:00:52,465 Todas essas línguas ao nível da sintaxe 17 00:00:52,465 --> 00:00:54,166 são um tanto semelhante. 18 00:00:54,166 --> 00:01:02,805 Então, hum, como você obter o código fonte para C + +, por exemplo, em execução no CPU? 19 00:01:02,805 --> 00:01:06,735 estratégia usa o que é chamado de compilador. 20 00:01:06,735 --> 00:01:09,973 o compilador é um programa separado e que a 21 00:01:09,973 --> 00:01:13,597 compilador é olhar para todo o código fonte 22 00:01:13,597 --> 00:01:18,576 e faz com que uma tradução grande para criar uma grande corpo de código de máquina. 23 00:01:18,576 --> 00:01:23,155 Por exemplo, pode haver uma parte da fonte, 24 00:01:23,155 --> 00:01:26,967 onde há um "if" e não 25 00:01:26,967 --> 00:01:28,922 instruções específicas para uma instrução de código de máquina "se" 26 00:01:28,922 --> 00:01:31,002 mas pode haver uma sequência de instruções máquina 5 27 00:01:31,002 --> 00:01:33,726 que é na verdade um "se" 28 00:01:33,726 --> 00:01:36,515 Assim, o compilador faz esse tipo de expansão. 29 00:01:36,515 --> 00:01:40,923 Assim, apenas como exemplo, o Firefox é escrito em C + +. 30 00:01:40,923 --> 00:01:47,094 Portanto, para fazer uma nova versão do Firefox, alguém está 31 00:01:47,094 --> 00:01:51,909 o C + + e ele lê em diversos arquivos de fontes, 32 00:01:51,909 --> 00:01:54,594 o "corpo grande" do código-fonte que está em conformidade com o Firefox, 33 00:01:54,594 --> 00:01:57,156 e produz basicamente firefox.exe 34 00:01:57,156 --> 00:02:00,159 Firefox.exe é a saída do compilador para 35 00:02:00,159 --> 00:02:03,620 traduzir todo o código fonte. 36 00:02:03,620 --> 00:02:06,859 Algumas coisas a se notar é que, 37 00:02:06,859 --> 00:02:09,880 compilar basta passar uma vez. 38 00:02:09,880 --> 00:02:12,185 Assim, um corpo de código-fonte, alguém faz firefox.exe 39 00:02:12,185 --> 00:02:15,885 e, em seguida, ser enviado firefox.exe 40 00:02:15,885 --> 00:02:18,448 Os usuários finais não precisa do código-fonte e 41 00:02:18,448 --> 00:02:20,609 não exigir que o compilador. Ele realmente faz a compilação 42 00:02:20,609 --> 00:02:26,124 fábrica, na verdade. Outra característica é 43 00:02:26,124 --> 00:02:30,381 não funciona em sentido inverso. Para que eu possa distribuir firefox.exe 44 00:02:30,381 --> 00:02:34,295 Todo o código desta máquina, mas não algo que 45 00:02:34,295 --> 00:02:36,899 pode ler e voltar a dar-me um grande corpo de código-fonte. 46 00:02:36,899 --> 00:02:38,879 Pelo menos não perfeitamente, você pode fazê-lo de modo imperfeito. 47 00:02:38,879 --> 00:02:41,981 Idealmente, para produzir um investimento realmente quer 48 00:02:41,981 --> 00:02:44,761 o código-fonte. Então vamos falar sobre o código fonte. 49 00:02:44,761 --> 00:02:51,947 Portanto, se você deseja adicionar funcionalidade ou corrigir um bug no firefox, realmente 50 00:02:51,947 --> 00:02:53,965 o caminho é de volta para o código-fonte, 51 00:02:53,965 --> 00:02:56,591 e revê-lo, só que eu fiz em java script. 52 00:02:56,591 --> 00:02:58,266 Então adicione uma linha ou um comando if para alterar algumas 53 00:02:58,266 --> 00:03:01,664 comportamento de alguma forma, no código fonte e depois executar 54 00:03:01,664 --> 00:03:03,653 o compilador mais uma vez, na verdade, para fazer uma nova versão do 55 00:03:03,653 --> 00:03:07,143 Firefox tem esta pequena alteração tem 56 00:03:07,143 --> 00:03:10,971 no código fonte. Uma vez que estamos tendo em código-fonte, 57 00:03:10,971 --> 00:03:14,414 Isso também dá uma boa noção de como aberto 58 00:03:14,414 --> 00:03:18,870 software de código significa. Um software de código aberto é um 59 00:03:18,870 --> 00:03:21,860 formato que distribui o programa, mas também 60 00:03:21,860 --> 00:03:25,742 sem acesso à fonte original, o 61 00:03:25,742 --> 00:03:27,734 o programa. Isso normalmente vem com uma licença, 62 00:03:27,734 --> 00:03:29,714 dizendo: 'Ei, aqui está o código fonte. Se você quiser 63 00:03:29,714 --> 00:03:32,879 fazer sua própria versão ou corrigir um erro ou qualquer outra coisa, este programa 64 00:03:32,879 --> 00:03:36,755 Sinta-se livre. "Isso dos 2 principais características do software de código aberto 65 00:03:36,755 --> 00:03:42,555 uma distribuição normal de graça, para você saber, o seu barato. Mas 66 00:03:42,555 --> 00:03:45,985 Outra característica é que ele vem com um tipo de liberdade. 67 00:03:45,985 --> 00:03:50,944 Porque se o software é de código fechado e 68 00:03:50,944 --> 00:03:52,941 quero uma característica diferente, houve algumas falhas 69 00:03:52,941 --> 00:03:55,671 necessário aplicar, você realmente depende do provedor, que tem a 70 00:03:55,671 --> 00:03:58,311 código fonte, bem, eles se sentem como a aplicação 71 00:03:58,311 --> 00:04:01,097 Será que esse recurso? Em contraste com o software de fonte aberta, 72 00:04:01,097 --> 00:04:04,182 é como não esposas. O código fonte está disponível, 73 00:04:04,182 --> 00:04:06,861 e se há algo que você realmente quer fazer, 74 00:04:06,861 --> 00:04:10,060 ou dizer que o fornecedor original sai do negócio, em seguida, 75 00:04:10,060 --> 00:04:15,029 porque você tem o código-fonte, você sabe, você pode ser 76 00:04:15,029 --> 00:04:17,321 pagar alguém para fazer uma mudança e produzir sua própria 77 00:04:17,321 --> 00:04:19,577 versão personalizada. Para o que vem com esse tipo de profundidade, uh- 78 00:04:19,577 --> 00:04:21,649 pode ser considerado como uma apólice de seguro. 79 00:04:21,649 --> 00:04:26,142 Muitas vezes, há muitos tipos diferentes de termos de licença 80 00:04:26,142 --> 00:04:28,796 para software de código aberto, mas mais frequentemente 81 00:04:28,796 --> 00:04:31,015 necessária em alguns casos, se você levar o seu 82 00:04:31,015 --> 00:04:34,937 código-fonte e adicionar um recurso, em seguida, ele deve oferecer 83 00:04:34,937 --> 00:04:37,564 essas alterações para a comunidade. Assim, no mesmo 84 00:04:37,564 --> 00:04:39,767 forma se beneficiaram de um outro emprego, você pode se beneficiar de seu trabalho. 85 00:04:39,767 --> 00:04:43,644 Os detalhes de como você pode fazer é complicado. 86 00:04:43,644 --> 00:04:45,842 Existem muitas formas diferentes da mesma. 87 00:04:45,842 --> 00:04:47,530 Eu vou falar sobre um software de código aberto 88 00:04:47,530 --> 00:04:48,855 pouco mais tarde, eu só mencionei isso agora, 89 00:04:48,855 --> 00:04:51,186 porque nos dá a idéia do que é o código fonte 90 00:04:51,186 --> 00:04:54,602 programa contra apenas ter o algo. exe. 91 00:04:54,602 --> 00:05:01,681 Até agora eu falei sobre C + +, assim é esta 92 00:05:01,681 --> 00:05:04,771 qualquer outra grande categoria de línguas que 93 00:05:04,771 --> 00:05:07,218 Eu vou chamar, ou linguagens dinâmicas, por vezes, 94 00:05:07,218 --> 00:05:11,392 Interpretador da linguagem. E esta é uma espécie de um grande teste 95 00:05:11,392 --> 00:05:12,436 estratégia e há muitas línguas diferentes, com 96 00:05:12,436 --> 00:05:15,233 muitas qualidades diferentes e eu estou indo só para classificar de caroço, 97 00:05:15,233 --> 00:05:17,156 tumor são nesta classe grande. 98 00:05:17,156 --> 00:05:19,453 Exemplos de linguagens dinâmicas estão atualmente Java, 99 00:05:19,453 --> 00:05:24,389 Java Script, e Python. Por conseguinte, vai para uma forma que estes são 100 00:05:24,389 --> 00:05:26,506 trabalho é para ser aplicado pelo que é chamado 101 00:05:26,506 --> 00:05:30,293 um intérprete. Eu acho que o compilador se você estivesse tomando antes. 102 00:05:30,293 --> 00:05:36,156 Um intérprete é um programa que leva o código escrito em qualquer idioma 103 00:05:36,156 --> 00:05:42,729 e tipo de [inaudível] é executado. O melhor exemplo é 104 00:05:42,729 --> 00:05:45,703 é a linguagem de computador chamado java script, 105 00:05:45,703 --> 00:05:49,271 na verdade, têm vindo a utilizar e navegadores web são 106 00:05:49,271 --> 00:05:52,017 inclui programas como uma parte deles, um java 107 00:05:52,017 --> 00:05:55,148 shell. E quando vem para o navegador web 108 00:05:55,148 --> 00:05:57,471 através de uma página com código java script 109 00:05:57,471 --> 00:06:00,604 pode usar o shell para executar esse código a ser 110 00:06:00,604 --> 00:06:06,015 fazer tudo o que vai fazer. Assim, a forma como o interpretador 111 00:06:06,015 --> 00:06:10,808 obras estão lidando com a agenda da linha 1 de cada vez. 112 00:06:10,808 --> 00:06:13,891 Então aqui está algum código java script, 113 00:06:13,891 --> 00:06:16,138 Se o jogador queria correr esse bem 114 00:06:16,138 --> 00:06:17,726 ser visto na primeira linha e para procurar 115 00:06:17,726 --> 00:06:19,669 que diz que linha e, em seguida, o intérprete 116 00:06:19,669 --> 00:06:22,259 Eu o faria. Assim, neste caso, o intérprete dizer, 117 00:06:22,259 --> 00:06:24,181 UH-Então eu acho que preciso de uma variável chamada A, e 118 00:06:24,181 --> 00:06:25,992 Eu preciso colocar um 1 na mesma. Assim, uma vez feito com que a linha 119 00:06:25,992 --> 00:06:28,531 em seguida, indo para a frente, e assim que faz a linha seguinte. 120 00:06:28,531 --> 00:06:32,647 E assim por diante. O mesmo se aplica para o compilador do grande volume 121 00:06:32,647 --> 00:06:36,718 tradução de código fonte em código de máquina 122 00:06:36,718 --> 00:06:38,076 Mas isso realmente está executando o código, apenas a sua 123 00:06:38,076 --> 00:06:39,657 fazendo a tradução para executar no futuro. 124 00:06:39,657 --> 00:06:42,848 Por outro lado intérprete realmente viver o momento. 125 00:06:42,848 --> 00:06:45,144 Somente através do código linha por linha e só 126 00:06:45,144 --> 00:06:49,392 fazer. Então deixe-me falar um pouco sobre as diferenças 127 00:06:49,392 --> 00:06:53,283 entre estes dois. Devo dizer que como um aviso legal, 128 00:06:53,283 --> 00:06:55,773 Existem muitas linguagens de programação, não há melhor 129 00:06:55,773 --> 00:06:59,418 a velha piada sobre a linguagem é que realmente sabe, 130 00:06:59,418 --> 00:07:00,769 quando você está no seminário e quando você 131 00:07:00,769 --> 00:07:01,916 discutindo sobre os prós e contras de algo, 132 00:07:01,916 --> 00:07:04,871 finalmente, a resposta é simples, depende. 133 00:07:04,871 --> 00:07:08,106 Como não há melhor linguagem, mas sim o que é 134 00:07:08,106 --> 00:07:09,483 Melhores idiomas esta situação, todos os 135 00:07:09,483 --> 00:07:13,336 características. Então, em termos gerais, apenas o código compilador 136 00:07:13,336 --> 00:07:16,724 tende a correr mais rápido. Quando você compilar um código C + + 137 00:07:16,724 --> 00:07:19,426 e produzir isso. exe é um tipo de carne magra em uma direção, 138 00:07:19,426 --> 00:07:23,747 muitos detalhes e decisões tem sido despojado 139 00:07:23,747 --> 00:07:26,886 , tanto quanto possível. Além disso dinâmico ou 140 00:07:26,886 --> 00:07:30,714 intérprete de linguagem, tendem a ter mais recursos. 141 00:07:30,714 --> 00:07:32,964 Mais recursos do que faz o trabalho de um programador 142 00:07:32,964 --> 00:07:35,844 pouco mais fácil. Ou dito de outra forma, amplamente 143 00:07:35,844 --> 00:07:39,197 falando, o programador pode tendem a fazer mais trabalho 144 00:07:39,197 --> 00:07:41,907 por hora, linguagens dinâmicas, que fazem na compilação 145 00:07:41,907 --> 00:07:46,811 Idiomas. Entretanto, não há almoço grátis, é 146 00:07:46,811 --> 00:07:49,783 também o caso que o código de linguagem dinâmica tende a 147 00:07:49,783 --> 00:07:52,660 ficar mais lento do que o CPU em termos de apenas ficando apenas 148 00:07:52,660 --> 00:07:57,232 o trabalho realizado, em comparação com as línguas do compilador. 149 00:07:57,232 --> 00:07:59,344 Código-fonte do compilador vai fazer o mesmo. 150 00:07:59,344 --> 00:08:04,848 Então, um exemplo disso é um grande exemplo disso, 151 00:08:04,848 --> 00:08:06,884 Gerenciamento de memória. Por meio do qual a gestão de memória refere-se à 152 00:08:06,884 --> 00:08:09,868 problema no código de quantos bytes são 153 00:08:09,868 --> 00:08:12,285 ¿Necessário para armazenar algo em particular e por quanto tempo? 154 00:08:12,285 --> 00:08:16,173 Bem, eu preciso desses bytes para a linha 6, você sabe, mas 155 00:08:16,173 --> 00:08:18,276 talvez na linha 20, e não precisa mais 156 00:08:18,276 --> 00:08:20,593 e realmente eu possa reutilizar por outra coisa. 157 00:08:20,593 --> 00:08:23,144 E na verdade é um tipo de problema complicted. 158 00:08:23,144 --> 00:08:27,006 Em C e C + +, gerenciamento de memória é um grau 159 00:08:27,006 --> 00:08:29,773 Handbook. e isso apenas significa que o programador 160 00:08:29,773 --> 00:08:31,315 estão ocorrendo todas estas linhas de código para as coisas 161 00:08:31,315 --> 00:08:33,329 e será, por vezes, quando você pode ter um 162 00:08:33,329 --> 00:08:35,554 adicionar algumas linhas para fazer algum pensamento, para ajudar a orientar 163 00:08:35,554 --> 00:08:38,174 o gerenciamento de memória. Portanto, há alguns 164 00:08:38,174 --> 00:08:41,437 esforço programador necessário. Em contraste, a maioria 165 00:08:41,437 --> 00:08:43,925 Linguagens dinâmicas têm o que é chamado automático 166 00:08:43,925 --> 00:08:46,869 Gerenciamento de memória. E isto significa que, 167 00:08:46,869 --> 00:08:53,009 Entrada programador é necessário. A linguagem vai 168 00:08:53,009 --> 00:08:56,944 automaticamente notar quando a memória é necessária, 169 00:08:56,944 --> 00:08:58,064 Quando a memória não é necessário porque, 170 00:08:58,064 --> 00:09:03,489 podem ser reciclados e tomar a este conjunto 171 00:09:03,489 --> 00:09:04,805 problema. Portanto, se encaixa no interior da tendência dos 172 00:09:04,805 --> 00:09:06,976 linguagens dinâmicas foi mencionando anteriormente, 173 00:09:06,976 --> 00:09:09,405 Portanto, este é um exemplo de como, bem, você sabe, porque 174 00:09:09,405 --> 00:09:11,735 o programador tem menos a ver, eles podem apenas 175 00:09:11,735 --> 00:09:13,526 fazer as coisas um pouco mais rápido. Como o gerenciamento de memória 176 00:09:13,526 --> 00:09:15,735 é um grande exemplo. No entanto também pode imaginar 177 00:09:15,735 --> 00:09:17,189 Esta é uma das coisas que torna dinâmica 178 00:09:17,189 --> 00:09:19,060 código de idioma correr um pouco mais lento. Porque, 179 00:09:19,060 --> 00:09:22,914 o CPU agora tem livro suggestional mantendo problema 180 00:09:22,914 --> 00:09:25,292 olhando para onde a sua memória e tentar 181 00:09:25,292 --> 00:09:27,841 descobrir quando ele pode ser reutilizado. Por conseguinte, muito amplo 182 00:09:27,841 --> 00:09:32,320 falando, a tendência para a equipe de programação de hoje 183 00:09:32,320 --> 00:09:37,047 é para linguagens dinâmicas. A característica de que o 184 00:09:37,047 --> 00:09:40,776 programador conseguir algumas coisas Liitle rápidas 185 00:09:40,776 --> 00:09:43,242 à custa da utilização de uma CPU ou mais bits 186 00:09:43,242 --> 00:09:45,930 memória é um equilíbrio muito atraente 187 00:09:45,930 --> 00:09:49,162 muitos dos problemas. Este pode ser um pouco intuitivo, 188 00:09:49,162 --> 00:09:51,874 mas você pode pensar que a má qualidade 189 00:09:51,874 --> 00:09:54,876 para um programa de computador e é muitas vezes o 190 00:09:54,876 --> 00:09:59,389 programador, que tem programador experiente trabalhando 191 00:09:59,389 --> 00:10:01,204 que, você sabe, a trabalhar neste campo, muito 192 00:10:01,204 --> 00:10:06,287 das vezes são difíceis de encontrar. E assim 193 00:10:06,287 --> 00:10:09,105 suas horas, ou seja, usando algumas de suas horas, 194 00:10:09,105 --> 00:10:12,635 tem uma aparência atraente, em contraste, a CPU sempre 195 00:10:12,635 --> 00:10:13,929 Eu quero trabalhar o mais rapidamente possível, mas 196 00:10:13,929 --> 00:10:17,424 CPUs são muito barato e bastante eficaz 197 00:10:17,424 --> 00:10:19,073 e este efeito é ainda curioso onde este Moore 198 00:10:19,073 --> 00:10:24,255 Lei, é cada vez mais certo, onde a CPU fica mais barato a cada ano 199 00:10:24,255 --> 00:10:27,230 e se pensarmos o equilíbrio entre o programador 200 00:10:27,230 --> 00:10:29,184 custo e CPU custo de obter algo, 201 00:10:29,184 --> 00:10:31,781 Isto significa em termos de fatia do bolo, 202 00:10:31,781 --> 00:10:33,477 o programador se tornar cada vez mais caro 203 00:10:33,477 --> 00:10:36,169 cada ano um pouco mais escassos. Então, esses ajustes 204 00:10:36,169 --> 00:10:41,364 no padrão. Em todas as linguagens dinâmicas 205 00:10:41,364 --> 00:10:43,829 estão se tornando populares. A última coisa que será 206 00:10:43,829 --> 00:10:46,561 mencionar é que existe algo chamado "JIT" 207 00:10:46,561 --> 00:10:50,144 Just In compilador Time. E este tipo de 208 00:10:50,144 --> 00:10:52,646 o compilador síntese natural e intérprete 209 00:10:52,646 --> 00:10:54,772 estratégias, tentando obter o melhor dos dois mundos. 210 00:10:54,772 --> 00:10:56,795 Assim, seu gosto, bem, nós gostaríamos de uma linguagem dinâmica 211 00:10:56,795 --> 00:10:58,693 com todas estas características, todos estes programador favorável 212 00:10:58,693 --> 00:11:02,019 características, mas queremos correr rápido. E assim 213 00:11:02,019 --> 00:11:04,541 Este JIT assumir o código e teste 214 00:11:04,541 --> 00:11:07,086 e compilar na mosca. Por isso, é uma espécie de 215 00:11:07,086 --> 00:11:11,831 se casar com duas delas. Ele funciona 216 00:11:11,831 --> 00:11:14,629 bastante bem. Assim, todos os navegadores têm agora 217 00:11:14,629 --> 00:11:18,695 EIC para código Java script. Então, realmente quando você 218 00:11:18,695 --> 00:11:22,316 O código JavaScript executado nesta classe, 219 00:11:22,316 --> 00:11:24,616 dentro do navegador era um JIT que estava no 220 00:11:24,616 --> 00:11:28,408 voar, tendo aqueles pedaços de código e Java Script 221 00:11:28,408 --> 00:11:31,614 compilar em tempo real, em código de máquina. 222 00:11:31,614 --> 00:11:35,362 De qualquer forma, não será exatamente formatos compilador 223 00:11:35,362 --> 00:11:39,041 código, mas você chegar muito perto. OS. Isto é realmente 224 00:11:39,041 --> 00:11:41,983 Como as linguagens mais dinâmicas. Ele é um ativo 225 00:11:41,983 --> 00:11:44,390 área de pesquisa. Mas parece funcionar muito bem.