Представлен релиз языка системного программирования Nim 2.0. Язык Nim ориентирован на решение задач системного программирования, использует статическую типизацию и создан с оглядкой на Pascal, C++, Python и Lisp. Исходный код на языке Nim компилируется в представление на C, C++, Objective-C или JavaScript. В дальнейшем полученный C/C++ код компилируется в исполняемый файл при помощи любого доступного компилятора (clang, gcc, icc, Visual C++), что позволяет добиться производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора. По аналогии с Python в Nim в качестве разделителей блоков применяются отступы. Поддерживаются средства метапрограммирования и возможности для создания предметно-ориентированных языков (DSL). Код проекта поставляется под лицензией MIT...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=59542
Надо попробовать переписать на него свои питоно-скрипты. Отпишусь в следующей новости о результатах.
. Неинтересно
Без шуток, отпишись о результатах. Может, тоже перепишу вслед, если опыт удастся
Интересно.
Нахрена? А главное - зачем? Если работает и при этом есть не просит.
Видать, долго работает. Пока получит результат - три раза успевает пожрать - утром, в обед и вечером.
> питоно-скрипты
> Исходный код на языке Nim компилируется
Бывают даже интерпретаторы Си.
если у тебя в системе есть компилятор си, ты можешь юзать nim, в отличие от rust
> позволяет добиться производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусораИнтерпретируемые языки тоже позволяют добиться производительности близкой к компилируемым, если не учитывать затраты на интерпретатор.
ник у тебя верный
Это аллюзия на другого персонажа, просто замените "Л" на "П".
У того персонажа оно конечно - менопауза, но мозги то - есть ... в отличии от дешёвой китайской подделки :)
Компилируемые языки позволяют получить результат мгновенно, если не учитывать затраты на рантайм.
Уже ведь есть golang, чем nim принципиально отличается чтобы его выбирали вместо golang?
Он проще
>Он прощеЯзык с метапрограммированием, уровня лиспа (синтаксические макросы) и/или С++ (генерики и что-то похожее на шаблоны С++) проще чем Go?
Julia?
А зачем сегодня язык, который метит быть универсальным, без метапрограммирования?
проще, на порядок производительнее, не вендорлокнутый (если не учитывать, что автор работает в амазоне и нигде, кроме амазона, свою книгу не продаёт)
Ага, а если учитывать?
Ссылку на тесты доставишь? На те самые, где Ним на порядок производительнее Голанга.
в гугле забанили? первая ссылка
https://programming-language-benchmarks.vercel.app/go-vs-nim
> в гугле забанили? первая ссылка
> https://programming-language-benchmarks.vercel.app/go-vs-nimПо ссылке где-то обгоняет го в 2 раза.
А где-то уже го обгоеяет этот ним в 2 раза.Так что вы сами себя разоблачили получается. Ещё с таким пафосом.
а было сразу видно, что ты читать не умеешь, а утверждения привык формулировать со словами-паразитами неуверенности навроде "где-то" и "получается"
> а было сразу видно, что ты читать не умеешьInput: 1000
lang code time
go 1-m.go 79ms
go 1.go 477ms
nim 1.nim timeout
nim 1.nim timeout
Так на порядок - это в десятки раз. По ссылке видно что во многих тестах nim отваливается по таймауту, в других в сотни раз медленнее. Производительнее, ага
timeout, так это он просто четустал и пошел на опенет читать комменты. Завтра все посчитает быстрее чем кто-либо во вселенной. Или послезавтра.
>на порядок производительнееПодобные экстраординарные утверждения требуют хоть каких-то доказательств.
ты всё, что рушит твой маня-мирок, называешь экстраординарным?
> на порядок производительнееCitation needed.
> на порядок производительнееэто будет где-то в 5 раз быстрее Си и Rust 😄😄😄
Согласен. В корпорациях так и делают - выбирают промышленные языки, PHP, Java, Go...Что приводит к тому что вокруг них появляется коммьюнити и экосистема, популярные Open Source.
Я даже не буду спрашивать, что из этого есть у Nim. Есть ли хоть один проект, уровня Kubernetes или CockroachDB. Ответ немного предсказуем.
Но пожелаем удачи проекту, посмотрим, чем он сможет нас порадовать лет через 5-10.
> В корпорациях так и делают - выбирают промышленные языки, PHP, Java, Go...Это что за корпорации такие PHP берут? C#, Java, GO, Python видел. А PHP только в стартапах видел, и как легаси в бывших стартапах (мордокнига там, вконтакут).
1Цэ битрикс и куча го(д|в)ноты на ём - если за страну родных осин.
Все потроха продуктов компании 1С настолько вонючее говно, что я бы не доверял их выбору.
Например, весь веб интерфейс игры Path of Exile крутится на PHP и trade тоже. Понятно что индексер там написан на чем-то быстром. И все держится практически на одном разработчике.
> Например, весь веб интерфейс игры Path of Exile крутится на PHP и
> trade тоже. Понятно что индексер там написан на чем-то быстром. И
> все держится практически на одном разработчике.Path of Exile EA написали или Ubisoft? Ах, нет, это был какой-то стартап, что возвращает нас к моему изначальному тезису.
Он не стучит на тебя в корпорацию добра.
без сомнения лучший язык
>без сомнения лучший язык... это - заливной телячий, под чесночным соусом и под стопочку пшеничной водки.
У меня есть мнение - хрен оспоришь! ТЧК.
>что позволяет добиться производительности близкой к СиЭто типо какой-то особый перк?
вам, jvm-щикам, никогда не понять, ваш поезд ушёл
В современных системах, где "программа выполняется в интерпретаторе, который выполняется в "не-виртуалка-а-контейнер" внутри полноценного виртуального хоста в виртуальной машине, которая, в свою очередь, выполняется низкоуровневой IL-виртуалке" - да, это перк.
Как раз в таком случае это значения никакого не играет...
Вообще удивительно как люди умудряются прочитать мое сообщение таким извращённым образом.Я вам пишу - какая-то особая прозвидительности сишки это миф.
Мне отвечают - да сишка очень быстрая вот бы всем так.
У людей ментальный блок.И русского языка ещё и не знают.
> а отсутствие запятой у меня ты даже не заметишьСнявши голову, по волосам не плачут.
что у тебя голова, если волосы - грамотность?
Сказал ыксперт, который написал больше всех комментов к новости )))
И точку забыл)
точки в конце сообщений/фраз вызывают дискомфорт у собеседника в неформальном интернет-общении, учёные доказали (с)
Как и запятые, полагаю?) Ссылочку на исследование скинете?)
нет, и с запятыми у меня всё идеально
С запятыми может и нормально, а вот с пониманием контекста беседы похоже не очень.
Запятые в конце сообщения доставляют ещё больший дискомфорт чем точки так-то,
Вполне читаем. Таким должен был быть раст.
А в чё по-вашему проблема с Растом ?
В растишках! (С)А так язык - да и язык. И не такие видывали :)
А так язык - да и язык. И не такие выкидывали ;)
> создан с оглядкой на Pascal, C++, Python и Lisp. Исходный код на языке Nim компилируется в представление на C, C++, Objective-C или JavaScript. В дальнейшем полученный C/C++ код компилируется в исполняемый файлАвгуст только начался, а приз месяца "За рвение шаблонов" уже выиграли.
Ну и норм же.Взяли удачные находки у языков, // Хотя блоки-отступами я не понимаю. Короткий { ... } таки выразительней
красиво совместили их в один язык, // Ну допустим, как минимум без оглядки на совместимость с легаси-синтаксисом
добавили немного рантайм-сахара // Что плохого в фоновом сборщике так никто и не пояснил.
Далее пользовательский код транспилируется в язык, для которого есть mature (слово "зрелый" в русском не несёт той коннотации) компилятор и собирается.
> JavaScript. В дальнейшем полученный C/C++ кодИ вам удачной трансэпиляции.
Удача нужна Linux (ядру) на архитектурах, для которых Rust не умеет генерировать код.
Ха ха
Не, чувак, удача нужна таким архитектурам.
"Горжусь, что Линукс работает на Эльбрус!" (ц)
Ура! У Эльбруса появилась надежда!
Плюсанул и заплакал от счастья.
> Ура! У Эльбруса появилась надежда!У Надежды появился Эльбрус! Она таких уже давно не считает (и ни во что не ставит).
> По аналогии с Python в Nim в качестве разделителей блоков применяются отступыДальше можно не читать. Хуже только парсить скобки в лиспе, но там хоть понятно зачем.
)
>> По аналогии с Python в Nim в качестве разделителей блоков применяются отступы
> Дальше можно не читать. Хуже только парсить скобки в лиспе, но там
> хоть понятно зачем.Хуже только скобки в сишке, и непонятно зачем.
если бы ты код на nim хоть раз в глаза видел, знал бы, зачем, а пока смысла отвечать тебе по существу столько же, сколько сишнику объяснять js-вкатышу, где в компьютере оперативка
А ... дык ты Ылита? Предупреждать надо!(С) :-D
>если бы ты код на nim хоть раз в глаза видел, знал бы, зачемПосмотрев код на nim понимаешь зачем нужны скобки в сишке?
именно так
Nim ререводится в С. Значит можно переписать ядро линукса на Nim.Хм...
в теории можно, если gc отключить, но это, во-первых, будет такой же кастрат, как раст в ядре (только весить будет не в 100 раз больше, чем бинарь на си, а в 10), во-вторых, это как ORM использовать - можно, но если ты в уме сможешь прикинуть, что там под капотом выйдет
> (только весить будет не в 100 раз больше, чем бинарь на си,Очередной опеннетный экспертизмъ с пруфами вида "Мы все так говорим, а значит это правда!".
а ты белу рученьку оттуда оторви и поди собери что-нибудь хоть раз в жизни
> а ты белу рученьку оттуда оторви и поди собери что-нибудь хоть раз в жизниТак я то как раз и собирал - так что пруфы вместо виляний давай, балаболка.
А в честь чего мажорную версию подняли? Вроде никаких радикальных изменений. Или у них как в ядре, просто циферьки?
Тоже удивил этот релиз. Ожидал большего от 2.0.
Как митники, там std немного порефакторили.
*минимум
Я думал, что 2.0 будет означать, что ORC и ARC стали а) стабильными, б) gc по умолчанию. Не знаю, насколько я прав.
Интересно, а как у него с интероперабельностью? Можно ли легко подключать питоновские модули там, или дёргать сишные либы? Надеюсь что это не очередная "вещь в себе", очередной "супер-язык-убийца-других-языков" на котором надо "просто переписать вообще всё" типа раста.
Какая то особенная религия запрещает посмотреть, хотя бы в той же вики? Цитата:Двоичный интерфейс приложений (ABI) языка Си поддерживается так же хорошо, как и стандартная библиотека Си, включая существующие код и библиотеки. Nim поддерживает соглашения о вызовах функций Си и функций из библиотек Windows (модуль dynlib позволяет получить доступ к функциям динамических библиотек (файлы .dll, .so, .dylib). К тому же поддерживаются ABI C++ и Objective C, а также интеграция с JavaScript.
Таким образом, язык имеет привязки к большому количеству библиотек, от системных (POSIX, Windows) до библиотек СУБД (MySQL, PostgreSQL, SQLite, ODBC), и от скриптовых языков (Python, Lua, Tcl) до графических библиотек (OpenGL, Cairo, SDL).
Реализована поддержка привязок к GTK, X11, IUP и Windows API, также полезны привязки к libcurl, libzip и PCRE.
>от скриптовых языков (Python, Lua, Tcl)Да ну, даже NumPy и Matplotlib можно?
Вариантов ответа три:
1. Забей. Это не твоё, или тебе не нужно, или ты не умеешь искать ответы на свои вопросы.
2. RTFM.
3. _github.com/yglukhov/nimpy
Nim с другим миром может общаться только через обертки написанные на Си, с Rust через cbindgen. Кроме того к этим Си оберткам нужно будет написать интерфейсы доступа на Nim коде.
Почему они пишут название типа на следующей строчке? Я знаю, что так можно, и для следующего типа можно будет не писать type, но это же просто лишний уровень отступа.
Почему-почему, питонисты покусали.
Потому, что ключевое слово type определяет название секции. Это из паскаля. Секции type, var, const
Так вопрос в том, зачем им секция, когда в ней всего один элемент, т.е. если можно написатьtype Rational* = object
num: int = 0
den: int = 1
вместоtype
Rational* = object
num: int = 0
den: int = 1
А зачем в паскале нельзя было обьявлять переменные в теле процедуры?
Ежовые рукавицы против творческой жилки в душе програмиста
Так, вроде, сразу глазами ловишь секции, выбираешь секцию, модально переключаешь мышление на соответствующий DSL, ну там описание типов (или вспоминаешь спинным мозгом ограничения в секции const)
Ну и может сначала как-то связано было с однопроходным компилятором, а теперь легаси
Можно было бы и разрешить и так:
type; Rational*=object; num: int=0; den: int=1; ;; internalFlag=object; val: bool=false; ;; ;;;
Но это и препроцессором решается
Извиняюсь:
из документации
type Foo* = enum abc
Откуда такой фикс на паскале, тем более в таких моментах как объявление переменных (которые к тому же обусловлены ограничениями железа / кривоватой реализацией)? Смысл делать секции, если они почти всегда из одного элемента? В C тоже можно написать напримерdoubleно никто же так не пишет.
x = 0,
y = 1;
>> Смысл делать секции, если они почти всегда из одного элемента?Заветы дидов о структурном программировании говорят, что написание кода по структуре, структурирует мышление программиста и делает программы меннее подверженными ошибкам.
Как-бы раньше, програмирование было инженерной дисциплиной и имело смысл сразу допускать минимальное количество ошибок.
Сейчас програмирование является научной дисциплиной, где это не имеет смысл. Зачем беспокоится о минимальном количестве ошибок и элегантных програмных решениях, если все равно ошибка будет в стороннем модуле, который изучается методом научного тыка, так как документация давно уже неактуальна к коду и вообще не полная. Поэтому для получения работающего решения нужно го.ня.ать по максимуму в данной точке программы и максимально гибко.
А первые строчки на сайте о Nim
Efficient, expressive, elegant
Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula.
Ну вот Andreas Rumpf упарывается по elegant, Ada and Modula
Старая гвардия (mature), так сказать
Наверно, не ответил.
Если у вас секция состоит почти всегда из одного элемента, вы что-то делаете не так. Не структурно. Вы не произвели декомпозицию задачи и, воообще, походу ее не понимаете.
Но повторяю, в современных условиях не нужно понимать задачу, надо сделать максимально похожее работающее решение в существующей тяжелой инфраструктуре
Вот специально надо добавлять:
не сборщик мусора, а менеджер памяти как в Rust
скобочки - прошлый век, 60-е - 70-е года, ЕМНИП
макросы - не как в С, а нормальные. Насколько помню - 3 варианта, в т.ч. и Hygienic macro, говорят, как в LISP
Что за менеджер памяти в Rust?
https://doc.rust-lang.ru/book/ch04-01-what-is-ownership.html
Запутали, загадили макросами и сахаром. Не удержались, ушли в СиПлюснутость. Потому увы, не выстрелит (
Так без сахара сейчас ни один новый язык не выстрелит.
Сахар должен быть сбоку от языка, а не так что язык весь в сахаре из-за чего каждый человек занимается только извращением с кодогенерацией вместо читабельности. Лучше бы добавили нормальных человеческих декораторов и на этом успокоились.
|По аналогии с Python в Nim в качестве разделителей блоков применяются отступыдальше можно не читать...
"Исходный код на языке Nim компилируется в представление на C, C++, Objective-C или JavaScript."Не компилируется, а транслируется. Надеюсь новость писал не автор этого "языка".
ИМХО в nim нужны нормальные классы, эта пародия Go и Uniform Call Syntax не впечатляют и не добавляют OOP коду читабельности.И на настоящий момент огромный недостаток Nim заключается в том что, вместо того чтобы реализовывать библиотеки нормально на коде Nim, люди упариваются в возможности написания "псевдо-декларативной кодогенерации" вместо обычного кода.
Плюс у языка очень плого с туллингом. Например по дефолту с VSCode он интегрируется через nimsuggest, а экспериментальная LSP реализация требует грамотной настройки, иначе оно на каждый .nim файл сорцов проекта запустит по процессу и озу моментально закончится. Плагин от JetBrains заброшен емнип с января, одна надежда что кто-то профинансирует плагин для JetBrains или же трудоустроит разработчиков Nim внутри JetBrains что было бы очень круто.
Плюс в nim совершенно из коробки нет такого простого xml/json unmarshal/decoder как в Go, в nim с этим все плохо.
Пробовал этот Nim - не понравился. Ощущение поделки-недоделки от этого яп.
Попробовал и понял, что то лучшее, что есть на данный момент. Полгода программирую на нём. Чистое удовольствие.
В язык заимствовали много хороших идей, но тулчейн ужасный, долгая компиляция. Непонятно, как так вышло, что у языка 2 версия, но такое фиговое окружение. Почему-то, если Вы установите язык НЕ через choosenim, то начинаются приключения.