LINUX.ORG.RU

История изменений

Исправление tp_for_my_bunghole, (текущая версия) :

Ознакомился с проектом SCC, Simple C Compiler. Бесполезная идея.
Задумано что компилятор игнорирует квалификаторы типов const, volatile, restrict.
Это даже идеей нельзя назвать.

Язык C надо было исправлять давно добавлением системы модулей(раздельная компиляция) как было в TurboPascal уже в конце 80-х. Типы должны указываться после переменной или функции. Как сделано в Golang. Определение функции ключевым словом, например def, или func.
В стандартном C все компиляторы используют хак для typedef. Во время компиляции надо собирать все определения typedef, и lexer/scanner использует этот массив typedef'ов что бы правильно формировать типы токенов для парсера. Поэтому до сих пор создание IDE для C сложная задача.
Как определить какие typedef используются в большом проекте? Неизвестно, потому что это определяется только во время компиляции, а информация о компиляции содержится в Makefile или другом формате сборки. Нет системы модулей в самом языке. Как определить какие #define активны без использования компилятора и системы сборки? Никак.

Другая проблема это синтаксис указателей. Вместо «*» лучше использовать «^»(circumflex).
При определении указателя ставить «^» в начале переменной. Для получения содержимого(dereferencing) ставить «^» после переменной.
Получение адреса переменной символом «@»(at) вместо «&».

И конечно же отдельный тип для string.

Эти изменения тривиальны, добавить их очень легко, с созданием инструментов переводящих синтаксис в новую форму.
Исправленный синтаксис позволит создавать IDE как для Java. Модульность позволит легче создавать *NIX утилиты, компиляция однофайловой программы без систем сборки.
Легче читать код. Очень быстрая компиляция больших проектов, на порядки быстрее.

Исправление tp_for_my_bunghole, :

Ознакомился с проектом SCC, Simple C Compiler. Бесполезная идея.
Задумано что компилятор игнорирует квалификаторы типов const, volatile, restrict.
Это даже идеей нельзя назвать.

Язык C надо было исправлять давно добавлением системы модулей(раздельная компиляция) как было в TurboPascal уже в конце 80-х. Типы должны указываться после переменной или функции. Как сделано в Golang. Определение функции ключевым словом, например def, или func.
В стандартном C все компиляторы используют хак для typedef. Во время компиляции надо собирать все определения typedef, и lexer/scanner использует этот массив typedef'ов что бы правильно формировать типы токенов для парсера. Поэтому до сих пор создание IDE для C сложная задача.
Как определить какие typedef используются в большом проекте? Неизвестно, потому что это определяется только во время компиляции, а информация о компиляции содержится в Makefile или другом формате сборки. Нет системы модулей в самом языке. Как определить какие #define активны без использования компилятора и системы сборки? Никак.

Другая проблема это синтаксис указателей. Вместо «*» лучше использовать «^».

При определении указателя ставить «^»(circumflex) в начале переменной. Для получения содержимого(dereferencing) ставить «^» после переменной.
Получение адреса переменной символом «@»(at) вместо «&».

И конечно же отдельный тип для string.

Эти изменения тривиальны, добавить их очень легко, с созданием инструментов переводящих синтаксис в новую форму.
Исправленный синтаксис позволит создавать IDE как для Java. Модульность позволит легче создавать *NIX утилиты, компиляция однофайловой программы без систем сборки.
Легче читать код. Очень быстрая компиляция больших проектов, на порядки быстрее.

Исходная версия tp_for_my_bunghole, :

Ознакомился с проектом SCC, Simple C Compiler. Бесполезная идея.
Задумано что компилятор игнорирует квалификаторы типов const, volatile, restrict.
Это даже идеей нельзя назвать.

Язык C надо было исправлять давно добавлением системы модулей(раздельная компиляция) как было в TurboPascal уже в конце 80-х. Типы должны указываться после переменной или функции. Как сделано в Golang. Определение функции ключевым словом, например def, или func.
В стандартном C все компиляторы используют хак для typedef. Во время компиляции надо собирать все определения typedef, и lexer/scanner использует этот массив typedef'ов что бы правильно формировать типы токенов для парсера. Поэтому до сих пор создание IDE для C сложная задача.
Как определить какие typedef используются в большом проекте? Неизвестно, потому что это определяется только во время компиляции, а информация и компиляции в makefile или другом формате сборки. Нет системы модулей в самом языке. Как определить какие #define активны без использования компилятора и системы сборки? Никак.

Другая проблема это синтаксис указателей. Вместо «*» лучше использовать «^».

При определении указателя ставить «^»(circumflex) в начале переменной. Для получения содержимого(dereferencing) ставить «^» после переменной.
Получение адреса переменной символом «@»(at) вместо «&».

И конечно же отдельный тип для string.

Эти изменения тривиальны, добавить их очень легко, с созданием инструментов переводящих синтаксис в новую форму.
Исправленный синтаксис позволит создавать IDE как для Java. Модульность позволит легче создавать *NIX утилиты, компиляция однофайловой программы без систем сборки.
Легче читать код. Очень быстрая компиляция больших проектов, на порядки быстрее.