Выбрать главу

#!/bin/sh

language=0

echo "Language $language: I am the shell. So there."

Если вы сохраните этот файл под именем meh.sh и запустите его с помощью команды sh meh.sh, то на экране увидите следующее:

Language 0: I am the shell. So there.

Старые добрые С и С++ являются довольно низкоуровневыми языками программирования, которыми пользуются в том случае, когда важна скорость. Их труднее выучить, и вам придется отслеживать множество деталей, что может привести к падениям программы и проблемам, которые трудно диагностировать. Так выглядит небольшая программа на языке С:

#include <stdio.h>

int main(int argc, char *argv[]) {

····int language = 1;

····printf("Language %d: I am C! Behold me and tremble!\n", language);

····return 0;

}

С++ происходит из одного семейства с С, но имеет несколько отличительных особенностей:

#include <iostream>

using namespace std;

int main() {

····int language = 2;

····cout << "Language " << language << \

·······": I am C++!··Pay no attention to that C behind the curtain!" << \

·······endl;

····return(0);

}

Java и C# являются преемниками языков С и С++, избавленными от некоторых проблем предшественников. Однако они немного избыточны и ограничительны. Следующий пример написан на Java:

public class Overlord {

····public static void main (String[] args) {

········int language = 3;

········System.out.format("Language %d: I am Java! Scarier than C!\n", language);

····}

}

Если вы никогда не писали программ ни на одном из этих языков, вам может быть интересно, что все это такое. Некоторые языки нагружены значительным синтаксическим багажом. Их иногда называют статическими языками, поскольку они требуют, чтобы вы указали компьютеру некоторые низкоуровневые детали. Позвольте мне объяснить.

Языки программирования имеют переменные — имена значений, которые вы хотите использовать в программе. Статические языки заставляют вас указывать тип каждой переменной, который определяет, сколько места переменная займет в памяти и что с ней можно сделать. Компьютер использует эту информацию, чтобы скомпилировать программу в очень низкоуровневый машинный язык (характерный для определенного аппаратного обеспечения, машины понимают его лучше, а люди — хуже). Дизайнеры языков программирования часто должны решать, кому их язык должен быть понятнее: людям или компьютерам. Объявление типов переменных помогает компьютеру найти некоторые ошибки и работать быстрее, но это требует предварительного продумывания и набора кода. Бо́льшая часть кода примеров, написанного на языках С, С++ и Java, требует объявления типов переменных. Например, в каждом из примеров объявление типа int было необходимо для того, чтобы переменная language считалась целым числом. (Другие типы включают в себя числа с плавающей точкой, вроде 3.14159, и символьные или текстовые данные, которые хранятся по-разному.)

Почему же они называются статическими языками? Потому что переменные в этих языках не могут изменять свой тип, они статичны. Целое число — это целое число, раз и навсегда.

Динамические языки — полная противоположность статических (они также называются скриптовыми языками). Эти языки программирования не заставляют вас определять тип переменной перед тем, как ее использовать. Если вы напишете что-то вроде x = 5, динамический язык определит, что 5 — это целое число, поэтому переменная x имеет тип int. Эти языки позволяют вам достичь большего, написав меньшее количество строк кода. Вместо того чтобы компилироваться, они интерпретируются программой, которая называется — сюрприз! — интерпретатором. Динамические языки обычно медленнее, чем статические, но их скорость повышается, поскольку интерпретаторы становятся более оптимизированными. Долгое время динамические языки использовались для коротких программ (сценариев), которые часто предназначались для того, чтобы подготовить данные для обработки более длинными программами, написанными на статических языках. Такие программы назывались связующим кодом. Несмотря на то что динамические языки больше годятся для этой цели, в наши дни они могут решать и самые трудные задачи по обработке данных.

Многоцелевым динамическим языком многие годы был Perl. Язык программирования Perl очень мощный и имеет множество библиотек. Однако его синтаксис может быть трудным для понимания, а сам язык теряет в популярности из-за появления языков программирования Python и Ruby. А вот извольте: острый код с привкусом Perclass="underline"