The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз языка программирования Nim 1.4.0 , opennews (ok), 18-Окт-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


13. "Релиз языка программирования Nim 1.4.0 "  –1 +/
Сообщение от topin89email (ok), 18-Окт-20, 17:53 
Быстрого ещё может. Но не системного. Языки со сборкой мусора не могут претендовать на системное программирования. Ну то есть технически может и могут, но на практике не выходит.
А так да, язык хороший.
Ответить | Правка | Наверх | Cообщить модератору

17. "Релиз языка программирования Nim 1.4.0 "  +/
Сообщение от Sin2x (ok), 18-Окт-20, 18:01 
Это некорректное утверждение. Nim не просто подходит как язык для системного программирования, он _позиционируется_ как язык для системного программирования.

https://nim-lang.org/

"Nim is a statically typed compiled systems programming language".

А вот тебе живой пример ядра на ниме:

https://github.com/dom96/nimkernel

Ответить | Правка | Наверх | Cообщить модератору

42. "Релиз языка программирования Nim 1.4.0 "  +1 +/
Сообщение от topin89email (ok), 18-Окт-20, 20:52 
> Это некорректное утверждение. Nim не просто подходит как язык для системного программирования,
> он _позиционируется_ как язык для системного программирования.
> https://nim-lang.org/
> "Nim is a statically typed compiled systems programming language".

Нда, у systems programming language слишком значений. Я не знаю, что здесь имелось в виду.

> А вот тебе живой пример ядра на ниме:
> https://github.com/dom96/nimkernel

Пример хороший, пока не находишь в конфиге вот это : "--gc:none". В самом примере это обходится очень просто -- там память не выделяется. А придётся. Наверное, стоит написать свой собственный сборщик мусора, например, подогнав arc или orc под ядро. Вполне выполнимо, и после этого язык можно назвать пригодным для создания ядер.
Но даже с этими гипотетическими изменениями, в языке вообще нет поддержки ручной работы с памятью. И рано или поздно для адекватной производительности этом может понадобиться. В Расте есть. В C и C++ есть. В паскале даже есть. В Nim нет. Следовательно, прежде чем писать на нём, потребуется создать такую поддержку. Наверняка это даже возможно. Но как-то слишком много возни, чтобы называться системным в плане "пригоден для создания ядер и драйверов".
Впрочем, на всяких ардуинах и микроконтроллерах в целом, где память и так обычно не выделяется, nim может сработать не только в "потому что могу" проектах. Тоже системненько.

А так даже питон можно напрямую из ядра запускать: https://www.youtube.com/watch?v=bYQ_lq5dcvM

Ответить | Правка | Наверх | Cообщить модератору

49. "Релиз языка программирования Nim 1.4.0 "  –1 +/
Сообщение от анонн (ok), 18-Окт-20, 21:21 
> Пример хороший, пока не находишь в конфиге вот это : "--gc:none". В
> самом примере это обходится очень просто -- там память не выделяется.
> А придётся.

...
> работы с памятью. И рано или поздно для адекватной производительности этом
> может понадобиться. В Расте есть. В C и C++ есть.

Т.е. использование "ручных" типов ссылок (первая же строчка)
PVIDMem* = ptr array[0..65_000, TEntry]
> Traced references are declared with the ref keyword, untraced references are declared with the ptr keyword.

Вы предпочли не заметить?

Ответить | Правка | Наверх | Cообщить модератору

54. "Релиз языка программирования Nim 1.4.0 "  +/
Сообщение от topin89email (ok), 18-Окт-20, 21:39 
>> Пример хороший, пока не находишь в конфиге вот это : "--gc:none". В
>> самом примере это обходится очень просто -- там память не выделяется.
>> А придётся.
> ...
>> работы с памятью. И рано или поздно для адекватной производительности этом
>> может понадобиться. В Расте есть. В C и C++ есть.
> Т.е. использование "ручных" типов ссылок (первая же строчка)
> PVIDMem* = ptr array[0..65_000, TEntry]
>> Traced references are declared with the ref keyword, untraced references are declared with the ptr keyword.
> Вы предпочли не заметить?

