4365a50cda
с афроо лошадьми
159 lines
6.3 KiB
Markdown
159 lines
6.3 KiB
Markdown
# FoxLang 5.0.1 - Changelog
|
|
|
|
## 🆕 Новые возможности
|
|
|
|
### Встроенная функция read_file()
|
|
- **Чтение файлов:** Новая функция `read_file(filename)` для чтения текстовых файлов
|
|
- **Умная обработка:** Автоматически пропускает комментарии (строки начинающиеся с #) и пустые строки
|
|
- **Безопасность:** Возвращает пустую строку при ошибке чтения файла
|
|
- **Применение:** Идеально подходит для чтения конфигурационных файлов
|
|
|
|
### Встроенная функция http_get()
|
|
- **HTTP запросы:** Новая функция `http_get(url)` для выполнения GET запросов
|
|
- **Простота использования:** Один вызов функции для получения данных с сервера
|
|
- **Интеграция:** Использует системный curl для надежности
|
|
- **Применение:** Работа с API, загрузка данных, веб-скрапинг
|
|
|
|
```cpp
|
|
string config = read_file("config.txt");
|
|
if (config != "") {
|
|
print("Config loaded: " + config);
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
# FoxLang 5.0.0 - Changelog
|
|
|
|
## 🚀 Крупные нововведения
|
|
|
|
### 1. Пользовательские функции
|
|
- **Полная поддержка функций** с параметрами и возвратом значений
|
|
- **Локальные области видимости** для параметров функций
|
|
- **Рекурсивные вызовы** функций
|
|
- **Поддержка всех типов** в параметрах и возврате (`int`, `float`, `string`, `bool`, `void`)
|
|
|
|
```cpp
|
|
int factorial(int n) {
|
|
if (n <= 1) {
|
|
return 1;
|
|
}
|
|
return n * factorial(n - 1);
|
|
}
|
|
```
|
|
|
|
### 2. Модульная система с пользовательскими функциями
|
|
- **Библиотеки с функциями**: Теперь `include("lib.fox")` поддерживает пользовательские функции
|
|
- **Правильная область видимости**: Функции из библиотек доступны в основном коде
|
|
- **Режим импорта**: Функции регистрируются, но код библиотеки не выполняется
|
|
|
|
```cpp
|
|
// math_lib.fox
|
|
int add(int a, int b) {
|
|
return a + b;
|
|
}
|
|
|
|
// main.fox
|
|
include("math_lib.fox");
|
|
int result = add(5, 3); // Работает!
|
|
```
|
|
|
|
### 3. Современный синтаксис идентификаторов
|
|
- **Поддержка подчеркиваний**: `user_name`, `get_public_ip`, `my_function`
|
|
- **Исправлен лексер**: Идентификаторы с `_` не конфликтуют с ключевыми словами
|
|
- **Совместимость**: Все существующие имена переменных продолжают работать
|
|
|
|
### 4. Расширенная поддержка циклов
|
|
- **Цикл for**: Полная поддержка `for (init; condition; step) { ... }`
|
|
- **Улучшенные while циклы**: Лучшая обработка условий
|
|
- **Вложенные циклы**: Поддержка любого уровня вложенности
|
|
|
|
## 🔧 Технические улучшения
|
|
|
|
### Парсер и AST
|
|
- **Новые узлы**: `FuncDefNode`, `ReturnNode`, `ForNode`
|
|
- **Улучшенная обработка**: `return` внутри функций
|
|
- **Контекст функций**: Изолированные области видимости
|
|
- **Обработка ошибок**: Лучшие сообщения об ошибках
|
|
|
|
### Лексер
|
|
- **Исправлена логика**: Идентификаторы с подчеркиваниями обрабатываются корректно
|
|
- **Приоритет ключевых слов**: Только полные совпадения считаются ключевыми словами
|
|
|
|
## 📋 Примеры использования
|
|
|
|
### Пользовательские функции
|
|
```cpp
|
|
string greet(string name, int age) {
|
|
return "Hello, " + name + "! You are " + age + " years old.";
|
|
}
|
|
|
|
void main() {
|
|
string message = greet("Alice", 25);
|
|
print(message);
|
|
}
|
|
|
|
main();
|
|
```
|
|
|
|
### Библиотеки с функциями
|
|
```cpp
|
|
// utils.fox
|
|
int max(int a, int b) {
|
|
if (a > b) return a;
|
|
return b;
|
|
}
|
|
|
|
void print_array(array arr, int size) {
|
|
int i = 0;
|
|
while (i < size) {
|
|
print("arr[" + i + "] = " + get(arr, i));
|
|
i = i + 1;
|
|
}
|
|
}
|
|
|
|
// main.fox
|
|
include("utils.fox");
|
|
|
|
int maximum = max(10, 20);
|
|
array numbers 3;
|
|
set(numbers, 0, 5);
|
|
set(numbers, 1, 10);
|
|
set(numbers, 2, 15);
|
|
print_array(numbers, 3);
|
|
```
|
|
|
|
### Современный синтаксис
|
|
```cpp
|
|
string user_name = "john_doe";
|
|
int user_age = 25;
|
|
bool is_admin = false;
|
|
|
|
string get_user_info() {
|
|
return "User: " + user_name + ", Age: " + user_age;
|
|
}
|
|
|
|
void check_permissions() {
|
|
if (is_admin) {
|
|
print("Admin access granted");
|
|
} else {
|
|
print("Regular user access");
|
|
}
|
|
}
|
|
```
|
|
|
|
## 🔄 Обратная совместимость
|
|
- Все скрипты FoxLang 4.x продолжают работать
|
|
- Встроенные функции (`print`, `input`, `fox`) не изменились
|
|
- Синтаксис массивов и переменных остался прежним
|
|
|
|
## 🐛 Исправленные ошибки
|
|
- Исправлена обработка идентификаторов с подчеркиваниями
|
|
- Устранены конфликты ключевых слов с именами функций
|
|
- Улучшена стабильность парсера при обработке функций
|
|
- Исправлены ошибки области видимости переменных
|
|
|
|
---
|
|
|
|
**Версия 5.0.0** представляет собой значительный шаг вперед в развитии FoxLang, превращая его в полноценный язык программирования с поддержкой пользовательских функций и современной модульной системы.
|