1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/hustlei-flang

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.en.md

Фланг

Попытка создать современный язык с характеристиками эффективности (как C++), простоты (как Python), удобства использования (как Swift) и связующими свойствами.

  • Эффективность (как у C) — быстродействие и минимальный размер выпуска.
  • Простота (как у Python) — простой синтаксис, ориентированный на пользователя.
  • Удобство использования (как у C#) — простота в использовании.
  • Связующие свойства (как у Lua) — возможность связывать различные компоненты.
  • Современность (как у Rust, Swift) — с прогнозированием типов, обработкой исключений, метапрограммированием, управлением памятью, синхронизацией, параллелизмом и другими современными характеристиками.

Адекватно пожертвовать эффективностью во время выполнения, чтобы сделать код безопасным и простым в использовании.

Не поддерживать указатели, не использовать сборщик мусора, освобождать память с помощью ARC.

Особенности языка Фланг:

  1. Свободный открытый исходный код, использующий лицензию Apache.
  2. Компилируемый язык:
    • Нет виртуальной машины, нет среды выполнения (автоматическое освобождение памяти кучи с помощью ARC).
    • Рассмотрение двухуровневой компиляции для повышения переносимости и гибкости. Компиляция в промежуточный код и перевод его в машинный код при установке.
    • С REPL для обучения.
    • Со встраиваемым JIT-движком для сценариев, встроенных в программы.
  3. Типы:
    • Статические типы (поддержка динамических типов для специального использования).
    • Слабые типы, как в C.
    • Точные вычисления и неограниченная точность целых чисел.
    • Встроенная поддержка Unicode, по умолчанию используется UTF-8.
    • Встроенные продвинутые структуры данных, такие как списки, векторы, словари.
    • Прогнозирование типов, универсальные типы.
  4. Грамматика:
    • Лёгкая.
    • Нулевая стоимость абстракции, все программы в конечном итоге преобразуются в комбинацию «данные + алгоритм + интерфейс + сообщение», а статическое распределение достигается компилятором насколько возможно, а динамическое распределение применяется при необходимости.
  5. Управление памятью:
    • Без GC, без указателей, без среды выполнения.
    • Безопасные операции с кучей, автоматическое освобождение памяти кучи с помощью ARC.
  6. Встроенная обработка исключений.
  7. Встроенный асинхронный и параллельный дизайн.
  8. Взаимодействие с другими языками:
    • Встраивание LLVM IR.
    • Прямое взаимодействие с C.
    • Рассматривается независимый модуль перевода для взаимодействия с другими языками, чтобы сохранить язык простым и чистым.
  9. Кроссплатформенность:
    • Использование специфичных API платформы.
    • UI, графика: использование стандартной библиотеки DSL, реализованной подобно HTML5, QML, WPF.

Язык

Пример Фланг «Hello, World!»:

// helloworld.f
domain hello
use sys.*

pub func main(){
  println("hello, world!")
}

Исходный код обычно состоит из следующих четырёх частей:

  • Комментарий.
  • Объявление домена.
  • Ссылка на внешний домен.
  • Определение функции, типа, псевдонима типа или характеристики.

Инструменты Фланг: команда

  • Компиляция исходного файла:
    • flang compile hello.f: или flang hello.f компилирует один файл.
      • Параметры -i -b -s -c означают вывод IR, битового IR, ассемблерного кода, двоичного файла. Поддерживается комбинированный режим, например: -ibc.
    • flang run hello.f: компилирует один файл и запускает его.
  • Редактор исходного кода:
    • flang fmt: или flang format форматирует код.
    • flang check: проверяет синтаксис.
    • flang doc: генерирует документацию.
  • Организация управления исходным кодом:
    • flang init: создаёт proj, который содержит один mod, содержащий один исходный файл helloworld.
    • flang new modname: добавляет один mod в текущий proj.
      • flang new --bin modname: указывает, что цель является двоичным исполняемым файлом.
      • flang new --lib modname: означает, что это библиотека.
    • flang dep: управление зависимостями.
      • falng dep where: показывает расположение зависимых файлов.
      • flang dep cache: или flang dep get или flang dep download загружает зависимости на локальный компьютер.
      • flang dep config: устанавливает местоположение кэша зависимостей.
      • flang dep update: обновляет зависимости (если в конфигурации проекта указана максимальная версия, то максимум до этой версии).
      • flang dep build: компилирует зависимости.
      • flang dep clean: очищает скомпилированные файлы зависимостей.
      • flang dep list: отображает список зависимостей.
      • flang dep graph: отображает дерево зависимостей.
      • flang dep verify: проверяет, были ли изменены зависимости после загрузки.
      • flang dep help: отображает справку.
  • Сборка и запуск модулей и проектов:
    • flang build: компилирует текущий модуль mod или проект proj.
      • flang build --release: или -r компилирует версию для выпуска. По умолчанию используется --debug.
      • flang build --release --arch:i386 --os:win кросс-компиляция.
    • flang run: компилирует и запускает текущий модуль или проект.
    • flang clean: удаляет сгенерированные целевые файлы.
    • flang test: компилирует и запускает тестовый код текущего модуля или проекта.
    • flang bench: запускает тесты производительности.
  • Интерактивный режим:
    • flang play: запускает playground.
    • flang shell: или flang repl запускает интерактивную среду интерпретатора.
  • Вывод LLVM:
    • flang llvm --ast hello.f: выводит абстрактное синтаксическое дерево. flang llvm — ir hello.f: или -i выводит IR-код.

flang llvm —ir -O3 hello.f -o hello.ll: выводит IR-код, с оптимизацией третьего уровня.

flang llvm — bc hello.f: или -b выводит bitcode (двоичный IR-код).

flang llvm — asm hello.f: или -s выводит ассемблерный код.

  • Команды для работы с пакетами:

    flang pkg dirname -o instpkg: создаёт установочный пакет instpkg на основе содержимого папки dirname.

  • Вспомогательные команды:

    flang version: или flang ver показывает информацию о версии.

    flang update: обновляет компилятор flang.

flang help: показывает справку.

flang -###: показывает детали выполнения последующих команд без их фактического выполнения; -### можно использовать в любом месте команды. Например: flang llvm — ast hello.f -###.

Основные языки для ссылок

C, C++, C#, Go, Swift, Rust, Scala, Python, Julia, Lua.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/hustlei-flang.git
git@api.gitlife.ru:oschina-mirror/hustlei-flang.git
oschina-mirror
hustlei-flang
hustlei-flang
master