4365a50cda
с афроо лошадьми
6.3 KiB
6.3 KiB
FoxLang 5.0.1 - Changelog
🆕 Новые возможности
Встроенная функция read_file()
- Чтение файлов: Новая функция
read_file(filename)для чтения текстовых файлов - Умная обработка: Автоматически пропускает комментарии (строки начинающиеся с #) и пустые строки
- Безопасность: Возвращает пустую строку при ошибке чтения файла
- Применение: Идеально подходит для чтения конфигурационных файлов
Встроенная функция http_get()
- HTTP запросы: Новая функция
http_get(url)для выполнения GET запросов - Простота использования: Один вызов функции для получения данных с сервера
- Интеграция: Использует системный curl для надежности
- Применение: Работа с API, загрузка данных, веб-скрапинг
string config = read_file("config.txt");
if (config != "") {
print("Config loaded: " + config);
}
FoxLang 5.0.0 - Changelog
🚀 Крупные нововведения
1. Пользовательские функции
- Полная поддержка функций с параметрами и возвратом значений
- Локальные области видимости для параметров функций
- Рекурсивные вызовы функций
- Поддержка всех типов в параметрах и возврате (
int,float,string,bool,void)
int factorial(int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
2. Модульная система с пользовательскими функциями
- Библиотеки с функциями: Теперь
include("lib.fox")поддерживает пользовательские функции - Правильная область видимости: Функции из библиотек доступны в основном коде
- Режим импорта: Функции регистрируются, но код библиотеки не выполняется
// 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внутри функций - Контекст функций: Изолированные области видимости
- Обработка ошибок: Лучшие сообщения об ошибках
Лексер
- Исправлена логика: Идентификаторы с подчеркиваниями обрабатываются корректно
- Приоритет ключевых слов: Только полные совпадения считаются ключевыми словами
📋 Примеры использования
Пользовательские функции
string greet(string name, int age) {
return "Hello, " + name + "! You are " + age + " years old.";
}
void main() {
string message = greet("Alice", 25);
print(message);
}
main();
Библиотеки с функциями
// 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);
Современный синтаксис
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, превращая его в полноценный язык программирования с поддержкой пользовательских функций и современной модульной системы.