Конечно заметил. Я заметил и каст на блок памяти чуть ниже. Это не выделение памяти. Я не знаю деталей, но это явно жёстко заданный блок, видимо привязанный к BIOS'у.

Какой есть аналог malloc/free? Как их привязать к стандартной модели выделения/развыделения? Не превратится ли язык в более красивый C, если написать их самому?

Ответить | Правка | Наверх | Cообщить модератору

60. "Релиз языка программирования Nim 1.4.0 "  +/
Сообщение от анонн (ok), 18-Окт-20, 21:50 
> Конечно заметил. Я заметил и каст на блок памяти чуть ниже. Это
> не выделение памяти. Я не знаю деталей, но это явно жёстко
> заданный блок, видимо привязанный к BIOS'у.
> Какой есть аналог malloc/free? Как их привязать к стандартной модели выделения/развыделения?
> Не превратится ли язык в более красивый C, если написать их
> самому?

Как и везде - написать/использовать аллокатор.
Я хотел указать на то, что ваши рассуждения строятся на изначально неверной предпосылке - GC в nim опционален не "возможностью отключить" сам сборщик, а возможностью использования "ручных" аллокаторов, для чего там два вида указателей (ref для GC и ptr)

https://nim-lang.org/docs/manual.html#types-reference-and-po...
>>>

Nim distinguishes between traced and untraced references. Untraced references are also called pointers. Traced references point to objects of a garbage collected heap, untraced references point to manually allocated objects or to objects somewhere else in memory. Thus untraced references are unsafe. However for certain low-level operations (accessing the hardware) untraced references are unavoidable.
...
To allocate a new traced object, the built-in procedure new has to be used. To deal with untraced memory, the procedures alloc, dealloc and realloc can be used.
(это из примера "Mixing GC memory with ptr")


type
  Data = tuple[x, y: int, s: string]

# allocate memory for Data on the heap:
var d = cast[ptr Data](alloc0(sizeof(Data)))

# create a new string on the garbage collected heap:
d.s = "abc"

# tell the GC that the string is not needed anymore:
reset(d.s)

# free the memory:
dealloc(d)

Ответить | Правка | Наверх | Cообщить модератору

62. "Релиз языка программирования Nim 1.4.0 "  +1 +/
Сообщение от topin89email (ok), 18-Окт-20, 21:54 
> Как и везде - написать/использовать аллокатор.
> Я хотел указать на то, что ваши рассуждения строятся на изначально неверной
> предпосылке - GC в nim опционален не "возможностью отключить" сам сборщик,
> а возможностью использования "ручных" аллокаторов, для чего там два вида указателей
> (ref для GC и ptr)
> https://nim-lang.org/docs/manual.html#types-reference-and-po...

Ответил чуть ниже, но всё равно повторюсь. Я не знал, что это возможно. Тогда да, Nim можно называть системным без оговорок.

Ответить | Правка | Наверх | Cообщить модератору

50. "Релиз языка программирования Nim 1.4.0 "  –1 +/
Сообщение от Sin2x (ok), 18-Окт-20, 21:28 
https://nim-lang.org/docs/gc.html

In addition to GC_ref and GC_unref you can avoid the garbage collector by manually allocating memory with procs like alloc, alloc0, allocShared, allocShared0 or allocCStringArray. The garbage collector won't try to free them, you need to call their respective dealloc pairs (dealloc, deallocShared, deallocCStringArray, etc) when you are done with them or they will leak.

Ответить | Правка | К родителю #42 | Наверх | Cообщить модератору

57. "Релиз языка программирования Nim 1.4.0 "  +1 +/
Сообщение от topin89email (ok), 18-Окт-20, 21:45 
> https://nim-lang.org/docs/gc.html
> In addition to GC_ref and GC_unref you can avoid the garbage collector
> by manually allocating memory with procs like alloc, alloc0, allocShared, allocShared0
> or allocCStringArray. The garbage collector won't try to free them, you
> need to call their respective dealloc pairs (dealloc, deallocShared, deallocCStringArray,
> etc) when you are done with them or they will leak.

Что сделает язык красивым C++. Так-то тоже неплохо, но rust с его проверками на этапе компиляции и явной маркировкой unsafe для подобных вызовов всё же лучше.

Но, ладно, раз есть такая низкоуровневая возможность, как и возможность написать свою версию alloc/dealloc прямо на Nim, я признаю язык системным.

Ответить | Правка | Наверх | Cообщить модератору

83. "Релиз языка программирования Nim 1.4.0 "  –1 +/
Сообщение от Аноним (83), 19-Окт-20, 10:37 
За Nim стоит чуть ли не один человек, за rust целая команда, большая популярность, и заинтересованность больших корпораций.
Ответить | Правка | Наверх | Cообщить модератору

34. "Релиз языка программирования Nim 1.4.0 "  +/
Сообщение от Аноним (34), 18-Окт-20, 20:15 
как понял, GC у него опционально вкл/выкл
Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

43. "Релиз языка программирования Nim 1.4.0 "  +/
Сообщение от topin89email (ok), 18-Окт-20, 20:53 
> как понял, GC у него опционально вкл/выкл

Это да. Но в режиме gc:none память никогда не будет освобождена. К счастью, там много разных сборщиков, в т.ч. легковесный arc и чуть менее легковесный orc.

Ответить | Правка | Наверх | Cообщить модератору

51. "Релиз языка программирования Nim 1.4.0 "  +2 +/
Сообщение от Аноним (51), 18-Окт-20, 21:29 
На практике он по потреблению памяти сравним с C / C++ / Rust. По быстродействию тоже. Причём на разных тестах от разных авторов.

Что говорит что он отлично подходит для embedded из коробки.

Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

58. "Релиз языка программирования Nim 1.4.0 "  +2 +/
Сообщение от topin89email (ok), 18-Окт-20, 21:48 
> На практике он по потреблению памяти сравним с C / C++ /
> Rust. По быстродействию тоже. Причём на разных тестах от разных авторов.
> Что говорит что он отлично подходит для embedded из коробки.

Тут согласен. Указатели есть, выделение/развыделение не нужно и вообще вредно и опасно. Для встройки его можно и попробовать, хотя бы как красивую альтернативу плюсам.

Ответить | Правка | Наверх | Cообщить модератору

95. "Релиз языка программирования Nim 1.4.0 "  +/
Сообщение от Аноним (95), 21-Окт-20, 03:15 
Как раз с этим сейчас идёт работа - https://habr.com/ru/post/523674/ и так далее. Если использовать чисто ARC, то никакого трейсинга нет - просто RAII и подсчёт ссылок.
Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

98. "Релиз языка программирования Nim 1.4.0 "  +/
Сообщение от BrainFucker (ok), 24-Окт-20, 05:55 
> Языки со сборкой мусора не могут претендовать на системное программирования.

А зачем вам мусор в системе? Не все под винду разрабатывают. В nim нельзя опционально отключить сборщик мусора?

Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

99. "Релиз языка программирования Nim 1.4.0 "  +/
Сообщение от topin89email (ok), 24-Окт-20, 22:20 
>> Языки со сборкой мусора не могут претендовать на системное программирования.
> А зачем вам мусор в системе? Не все под винду разрабатывают. В
> nim нельзя опционально отключить сборщик мусора?

Я там чуть выше писал, что сменил свою точку зрения. Сборщик мусора можно отключить, и можно использовать ручное выделение и развыделение (о чём я не знал, когда писал, что не системный). Так мы получаем красивый C, системный язык наравне с C,C++ И D.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру