Описание тега nim
Nim (ранее известный как "Nimrod") - это статически типизированный императивный язык программирования, который пытается дать программисту максимальную мощность без ущерба для эффективности времени выполнения. Это означает, что он фокусируется на механизмах времени компиляции во всех их различных формах.
О Ним
Под хорошим синтаксисом на основе инфикса / отступа с мощной (основанной на AST, гигиенической) макросистемой лежит семантическая модель, которая поддерживает мягкий GC в реальном времени в локальных кучах потоков. Между потоками используется асинхронная передача сообщений, поэтому механизм "остановить мир" не требуется. Небезопасная куча совместно используемой памяти также предоставляется для повышения эффективности, которая является результатом этой модели.
Ним эффективен
- Генерация собственного кода (в настоящее время посредством компиляции в C), не зависящая от виртуальной машины: Nim создает небольшие исполняемые файлы без зависимостей для легкого перераспределения.
- Быстрый не отслеживающий сборщик мусора, который поддерживает мягкие системы реального времени (например, игры).
Особенности системного программирования:
- Возможность управлять собственной памятью и напрямую обращаться к оборудованию.
- Указатели на сборочную память отличаются от указателей на память, управляемую вручную.
- Итераторы с нулевыми накладными расходами.
- Кросс-модульное встраивание.
- Динамическая привязка метода с встраиванием и без таблицы виртуальных методов. Оценка времени компиляции пользовательских функций.
- Устранение мертвого кода всей программы: в исполняемый файл включены только используемые функции.
- Типы данных на основе значений: например, объекты и массивы могут быть размещены в стеке.
Ним выразителен
- Компилятор Nim и все стандартные библиотеки реализованы в Nim.
- Встроенные типы данных высокого уровня: строки, наборы, последовательности и т. Д.
- Современная система типов с локальным выводом типов, кортежами, вариантами, обобщениями и т. Д.
- Определяемые пользователем операторы; код с новыми операторами часто легче читать, чем код, который перегружает встроенные операторы. Например, оператор re =~ определен в модуле re.
- Макросы могут изменять абстрактное синтаксическое дерево во время компиляции.
Ним элегантен
- Макросы могут использовать императивную парадигму для построения деревьев разбора. Nim не требует другого стиля кодирования для метапрограммирования.
- Макросы не могут изменить синтаксис Nim, потому что в этом нет необходимости. Синтаксис Нима достаточно гибок.
- Выражения сгруппированы по отступам, но могут занимать несколько строк. Отступы не должны содержать табуляторы, поэтому компилятор всегда видит код так же, как вы.
Ним хорошо играет с другими
- Компилятор Nim работает на Windows, Linux, BSD и Mac OS X. Портировать на другие платформы легко.
- Компилятор Nim также может генерировать C++ или Objective C для облегчения взаимодействия.
- Есть много привязок: например, привязки к
GTK2
,Windows API
,POSIX API
,OpenGL
,SDL
,Cairo
,Python
,Lua
,TCL
,X11
,libzip
,PCRE
,libcurl
,mySQL
а такжеSQLite
включены в стандартный дистрибутив или могут быть легко получены через менеджер пакетов Nimble. - Утилита преобразования A C в Nim: Новые привязки к библиотекам C легко генерируются
c2nim
,