Small C: Подмножество языка C для микрокомпьютеров
Small-C
Small C: компактный подмножество языка C для микрокомпьютеров и встраиваемых систем. Ранний компилятор, пример для обучения, разработанный Ron Cain и James Hendrix.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Подмножество языка программирования
Subset of a programming language
Small C — это одновременно подмножество языка программирования C, предназначенное для микрокомпьютеров с ограниченными ресурсами и встраиваемых систем, и реализация этого подмножества. Изначально представлявший ценность как один из первых компиляторов для микрокомпьютерных систем, доступных в конце 1970-х и начале 1980-х годов, он также оказался полезен в качестве достаточно простого примера для обучения. Оригинальный компилятор, написанный Роном Кейном на Small C для Intel 8080, был опубликован в майском выпуске журнала Dr. Dobb's Journal за 1980 год. Джеймс Хендрикс улучшил и расширил оригинальный компилятор и написал "Руководство по Small C". Рон запустил Small C на Unix-системе SRI International PDP 11/45, используя учетную запись, предоставленную Джоном Бассом для разработки Small C. Предоставленный исходный код был выпущен в общественное достояние с разрешения руководства. Small C был важен для небольших компьютеров, примерно так же, как GCC важен для больших компьютеров. Подобно своим аналогам в Unix, компилятор генерирует ассемблерный код, который затем должен быть преобразован в машинный код доступным ассемблером. Small C — это переносимый компилятор. Для переноса Small C требуется лишь переписать генератор кода бэк-энда и библиотеку для вызовов интерфейса операционной системы для целевого процессора.
Small C is both a subset of the C programming language, suitable for resource limited microcomputers and embedded systems, and an implementation of that subset. Originally valuable as an early compiler for microcomputer systems available during the late 1970s and early 1980s, the implementation has also been useful as an example simple enough for teaching purposes. The original compiler, written in Small C for the Intel 8080 by Ron Cain, appeared in the May 1980 issue of Dr. Dobb's Journal. James E. Hendrix improved and extended the original compiler, and wrote The Small C Handbook. Ron bootstrapped Small C on the SRI International PDP 11/45 Unix system with an account provided by John Bass for Small C development. The provided source code was released with management permission into the public domain. Small C was important for tiny computers in a manner somewhat analogous to the importance of GCC for larger computers. Just like its Unix counterparts, the compiler generates assembler code, which then must be translated to machine code by an available assembler. Small C is a retargetable compiler. Porting Small C requires only that the back end code generator and the library to operating system interface calls be rewritten for the target processor.
Подмножество языков
В мае 1980 года журнал Dr. Dobb's Journal опубликовал статью под названием "Маленький C-компилятор для 8080", в которой Рон Кейн представил небольшой компилятор для подмножества языка C. Самой интересной особенностью компилятора, помимо его малого размера, был язык, на котором он был написан – тот самый язык, который он компилировал. Это был самокомпилирующийся компилятор! (Хотя сегодня это обычное дело, в то время это было довольно новаторской идеей.) Используя простой однопроходный алгоритм, его компилятор генерировал ассемблерный код для процессора 8080. Однако, из-за своего малого размера, он имел свои ограничения. Он распознавал только символы, целые числа и одномерные массивы любого из этих типов. Единственным оператором управления циклом был оператор `while`. Булевых операторов не было, поэтому вместо них использовались побитовые логические операторы `&` (И) и `|` (ИЛИ). Но даже с этими ограничениями, это был очень удобный язык, особенно по сравнению с ассемблером. Понимая необходимость улучшений, Рон предложил мне создать вторую версию, и в декабре 1982 года она также появилась в журнале Dr. Dobb's Journal. Новый компилятор расширил Small C следующими возможностями: (1) оптимизация кода, (2) инициализация данных, (3) условная компиляция, (4) спецификатор хранения `extern`, (5) операторы `for`, `do/while`, `switch` и `goto`, (6) составные операторы присваивания, (7) булевы операторы, (8) оператор одночного дополнения, (9) локальные переменные блоков и (10) различные другие функции. Затем, в 1984 году, Эрнест Пейн и я разработали и опубликовали CP/M-совместимую библиотеку времени выполнения для этого компилятора. Она состояла из более чем 80 функций и включала большинство функций из стандартной библиотеки ввода/вывода UNIX C, применимых к среде CP/M. Это стало версией 2.1 и темой книги The Small C Handbook.
"In May of 1980 Dr. Dobb's Journal ran an article entitled "A Small C Compiler for the 8080s" in which Ron Cain presented a small compiler for a subset of the C language. The most interesting feature of the compiler besides its small size was the language in which it was written—the one it compiled. It was a self compiler! (Although this is commonplace today, it was a fairly novel idea at the time.) With a simple, one pass algorithm, his compiler generated assembly language for the 8080 processor. Being small, however, it had its limitations. It recognized only characters, integers, and single dimension arrays of either type. The only loop controlling device was the while statement. There were no Boolean operators, so the bitwise logical operators & (AND) and | (OR) were used instead. But even with these limitations, it was a very capable language and a delight to use, especially compared to assembly language. Recognizing the need for improvements, Ron encouraged me to produce a second version, and in December 1982 it also appeared in Dr. Dobb's Journal. The new compiler augmented Small C with (1) code optimizing, (2) data initializing, (3) conditional compiling, (4) the extern storage class, (5) the for, do/while, switch, and goto statements, (6) combination assignment operators, (7) Boolean operators, (8) the ones' complement operator, (9) block local variables, and (10) various other features. Then in 1984 Ernest Payne and I developed and published a CP/M compatible run time library for the compiler. It consisted of over 80 functions and included most of those in the UNIX C Standard I/O Library—the ones that pertained to the CP/M environment. This became version 2.1 and the subject of The Small C Handbook.