Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Внести вклад в разработку кода
Синхронизировать код
README.md
Fa язык — это простой и лёгкий в изучении язык программирования. В настоящее время он находится на стадии тестирования, позволяет компилировать простой функциональный код.
QQ-чат для обсуждения: 1018390466
Цели
- Минимизация (компилятор управляет переменными, размещая их в стеке или куче, а также определяя, являются ли они ссылками или используют подсчёт ссылок, атомарны ли операции и т. д.) (в настоящее время не реализовано).
- Безопасность (новая система обработки ошибок, обеспечивающая отсутствие исключений в компилируемом коде. Исключения системы не учитываются) (в настоящее время не реализовано).
- Метапрограммирование (переменные с префиксом @ представляют собой вычисляемые во время компиляции значения) (в настоящее время не реализовано).
- Высокая производительность (вывод LLVM IR, выполнение нативных инструкций, оптимизация SIMD) (в настоящее время не реализовано).
- Владение и освобождение ресурсов (полностью обрабатывается компилятором) (в настоящее время не реализовано).
- Принудительное использование шаблонов разработки (например, обязательное применение DDD-модели) (в настоящее время не реализовано).
Задачи
- Самозагрузка
- Обработка ошибок при работе с числами с плавающей точкой
- Переключатель для пустых типов переменных
- Переключатели типов
- Мьютексы
- Стандартная библиотека
Ход работы
На основе языка C++: Antlr для фронтенда, LLVM binding API для бэкенда, реализация первой версии компилятора языка fa (отменено)
- На основе языка C#: Antlr для фронтенда, бэкенд на C#, реализация первой версии компилятора языка fa
- Hello World (√)
- Пустые типы (√)
- Классы, объекты, выражения, циклы (√)
- Типы перечисления (√)
- Переключатель (√)
- На основе языка fa: фронтенд fa, бэкенд LLVM ir, реализация самозагружаемого компилятора fa
- Метапрограммирование
- Деградация функций
- Конечные автоматы
- Наследование
Особенности
- Необязательные типы
- Любой тип, за которым следует знак вопроса, например int?, указывает на необязательный тип.
- Можно хранить значение этого типа (кроме void?), а также сообщение об ошибке.
- Необязательные типы могут использоваться в вычислениях с исходными типами, и результатом будет необязательный тип.
- Они используются для реализации механизма обработки ошибок вместо исключений.
- Когда функция возвращает необязательный тип, это означает, что вычисление завершилось ошибкой, и результат автоматически возвращается вызывающей стороне.
int? func1 () {
int? a = 5 / 0; // здесь a представляет ошибку деления на ноль
int b = a + 3; // ошибка результата b не может быть сохранена, информация об ошибке возвращается здесь, дальнейший код не выполняется
return b;
}
int func2 () {
int? a = 5 / 0; // здесь a представляет ошибку деления на ноль
int b = a + 3; // ошибка результата b не может быть сохранена, тип возвращаемого значения функции также не может принять его, компилятор выдаёт ошибку
return b;
}
- Глобальные асинхронные задачи (в настоящее время не реализованы)
- Методы по умолчанию выполняются асинхронно, тело метода не содержит асинхронного кода, который можно выполнить синхронно.
- Нет ключевых слов future, async, await или подобных концепций, пользователь просто пишет код.
- Отдельные потоки используются для независимого управления всеми асинхронными блокировками.
Пример реализации быстрой сортировки на языке fa:
![compile](/oschina-mirror/falang-fa/raw/main/imgs/20211222001053.jpg)
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )