Nim Programlama Dili

develooper

Yeni Üye
13 Mar 2020
2
3
3
Nim Programlama Dili.png
Anasayfa: https://nim-lang.org/
Wikipedia: https://en.wikipedia.org/wiki/Nim_(programming_language)
Rosettacode: https://rosettacode.org/wiki/Category:Nim
Nim Türkiye: https://www.facebook.com/Nim-Programlama-Türkiye-104452144296523/?modal=admin_todo_tour

Merhaba dünya uygulaması;
Kod:
echo("Merhaba Dünya")
Nim programlama dili c/c++ ve javascripte derleyen bir derleyicisi olan ve Python çok benzer bir programlama dilidir. Kullanımı oldukça kolay, anlaşılabilir ve c/c++ çalıştığı her yerde çalışabilir. Derlenen kodun hiçbir çalışma kütüphanesi bağımlılığı yoktur yani tam olarak c veya c++ kodlarına çevirebilir, bu nedenle bir çok ortamda sorun olan hazırda c++ kütüphanelerini kullanma(c++ FFI) sorunu çözülür. Ayrıca c2nim, nimterop, nimgen vb. araçlarla c/c++ kodları için otomatik arayüz üretilebilir. Örnek olarak c++ sfml kütüphanesinin çıktısı;
Kod:
{.passL: "-lsfml-graphics -lsfml-system -lsfml-window".}

type
  VideoMode* {.importcpp: "sf::VideoMode".} = object
  RenderWindowObj {.importcpp: "sf::RenderWindow".} = object
  RenderWindow* = ptr RenderWindowObj
  Color* {.importcpp: "sf::Color".} = object
  Event* {.importcpp: "sf::Event".} = object

{.push cdecl, header: "<SFML/Graphics.hpp>".}
{.push importcpp.}

proc videoMode*(modeWidth, modeHeight: cuint,
                modeBitsPerPixel: cuint = 32): VideoMode
proc newRenderWindow*(mode: VideoMode, title: cstring): RenderWindow
proc pollEvent*(window: RenderWindow, event: var Event): bool
proc newColor*(red, green, blue, alpha: uint8): Color
proc clear*(window: RenderWindow, color: Color)
proc display*(window: RenderWindow)
Gömülü sistemlerde c/c++ sıkışıp kalmış birçok insan için alternatif niteliğinde. Arduino-nim ve nim-arduino github deneysel projeleri geliştiricilerin arayış içinde olduklarını ve nim dilinin umut ışığı olduğunun belirtileri.
Derin öğrenme konusunun en önemli ayağı "TENSOR" kütüphanesidir. Arraymancer ve daha birçok kütüphane bu soruna çözüm olma yolunda. Projeler deneysel olsa da üretilen kod aşırı hızlı ve küçük. C++ FFI sayesinde pytorch c++ arayüzü nim aktarılabiliyor(nimtorch) ve Python benzeri bir programlama dilinde hızlı kod üretilebiliyor.

Nim programlama dili c/c++ ürettiğinden acaba hafıza, async ve thread güvenli mi sorusu aklıma geldi. Nim derleme zamanında yeni açğın bu tip sorunlarını çözüyor(en azında çok başarılı çözümler getirmiş). Hafıza yönetiminde çok farklı GC(garbage collector) seçenekleri getiriyor. GC duyunca korkmayın iştemezseniz devre dışı bırakabiliyorsunuz. Ayrıca yeni tip Rust benzeri "--arc" GC geliştiriliyor. Genelde GC ile uğraşmanıza gerek yoktur. GC yazılım düzgün çalıştıktan sonra hızı veya hafızayı iyileştirmek üzere iş bittikten sonra uğraşılır. Nim GC baskısını azaltmak üzere "tunable automatic GC" özelliği barındırıyor.
Python kullanımı kolay olsa da async/await Javascript veya dotnet gibi dilin içine işlenmediğinden çalışan threadlerin güvenliğini temin etmez. Ancak programcı dışarıdan aldığı pypi kütüphaneleriyle kendi modüllerini yapmak ve test etmek zorundadır. Bu durum tüm programlama dilleri için geçerli olsa da bazı ortamlar işleri kat ve kat kolaylaştırır.
Nim standart kütüphanesi 1. yöntem;
Kod:
# "nim --threads:on c concurrent" komuduyla derleyin.
const str = ["Enjoy", "Rosetta", "Code"]

var thr: array[3, Thread[int32]]

proc f(i:int32) {.thread.} =
  echo str[i]

for i in 0..thr.high:
  createThread(thr[i], f, int32(i))
joinThreads(thr)
Nim standart kütüphanesi 2. yöntem;
Kod:
# "nim --threads:on c concurrent" komuduyla derleyin.
import threadpool
const str = ["Enjoy", "Rosetta", "Code"]

proc f(i) {.thread.} =
  echo str[i]

for i in 0..str.high:
  spawn f(i)
sync()
Eğer OpenMP kullanmak isteniyorsa openMP kütüphanesinin yüklü olması ve programa bağlanması gerekir;
Kod:
# "nim --passC:"-fopenmp" --passL:"-fopenmp" c concurrent " komuduyla derleyin.
const str = ["Enjoy", "Rosetta", "Code"]

for i in 0||2:
  echo str[i]
Eğer c++ template ile uğraştıysanız anlaşılması ve uygulamasının ne kadar güç olduğunu bilirsiniz. Eğer rosettacode her programlamada derleme zamanında yapılan işlemler için kod örneklerinde c++ ve nim karşılaştırması yapın. Sonuç olarak nim dilinde eğer fonksiyona giren değer "const" ise hemen derleme zamanında işlenmiş kod c/c++ diline çevrilecektir. Sonra c/c++ kendi optimizasyonunu yaptığında kat ve kat optimize edilmiş, yüksek hızlı kod çıkacaktır.

Python benzeriği pip benzeri paket yöneticisi ile artıyor. Projenin adı nimble işe yarar birçok kütüphane var. Nimble ile yeni proje açabilir, çalıştırabilir ve son çıkış ürününü("release") tek dosya halinde alabilirsiniz. Nimble dosyası .toml benzeri bir yapıdadır yani Rust veya Julia paket yöntecilerine de çok benzer. Misal;
Kod:
# Package

version       = "v0.1.0"
author        = "Benedict Cumberbatch"
description   = "Sample package."
license       = "MIT"

# Dependencies
requires "nim >= 0.13.0", "jester >= 0.1.0"

import distros
if detectOs(Ubuntu):
  foreignDep "libssl-dev"
else:
  foreignDep "openssl"

task test, "Run the tester!":
  withDir "tests":
    exec "nim c -r tester"
 
Moderatör tarafında düzenlendi:

develooper

Yeni Üye
13 Mar 2020
2
3
3
1) Lütfen Nim diğer programlama dillerinin yanına ekleyebilir misin?
2) Lütfen Nim, Nimble ve .toml formatlarını makele yazarken kullanılan kod dilleri kısına ekleyebilir misin?
 
  • Beğen
Tepkiler: RobotikForum

Robotikforum.net Nedir?

  • Robotikforum.net 2020 yılında kurulup yayın hayatına başlayan ve Türkiye’de robotik kodlama alanının gelişimine katkıda bulunmak için bu alan ile ilgilenen bireylerin bir birleri ile yardımlaşmaları ve fikir danışmalarını sağlayarak daha iyi öğrenmek için her bir bireyin bilgisini ve tecrübesini alarak kendini geliştirebileceği ve sorularına cevap bulabileceği bir platform olarak kurulmuştur.

Bilgilendirme!!!

İçerik sağlayıcı paylaşım sitelerinden biri olan www.robotikforum.net Adresimizde T.C.K 20.ci Madde ve 5651 Sayılı Kanun'un 4.cü maddesinin (2).ci fıkrasına göre TÜM ÜYELERİMİZ yaptıkları paylaşımlardan sorumludur.

Sayfamızı beğendin mi?