Пишем программы для Plan 9
Основным языком для написания программ в среде Plan 9 является язык Си, который представляет собой расширенную версию ANSI C. На данный момент список компиляторов состоит из:
1c Motorola MC68000
2c Motorola MC68020
5c ARM 7500
7c Digital Alpha APX
8c x86
kc Sun SPARC
qc Power PC,
vc big-endian MIPS 3000 family
Для каждой архитектуры присутствует свой ассемблер (1a, 2a, 5a, и.т.д), так как Си не имеет inline ассемблера. Библиотеки для Си можно найти в каталоге /$objtype/lib, а их “исходники” в /sys/src. Когда вы будете “собирать” свою программу вам нет необходимости писать что-то вроде:
8l main.obj libc.lib
Подключение библиотек ведется автоматически, посредством pragma в заголовочных файлах библиотек, которые хранятся в /sys/include. Если имеется программа, состоящая из файла main.c, для того чтобы получить исполняемый файл необходимо выполнить следующий набор команд:
8c main.c
8l main.8
В итоге мы получим файл 8.out. Как вы уже заметили, что место привычного obj файла после компиляции мы получили файл main.8, вот эта восьмерка как раз и указывает на то что тут содержится объектный код для соответствующей платформы. Если бы мы компилировали программу для платформы на основе процессора 68020, то мы использовали бы компилятор 2c, загрузчик 2l и получили бы исполняемый файл 2.out.
Если вы используете для сборки своих программ утилиту make, то вы можете продолжить ее использование и в Plan 9, здесь она называется mk, а ее файлы соответственно mkfile. Каждый mkfile начинается с подключения аппаратно-зависимого mkfile, в котором определяются некоторые переменные. Вот, например файл /386/mkfile
</sys/src/mkfile.proto
CC=8c
LD=8l
O=8
AS=8a
Как видите, он тоже подключает внешний файл /sys/src/mkfile.proto, в котором содержатся некоторые параметры для всех платформ. Далее идут назначения Си компилятора, загрузчика, ассемблера и расширения объектного файла. Значение переменных извлекается через знак $, а присваивается через =. Вот mkfile для нашей программы:
</$objtype/mkfile
$O.out: main.$O
$LD main.$O
main.$O: main.c
$CC main.c
install: $O.out
cp $O.out /$objtype/bin
clean:
rm main.$O $O.out
Используемый Си имеет «урезанный», но достаточный препроцессор, если же есть необходимость в полном варианте, то можно использовать cpp(1).
Расширения Си очень удобны, подробности читайте в 2c(1)
Ассемблер использует AT&T синтаксис.
APE – Ansi/Posix Environment – среда для переноса приложений из мира Unix.
Для Plan 9 разработан компилятор языка Alef, но он мало используется и поставляется отдельно.
Редакция от 13.05.05
Copyright 2005 Рева Сергей