История изменений
Исправление 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 утилиты, компиляция однофайловой программы без систем сборки.
Легче читать код. Очень быстрая компиляция больших проектов, на порядки быстрее.