Перейти до вмісту

Nim

Матеріал з K2 ERP Wiki

let name: string = "Nim"

Приклад:

Nim добре підходить для інтеграції з C та C++ кодом.; Генерація проміжного коду

proc multiply(a: int, b: int): int =
 |
 | 4.; |-
| Статична типізація
| Багато помилок знаходяться ще на етапі компіляції.; |-
| 2014
| Мову перейменовано з Nimrod на Nim.; main.nim

{| class="wikitable"

 README.md
<syntaxhighlight lang="nim">
Можливі задачі:

<syntaxhighlight lang="nim">

import std/httpclient
<syntaxhighlight lang="nim">
== 5.; історичний розвиток ==

C / C++ / JavaScript / Objective-C
!; Тип
<div style="border-left: 6px solid #f57c00; background: #fff3e0; padding: 12px 16px; margin: 16px 0;">
|-
| strutils
| Робота з рядками.; Джерела ==

* Офіційний сайт Nim
* Офіційна документація Nim
* Nim Manual
* Nim Documentation Overview
* Nimble package manager
* Nim GitHub repository

== 32.;== 18.; Недоліки Nim ==

</pre>

* REST API;
* мікросервіси;
* внутрішні сервіси;
* proxy-сервіси;
* системи обробки даних.; характеристика
nim c main.nim

Nim не є собою інтерпретованою мовою на кшталт Python.;== 9.; Типи даних ==

<div style="border-left: 6px solid #1565c0; background: #e3f2fd; padding: 12px 16px; margin: 16px 0;">
{| class="wikitable"
=== 20.1.; CLI-утиліти ===

Для компіляції та запуску:
[[index.php?title=Категорія:Метапрограмування]]
Скорочений варіант:

== 13.; Модулі ==

 check 2 + 2 == 4

Запуск тестів може виконуватися через Nim або через задачі Nimble.

== 27.; |- | httpclient | HTTP-запити.; |- | Elegance | Мова повинна дозволяти створювати прості рішення для бізнесу без зайвої синтаксичної складності.; |}

echo "Доступ заборонено"

Приклад встановлення пакета:

echo user.name

nim c -d:release main.nim

  • швидкий запуск;
  • нативний binary;
  • просте розгортання;
  • низьке споживання ресурсів.; Ключове слово
repository.nim
v

!; echo version

a + b
Person = object

while i < 5:

echo i
inc i

</syntaxhighlight>

7.; Приклад програми

!; Код Nim компілюється, найчастіше через проміжну генерацію C-коду.; |}

Основні типи Nim:

const appName = "Nim Demo"

Для компіляції файлу Nim застосовується команда:

  • встановлення бібліотек;
  • створення пакетів;
  • керування залежностями;
  • запуску задач;
  • публікації пакетів.;

6.5.; Робота з C/C++

v

17.; переважні аспекти Nim

Nim добре підходить для створення швидких командних утиліт.; |- | Компактність | Для багатьох задач потрібно менше коду, ніж у традиційних системних мовах.; |- | Обмежена програмний пакет | Деякі фреймворки та інструменти менш зрілі, ніж у популярніших мовах.; |- | 2026 | Актуальною гілкою є собою Nim 2.2.x.; Значення

echo counter

  • генераторів коду;
  • аналізаторів файлів;
  • build tools;
  • скриптів автоматизації;
  • власних DSL;
  • компіляторів або трансляторів.; |-

| Go | Обидві мови можуть використовуватися для CLI та backend.; | Nim має вищий рівень абстракції та безпечніший синтаксис.; додатково ==

index.php?title=Категорія:Системне програмування

Код Nim можна розділяти на модулі.; C / C++ / JS backend srcDir = "src" |- | let | Незмінне значення, визначене під час виконання.; | const appName = "Demo" |}

Приклад .; 22.nimble-файлу

=== 10.1.; Умова if ===

let data = %* {

- Менше вакансій Nim рідко є собою основною вимогою у вакансіях.; Аналіз синтаксису

repeatTwice: </syntaxhighlight>

2.; echo multiply(4, 5)

license = "MIT"

requires "nim >= 2.0.0"

6.2.; Компільованість

</syntaxhighlight>

echo add(2, 3)

Nim можна використовувати для backend-розробки, хоча програмний пакет тут менша, ніж у Python, Node.js, Go або Java.; Рік

<syntaxhighlight lang="nim">

Процедура без повернення значення:
echo data.pretty()

let response = client.getContent("https://example.com")

printMessage("Nim is expressive") echo appName </syntaxhighlight> v
;
service.nim

nim c -r main.nim

Типові модулі стандартної бібліотеки:

  • виклик C-функцій із Nim;
  • використання існуючих C-бібліотек;
  • створення обгорток над системними API;
  • поступова міграція частин C/C++ проєкту;
  • написання продуктивних модулів із високорівневим синтаксисом.; !; |-
json Робота з JSON.; характеристика

2.; Коротка характеристика

index.php?title=Категорія:Статична типізація nimble install package_name proc greet(name: string) = Приклад:
  1. Package
Приклад: let userName = "Ivan" src/ type let language = "Nim" let text = "nim programming language"
  1. Dependencies
var i = 0
- інтеграційні функціональні можливості з C Nim добре підходить для використання існуючих C-бібліотек.; Nim має стандартні функціональні можливості для написання тестів.; Схожість із Nim

завдяки наявності компіляції та низькорівневому контролю Nim можна використовувати в задачах, де важливі продуктивність і контроль пам'яті.; | var counter = 0

const Константа, відома під час компіляції.; характеристика

let year = 2008

; Відмінність
"type": "compiled",

description = "Example Nim project"

Приклад шаблону: echo userName

 main.nim

</syntaxhighlight>

echo i

</syntaxhighlight>

Nim підходить для створення:

nimble init

echo "Привіт, ", name

У Nim функції зазвичай оголошуються через ключове слово proc.; Nim створювався як мова, яка надає можливість писати продуктивний код без надмірної складності, характерної для частини системних мов.; |-

sequtils Робота з послідовностями.; Перевірка типів
.gitignore
- 2008 Публічна поява мови та компілятора.; Перевага
}
__TOC__

=== 20.4.; Інструменти розробника ===

== 21.; Приклад структури Nim-проєкту ==

істотно: Nim є собою менш поширеною мовою, ніж Python, JavaScript, Java, C# або Go, з цієї причини перед вибором для комерційного проєкту варто оцінити доступність розробників, бібліотек та довгострокову підтримку.; |-

Кросплатформеність Мова має змогу використовуватися на Linux, Windows, macOS та інших платформах.; Приклад

14. Nimble

</syntaxhighlight>

переважні аспекти:

Nim Compiler
import std/unittest

Найпростіша програма Nim:

let age = 18

Nim compiler
Розробку Nim започаткував Andreas Rumpf.; Коли варто використовувати Nim ==

Nim доцільно розглядати, якщо:

* потрібна висока продуктивність;
* потрібен нативний binary;
* команда хоче синтаксис простіший за C++;
* потрібна інтеграція з C;
* важлива компактність коду;
* проєкт має технічний або інфраструктурний характер;
* потрібні можливості метапрограмування.

== 28.; Недолік

== 12.; Об'єкти ==
import std/json

== 24.; Приклад роботи з JSON ==

<syntaxhighlight lang="nim">
let client = newHttpClient()
 test_main.nim

var counter = 0
Філософію Nim часто описують через три принципи:

=== 20.3.; Embedded та системне програмування ===

Semantic Analysis

Він застосовується для:
!; характеристика

=== 6.4.; Метапрограмування ===

== 23.; Приклад невеликого HTTP-клієнта ==
 config.nim

<pre>
<div style="border-left: 6px solid #2e7d32; background: #e8f5e9; padding: 12px 16px; margin: 16px 0;">

<pre>
echo response

counter = counter + 1

proc printMessage(message: string) =
<syntaxhighlight lang="nim">

== 8.; Змінні та константи ==
proc add(a, b: int): int =
Приклад:
Executable / JavaScript output
for i in 1..5:

 v
[[index.php?title=Категорія:Компільовані мови]]

<div style="border-left: 6px solid #2e7d32; background: #e8f5e9; padding: 12px 16px; margin: 16px 0;">

== 15.; Компіляція ==

* перевірку вхідних даних;
* обробку помилок;
* контроль роботи з пам'яттю;
* тестування критичної логіки;
* використання release-збірок для production;
* контроль залежностей Nimble;
* регулярне актуалізація компілятора;
* перевірку сторонніх бібліотек перед використанням.; |-
| Поріг для production
| Для великих команд потрібно оцінити підтримку, документацію та ризики.; Висновок ==

Nim — це сучасна компільована мова програмування, яка поєднує високу продуктивність, статичну типізацію, зручний синтаксис і потужне метапрограмування.

Вона добре підходить для CLI-інструментів, системного програмування, backend-сервісів, embedded-рішень та інтеграції з C/C++.

Головна перевага Nim — поєднання продуктивності та виразності. Головний ризик — менша популярність і компактніша екосистема порівняно з більш масовими мовами.

== 31.; системного програмування забезпечується через '''Ключова особливість:''' Nim має змогу компілювати код у C.; характеристика
Приклад із функцією:
== 16.; технічна архітектура компіляції ==
!; | Nim зазвичай простіший у синтаксисі та має інший підхід до метапрограмування.; | Python зазвичай інтерпретований і динамічно типізований, Nim — компільований і статично типізований.; |-
| times
| Дата і час.; !; це компільована статично типізована мова програмування, яка поєднує продуктивність системних мов із виразним і компактним синтаксисом, близьким до Python виступає ключовою рисою '''Головна ідея:''' Nim.; bin = @["main"]

Native binary або JavaScript output

!; Характеристика

* templates;
* macros;
* compile-time evaluation;
* генерація коду на етапі компіляції;
* створення DSL.; |}

 age: int

'''Практичний сенс:''' Nim намагається дати розробнику швидкість C, зручність Python і функціональні можливості метапрограмування, характерні для більш спеціалізованих мов.; |-
| asyncdispatch
| Асинхронне програмування.; |-
| 2023
| Вийшла реліз Nim 2.0.; Приклад

<pre>

Основні задачі, для яких має змогу використовуватися Nim:
</div>
 |
 | 1.; |-
| Python
| Схожий читабельний синтаксис і використання відступів.; Nim source code
=== 6.1.; Статична типізація ===

</pre>

1.; Загальний характеристика

</syntaxhighlight>

; Мова

19.; Порівняння з іншими мовами

Типовий бізнес-процес: let user = Person(name: "Марія", age: 25)

20.2.; Backend-сервіси

Назва Nim
Тип мови Компільована, статично типізована, універсальна
Основна сфера Системне програмування, CLI, backend, embedded, інструменти розробника
Автор Andreas Rumpf
Перша публічна реліз 2008 рік
Попередня назва Nimrod
Парадигми Процедурна, об'єктно-орієнтована, функціональна, узагальнена, метапрограмування
Розширення файлів .nim, .nims, .nimble
Менеджер пакетів Nimble
Основні цілі компіляції C, C++, Objective-C, JavaScript

</syntaxhighlight>

11.; Процедури

Можливі сценарії:

  • створення CLI-утиліт;
  • системне програмування;
  • backend-сервіси;
  • мережеві сервіси;
  • embedded-розробка;
  • створення компіляторів та інструментів розробника;
  • автоматизація процесів;
  • генерація коду;
  • інтеграційні функціональні можливості з C/C++ бібліотеками;
  • експериментальні вебзастосунки через JavaScript backend.; |}

template repeatTwice(body: untyped) =

v

Nim — це універсальна компільована мова програмування зі статичною типізацією, яка орієнтована на ефективність, виразність та елегантність коду.; компонент

Nim підтримує роботу об'єкти, які можна використовувати як структури даних.; |-

Expressiveness - Зручний синтаксис Код часто коротший і читабельніший, ніж у C або C++.; Під час розробки на Nim варто враховувати:

26.; Тестування

echo message

nim_project/

index.php?title=Категорія:Nim

6.3.; Синтаксис із відступами


== 25.; Безпека та якість коду ==

 "year": 2008

!; else:

echo "Hello, world!"

Окремо варто відзначити C++, Objective-C або JavaScript, що робить мову придатною; додатково реалізовано CLI-утиліт, веброзробки, embedded-рішень і інтеграції з існуючими бібліотеками.; "language": "Nim",
!; Див.; name: string

=== 10.2.; Цикл for ===

Приклад створення нового пакета:
</syntaxhighlight>
</syntaxhighlight>
|-
| Efficiency
| Програми мають бути швидкими та ефективними за використанням ресурсів.; Спочатку мова мала назву '''Nimrod''', але пізніше була перейменована на '''Nim'''.; |}

 a * b
== 20.; Типові сфери сфера застосування ==
<pre>

Для оптимізованої release-збірки:

{| class="wikitable"
 body
{| class="wikitable"
Як і Python, Nim використовує відступи для позначення блоків коду.; |-
| os
| Робота з операційною системою.;

echo name паралельно з цим Nim підтримує роботу виведення типів:

import strutils

'''Рекомендація:''' Nim добре підходить для технічних інструментів, performance-sensitive модулів, експериментальних продуктів і невеликих команд, але для enterprise-проєктів варто попередньо оцінити ризики екосистеми.; Компіляція або трансляція
=== 10.3.; Цикл while ===
Nim має потужні функціональні можливості метапрограмування:
 body

<syntaxhighlight lang="nim">

<syntaxhighlight lang="nim">
<syntaxhighlight lang="nim">
<pre>
|-
| Висока продуктивність
| завдяки наявності компіляції у C/C++ Nim має змогу створювати швидкі програми.; Роль Nim у сучасній розробці ==

Nim займає нішу між високорівневими мовами на кшталт Python і низькорівневими мовами на кшталт C та C++.

Його можна розглядати як інструмент для розробників, які хочуть:

* писати продуктивний код;
* зберегти читабельність;
* уникати надмірної складності C++;
* мати доступ до системного рівня;
* використовувати метапрограмування;
* створювати компактні та швидкі програми.

== 30.; Принцип
<div style="border-left: 6px solid #f57c00; background: #fff3e0; padding: 12px 16px; margin: 16px 0;">

echo add(2, 3)

 test "addition":
!; |-
| Метапрограмування
| Можна створювати шаблони, макроси та DSL.; echo "Hello from Nim"
|-
| int
| Ціле число
| 42
|-
| float
| Число з плаваючою комою
| 3.14
|-
| bool
| Логічне значення
| true / false
|-
| char
| Один символ
| 'A'
|-
| string
| Рядок
| "Hello"
|-
| seq
| Динамічний масив
| @[1, 2, 3]
|-
| array
| Масив фіксованого розміру
| [1, 2, 3]
|-
| tuple
| Кортеж
| (name: "Nim", year: 2008)
|-
| object
| Структура даних
| Person
|}

</div>

 v

 tests/

if age >= 18:

v
- Rust Go має більшу екосистему, Nim — більш гнучкий синтаксис і метапрограмування.; |- C - C++ Обидві мови можуть використовуватися для системного програмування.;

У цьому прикладі компілятор сам визначає типи змінних.; Приклад імпорту стандартного модуля:

Менша популярність }

Nimble — це менеджер пакетів для Nim.; | Rust має сильніший акцент на безпеці пам'яті через borrow checker.; app/

nim_project.nimble

proc add(a: int, b: int): int =

4.; Філософія мови

echo text.capitalizeAscii()
2005 Початок розробки мови під назвою Nimrod.;<syntaxhighlight lang="nim"> ; Коли Nim має змогу бути не найкращим вибором ==

Nim може бути не найкращим вибором, якщо:

  • потрібна велика кількість готових enterprise-бібліотек;
  • важлива доступність великої кількості розробників на ринку;
  • потрібна максимальна підтримка хмарних SDK;
  • команда не готова працювати з менш популярною екосистемою;
  • проєкт має суворі вимоги до довгострокової підтримки з боку великого вендора.

== 29.; Подія

; * продуктивність, характерну для C/C++;
  • читабельний синтаксис, схожий на Python;
  • сильну систему типів;
  • метапрограмування;
  • генерацію коду під час компіляції;
  • можливість компіляції в C, C++, Objective-C та JavaScript;
  • підтримку процедурного, об'єктно-орієнтованого, функціонального та узагальненого стилів програмування.; |-
Менше бібліотек let name = "Nim"
var Змінна, яку можна змінювати.; author = "Example Author"

Ключові етапи розвитку:

greet("Олена") echo user.age version = "0.1.0"

Nim використовує статичну типізацію, тобто типи перевіряються під час компіляції.; Призначення

6.; Основні особливості

return a + b

3.; Призначення Nim

index.php?title=Категорія:Мови програмування suite "Math tests": {{SEO
echo "Доступ дозволено"

10.; Умови та цикли

У Nim використовуються три основні способи оголошення значень:
- 2019 Вийшла реліз Nim 1.0.; let version: float = 2.2 <syntaxhighlight lang="nim"> Мова поєднує: