Пишем программы для 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 Рева Сергей
    Хостинг от uCoz