URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 113734
[ Назад ]

Исходное сообщение
"Новая версия языка программирования Nim 0.18.0"

Отправлено opennews , 03-Мрт-18 21:58 
Представлен (https://nim-lang.org/blog/2018/03/01/version-0180-released.h... значительный релиз языка  системного программирования Nim 0.18.0 (https://nim-lang.org). Язык использует (https://ru.wikipedia.org/wiki/Nim) статическую типизацию и создан с оглядкой на Pascal, C++, Python и Lisp. Код проекта поставляется (https://github.com/nim-lang/Nim) под лицензией MIT.


Исходный код на языке Nim  компилируется в представление на C, C++ или JavaScript. В дальнейшем полученный C/C++ код компилируется в исполняемый файл при помощи любого доступного компилятора (clang, gcc, icc, Visual C++), что позволяет добиться производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора.
По аналогии с Python в Nim в качестве разделителей блоков применяются отступы. Регистр написания символов в идентификаторах не учитывается. Поддерживаются средства метапрограммирования (https://ru.wikipedia.org/wiki/%D0%9C%D0%... и возможности для создания  предметно-ориентированных языков (DSL).


В новом выпуске отмечается ряд существенных новшеств и изменений, связанных с проведением чистки стандартной библиотеки перед релизом 1.0. Также внесена большая порция изменений, нарушающих обратную совместимость. Оператор индексирования "[]" теперь выдаёт ошибку, если запрошенный диапазон выходит за границы строки, вместо выдачи подпадающий под запрос части строки (например, var myString = "hello world"; myString[6 .. 45] теперь инициирует исключение IndexError). Также изменена логика обработки коллекций оператором "$" и прекращено приведение массивов array[x, char] к типу cstring. Спецсимвол "\n" теперь выводит только код перевода строки без кода возврата каретки.


Среди  новшеств:


-  Добавлен модуль strformat, предоставляющий поддержку форматируемых строковых литералов, позволяющих определить строку, содержащую подстановки (например let name = "Fred"; doAssert  fmt"My name is {name}."), в стиле "f"-строк Python 3.6.
-  В генератор документации добавлен макрос runnableExamples, позволяющий протестировать работу приводимых примеров кода.
-   Добавлен новый макрос mapLiterals, упрощающий создание массивов и последовательностей (например, "let x = mapLiterals([12, 34, 15, 1], uint32)").
-  Изменён алгоритм управления памятью. Новый алгоритм TLSF позволяет снизить фрагментацию памяти, ценой усложнения операций alloc и dealloc;

-  Серия изменений в модулях для асинхронного ввода/вывода. Представлена унифицированная реализация asyncdispatch и новая процедура getIoHandler, возвращающая дескриптор ввода/вывода или epoll/kqueue.  В модуле asyncjs появилась новая реализация async await  для бэкенда JavaScript;

-  Пакетный менеджер Nimble  обновлён до версии 0.8.10, в которой появилась возможность размещения нескольких пакетов Nimble в одном репозитории Git или Hg;

-  Из stdlib в обособленные пакеты Nimble переведены библиотеки gentabs, libuv, polynumeric, pdcurses, romans, libsvm и     joyent_http_parser. Объявлены устаревшими basic2d  и basic3d, вместо которых следует использовать такие пакеты, как glm, arraymancer и neo.

URL: https://nim-lang.org/blog/2018/03/01/version-0180-released.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=48186


Содержание

Сообщения в этом обсуждении
"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 03-Мрт-18 21:58 
> По аналогии с Python в Nim в качестве разделителей блоков применяются отступы.

Зачем? Даже Гвидо признал что это было не лучшей идеей.


"Новая версия языка программирования Nim 0.18.0"
Отправлено пепе , 03-Мрт-18 22:04 
а можно ссылку на это утверждение Гвидо?

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 03-Мрт-18 22:53 
http://www.yaml.org/faq.html

> Tabs have been outlawed since they are treated differently by different editors and tools. And since indentation is so critical to proper interpretation of YAML, this issue is just too tricky to even attempt. Indeed Guido van Rossum of Python has acknowledged that allowing TABs in Python source is a headache for many people and that were he to design Python again, he would forbid them.

Но, возможно, он бы стал требовать просто по 4 пробела. Или нет, по 5. Хотя нет, по 3 было бы лучше всего - ведь это так сильно меняет программу, сколько пробелов в каждой строке ставить.

p.s. Я до сих пор не могу найти лучшего кандидата на первое место в списке "самые идиотские решения в ЯП", чем задание синтаксической конструкции отступами.


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 03-Мрт-18 22:57 
Вы прочитали то, что процитировали? Он не против отступов, он против табуляций. Чтобы творческие личности могли в один отступ два пробела вставить, а в другой шесть. Пробелы хороши в функциональных языках - там всё равно нет отступов, лишь выравнивание. Но в императивных языках запрещать надо, скорее, пробелы, чем табуляции.

"Новая версия языка программирования Nim 0.18.0"
Отправлено анонимус , 04-Мрт-18 00:00 
Было бы логичней, как раз, в начале строки пользоваться табуляцией, а после первого непробельного символа разрешить только пробел. Один таб -один отступить и форматирование не разваливается при разном размере таба.

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 02:11 
> Было бы логичней, как раз, в начале строки пользоваться табуляцией, а после
> первого непробельного символа разрешить только пробел.

А не логичней было бы сперва ознакомиться с мат.частью, а уж потом рассуждать на тему "как правильнее"?
Обычно под «форматированием пробелами» понимаются только пробелы в начале строки. После первого непробельного символа - хоть трава не расти.

>Один таб -один отступить и форматирование не разваливается при разном размере таба.

Разный размер таба в одном файле?


"Новая версия языка программирования Nim 0.18.0"
Отправлено анонимус , 05-Мрт-18 07:53 
>Обычно под «форматированием пробелами» понимаются только пробелы в начале строки.

Это и есть глупость

>После первого непробельного символа - хоть трава не расти.

Если после непробельных символов используется таб, то форматирование разъедется при открытии файла в другом редакторе с другим размером таба.

>Разный размер таба в одном файле?

В разных редакторах у разных пользователей


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 05-Мрт-18 14:39 
>>Обычно под «форматированием пробелами» понимаются только пробелы в начале строки.
>  Это и есть глупость

Ну, если авторитет опеннета так считает.

>>После первого непробельного символа - хоть трава не расти.
> Если после непробельных символов используется таб, то форматирование разъедется при открытии
> файла в другом редакторе с другим размером таба.

Самому компилятору\интерпретатору это до одного места. Т.е. никакого насилия над Свободой Форматирования, о чем тут так пекутся некоторые, в этом случаене будет. А превращаться в плохо читаемую кашу оно будет в других ЯП точно так же.

>>Разный размер таба в одном файле?
> В разных редакторах у разных пользователей

Именно отступы табами - не развалятся. Если вперемежку с отступами и прочим, тогда да, будет винегрет. Но зато теоретически есть полная Свобода Форматирования! Нет?


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 05-Мрт-18 14:43 
> Именно отступы табами - не развалятся. Если вперемежку с пробелами и прочим,
> тогда да, будет винегрет. Но зато теоретически есть полная Свобода Форматирования!
> Нет?

fix.


"Новая версия языка программирования Nim 0.18.0"
Отправлено Ydro , 04-Мрт-18 11:24 
То есть кроме отступов, табуляций и пробелов вас двоих ни чего не беспокоит в Nim? :-)

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 14:24 
> Было бы логичней, как раз, в начале строки пользоваться табуляцией, а после
> первого непробельного символа разрешить только пробел. Один таб -один отступить и
> форматирование не разваливается при разном размере таба.

Хорошо, что не все программисты школьники-дегенераты, и поэтому пользуются пробелами.


"Новая версия языка программирования Nim 0.18.0"
Отправлено вапвап , 04-Мрт-18 19:05 
К отступам и пробелам чувствительна СКВ, поэтому, чтобы не париться с мержами конфликтов, я бы рекомендовал пользоваться автовыравнием, которое заточено под корпоративный стандарт.

Зачем вообще париться над пробелами, если можно просто нажать "выровняйся всё само"?

Меньше творчества в коде => меньше конфликтов => проще жизнь.


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 21:44 
> Хорошо, что не все программисты школьники-дегенераты, и поэтому пользуются пробелами.

Как раз пробелами пользуются только те, кто не понимает, что такое отступ. "Я тут накопипастил со стека и у меня код разъехался. Поэтому я больше не буду пользоваться табуляциями, а некорректное форматирование буду пробелом добивать до того, от чего глаза не вытекают."


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 22:07 
> Хорошо, что [...] пользуются пробелами.

Можете привести пару (а лучше больше) объективных уважительных причин использовать пробелы в отступах вместо табуляций, пожалуйста?


"Новая версия языка программирования Nim 0.18.0"
Отправлено анонимус , 05-Мрт-18 07:54 
> Хорошо, что не все программисты школьники-дегенераты, и поэтому пользуются пробелами.

Дегенераты как раз пользуются пробелами в начале строки


"Новая версия языка программирования Nim 0.18.0"
Отправлено sdkisik , 05-Мрт-18 15:10 
>Дегенераты как раз пользуются пробелами в начале строки

Дегенераты вообще не пользуются форматированием кода, ни табуляциями, ни пробелами. А все остальные могут воспользоваться средствами автоформатирования


"Новая версия языка программирования Nim 0.18.0"
Отправлено nich , 06-Мрт-18 18:53 
Гвидо против табуляции, и правильно.  Все осходники, использующие табуляцию, рано или поздно (на практике очень рано) начинают выглядеть как гaвно.  Первое, что я делаю в не моем проекте, это заменяю все табы на пробелы.  Только после этого с исходниками можно нормально работать.  Разрабы, которые использовали там табы, даже ничего не замечают, потому что тем, кто использует табы, обычно положить, что их исходники выглядят как полное гaвно.

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 00:12 
> p.s. Я до сих пор не могу найти лучшего кандидата на первое место в списке "самые идиотские решения в ЯП", чем задание синтаксической конструкции отступами.

Ты, наверно, до того как начал использовать питон, код не форматировал в принципе, вот сейчас и испытываешь боли, что заставляют это делать на уровне синтаксиса языка?


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 01:05 
Не знаю, как он, но спасибо что решили за всех, как им форматировать

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 20:23 
В Golang, так любимом ненавистниками Python, форматирование тоже принудительное. С фигурными скобками, но отформатировать как тебе хочется не выйдет.

"Новая версия языка программирования Nim 0.18.0"
Отправлено angra , 05-Мрт-18 10:32 
> В Golang, так любимом ненавистниками Python, форматирование тоже принудительное. С фигурными  скобками, но отформатировать как тебе хочется не выйдет.

ЕМНИП оно принудительное только в паре мест, где нельзя перенести открывающую фигурную скобку на следующую строку. Связано это с парсингом, а не стилем. А так можно хоть однострочники писать:
package main;import "fmt";func main() {fmt.Println("Hello, world")}

Другое дело, что в сообществе Go принято пропускать исходник через gofmt. Но к этому никто не принуждает, просто правило хорошего тона.



"Новая версия языка программирования Nim 0.18.0"
Отправлено Онаним , 04-Мрт-18 01:45 
> Но, возможно, он бы стал требовать просто по 4 пробела. Или нет, по 5. Хотя нет, по 3

Оптимално по 2 ящетаю. Серьёзно.

Вообще уверен он имел вииду именно это. Я тоже поначалу плевался на эту идею, но потом мне стало очевидно, что для языка программирования (YAML - язык сериализации данных, а не программирования, так что там другая история) это оптимально ибо отступы всё-равно все всегда ставят и фигурные скобочки как и обязательные точки с запятыми в конце строк в C#-подобных языках - бессмысленный балласт.

На деле Python используется ОЧЕНЬ широко и никто особо не переживает по поводу этих отступов, так что всё в порядке. Некоторые небольшие проблем ощущаются только в момент копипастинга кода и те PyCharm решает за секунду.


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 02:04 
>> Indeed Guido van Rossum of Python has acknowledged that allowing TABs in Python source is a headache for many people and that were he to design Python again, he would forbid them.

https://nim-lang.org/docs/manual.html
> Indentation consists only of spaces; tabulators are not allowed.

Все верно сделанно.

> Но, возможно, он бы стал требовать просто по 4 пробела. Или нет, по 5. Хотя нет, по 3 было бы лучше всего - ведь это так сильно меняет программу, сколько пробелов в каждой строке ставить.

Хоть 1, хоть 10. Главное, не поддаваться порывам творческой натуры и не менять количество пробелов в одном блоке.
Кстати, обычно даже довольно простые текстовые редакторы вполне настраиваются на автозамену нажатия таба на определенное количество пробелов.



"Новая версия языка программирования Nim 0.18.0"
Отправлено Tita_M , 04-Мрт-18 04:53 
>оглядкой на Pascal

Что там от паскаля? Да и оберон уже давно есть.


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 20:25 
Ну и пиши на своём Обероне. Много напишешь?

"Новая версия языка программирования Nim 0.18.0"
Отправлено Tita_M , 04-Мрт-18 21:44 
Имелось ввиду зачем ориентироваться на паскаль если можно было вдохновляться тем же обероном.

"Новая версия языка программирования Nim 0.18.0"
Отправлено leap42 , 04-Мрт-18 05:53 
> позволяет добиться производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора

а если ещё какие-нибудь не учитывать, то даже быстрее получится

а если вообще никакие не учитывать, то все расчёты будут мгновенными


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 13:07 
Ну GC там и вправду мало жрущий. К тому же легко отключается. Хоть полностью, хоть по частям.

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 19:22 
>> позволяет добиться производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора
> а если ещё какие-нибудь не учитывать, то даже быстрее получится

Хочешь - не учитывай, никто не мешает:
https://nim-lang.org/docs/manual.html
> 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.


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 05-Мрт-18 13:45 
>> позволяет добиться производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора
>а если ещё какие-нибудь не учитывать, то даже быстрее получится

Ну так в случае с Java так и получается :)


"Новая версия языка программирования Nim 0.18.0"
Отправлено Anonymoustus , 04-Мрт-18 06:35 
> Исходный код на языке Nim компилируется в представление на C, C++ или JavaScript. В дальнейшем полученный C/C++ код компилируется в исполняемый файл при помощи любого доступного компилятора

Что за блажь такая — всё усложнять дважды делать одну работу? В чём фишка?


"Новая версия языка программирования Nim 0.18.0"
Отправлено juniper рулит , 04-Мрт-18 07:45 
обычное дело в эти дни, вы видимо имеете очень смутное представление об устройстве современных компиляторов

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 11:25 
Почему только современных? И C++ изначально в C транслировался.

"Новая версия языка программирования Nim 0.18.0"
Отправлено Crazy Alex , 05-Мрт-18 14:27 
А потом как смогли - стали делать нормальные компиляторы. И по сей день продолжают.

"Новая версия языка программирования Nim 0.18.0"
Отправлено Anonymoustus , 04-Мрт-18 12:22 
> обычное дело в эти дни, вы видимо имеете очень смутное представление об
> устройстве современных компиляторов

Анонимы опеннета, видимо, патологически неспособны понять написанное, а отсутствующее понимание компенсируют многозначительным гулом голосов из своей головы.

Ещё раз вопрос к залу: зачем писать на каком-то третьем языке, чтобы затем это несколько раз последовательно транслировать в нижележащие уровни? У современных кодеров совсем уже нет мозгов писать сразу на каком-то одном языке, что надо придумывать по несколько надстроек друг над другом?


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 13:04 
> Анонимы опеннета, видимо, патологически неспособны понять написанное, а отсутствующее понимание компенсируют многозначительным гулом голосов из своей головы.
> Ещё раз вопрос к залу: зачем писать на каком-то языке, чтобы затем это несколько раз последовательно транслировать в нижележащие уровни? У современных кодеров совсем уже нет мозгов писать сразу в машинных кодах, что надо придумывать по несколько надстроек друг над другом?

Fixed*


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 13:53 
Просто у Nim дико маленокое комьюнити и написать полноценный фасад к какому-нибудь LLVM они не осилили

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 15:45 
> Просто у Nim дико маленокое комьюнити и написать полноценный фасад к какому-нибудь
> LLVM они не осилили

Один чувак осилил, но Araq (создатель языка) сказал, что он добавит LLVM в главный репозиторий только если LLVM бекенд предоставит какие-то преимущества над C/C++.


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним84701 , 04-Мрт-18 19:09 
> Один чувак осилил, но Araq (создатель языка) сказал, что он добавит LLVM
> в главный репозиторий только если LLVM бекенд предоставит какие-то преимущества над  C/C++.

В чем-то он прав – обратная совместимость в LLVM довольно регулярно ломается, в отличие от.
И поэтому просто портировать мало, нужно  еще и поддерживать.
Так что понятно, что (максимум "полтора", если мне не сильно изменяет память) разработчика/автора дополнительный "чемодан без ручки" скорее всего не особо вдохновляет.


"Новая версия языка программирования Nim 0.18.0"
Отправлено DerRoteBaron , 04-Мрт-18 18:12 
Аналогично, зачем писать на любом сколько-нибудь высокоуровневом языке, если все можно написать в машинных кодах? Или в байткоде llvm если нужна переносимость.
Зачем транслировать язык X в язык Y? Например, затем, что реализация Y есть под платформу P и она популярна, при этом язык X предоставляет удобные абстрации для предметной области A и/или задачи T, которую надо решать.
Если задачу T можно решить на языке Y, это еще не значит, что ее удобно решать на этом языке, а при решении не придется написать существенное количество велосипедов.

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 20:30 
Не стоит метать бисер перед Anonymoustus. Он объявился в новостях недавно, а уже успел себя зарекомендовать.

"Новая версия языка программирования Nim 0.18.0"
Отправлено Василий Теркин , 04-Мрт-18 19:03 
Компиляторы с/cpp есть практически под все известные платформы. Поэтому авторы ограничили свои усилия работой над самим ЯП и транслятором для него. Вполне разумно.

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 20:27 
Ага, и препроцессоры на C не нужны. Ъ-кодеры обходятся без них.

"Новая версия языка программирования Nim 0.18.0"
Отправлено анонимус , 05-Мрт-18 07:59 
>>Исходный код на языке Nim компилируется в представление на C, C++ или JavaScript. В дальнейшем
>Что за блажь такая — всё усложнять дважды делать одну работу? В чём фишка?

Так Си и есть высокоуровневый ассемблер.



"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 15:29 
Есть же Crystal. Прекрасный руби-подобный синтаксис, быстрый....


    Have a syntax similar to Ruby (but compatibility with it is not a goal)
    Statically type-checked but without having to specify the type of variables or method arguments.
    Be able to call C code by writing bindings to it in Crystal.
    Have compile-time evaluation and generation of code, to avoid boilerplate code.
    Compile to efficient native code.


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 16:12 
Наркомания какая-то ваш кристал, лучше уж D

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 19:12 
А может проще сразу писать на C/C++

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 04-Мрт-18 19:16 
> А может проще сразу писать на C/C++

Так они тоже транслируются.
Поэтому для любителей истинной простоты есть hex-редакторы.
В них и машкод и микрокод под задачу написать можно.


"Новая версия языка программирования Nim 0.18.0"
Отправлено XYZ , 05-Мрт-18 15:05 
Так hex-код тоже транслируется в нули и единицы. А вообще проще всего взять батарейку, две иголки и сраду подавать нужное напряжение в нужных участках материнской платы.

"Новая версия языка программирования Nim 0.18.0"
Отправлено adolfus , 05-Мрт-18 13:31 
"язык системного программирования" и "сборщик мусора" -- взаимноисключающие параграфы

"Новая версия языка программирования Nim 0.18.0"
Отправлено Crazy Alex , 05-Мрт-18 14:29 
Давно нет. Разве что вы под "системным" понимаете исключительно ядро и драйверы. Впрочем, язык всё равно пришибленный.

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 05-Мрт-18 14:52 
> "язык системного программирования" и "сборщик мусора" -- взаимноисключающие параграфы

Т.е. ЯП, в которых есть подключаемый сборщик мусора -- не системные?
http://www.hboehm.info/gc/
A garbage collector for C and C++



"Новая версия языка программирования Nim 0.18.0"
Отправлено Анонс , 06-Мрт-18 07:51 
Чукча не видит разницу между покдлючаемым гц и по умолчанию.

"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 06-Мрт-18 14:38 
> Чукча не видит разницу между покдлючаемым гц и по умолчанию.

Чего - "по умолчанию", о великий знаток?
Или ты пользуешься обычными указателями и дергаешь alloc/dealloc ручками или используешь указатель на GC-объект.

https://nim-lang.org/docs/manual.html
> Nim distinguishes between traced and untraced references.
> Traced references point to objects of a garbage collected heap, untraced references
> point to manually allocated objects or to objects somewhere else in memory.
> Traced references are declared with the ref keyword, untraced references are declared with the ptr keyword. In general, a ptr T is implicitly convertible to the pointer type.

Интересно, какие принципы и обеты не позволяют экспертам перед комментированием даже поверхностно ознакомиться с темой?


"Новая версия языка программирования Nim 0.18.0"
Отправлено Аноним , 06-Мрт-18 09:35 
> взаимноисключающие

Как ни загляну в комменты — обязательно узнаю новое слово. Что означает?


"Новая версия языка программирования Nim 0.18.0"
Отправлено Ын , 06-Мрт-18 10:34 
только BASIC из zx spectrum 48 самый понятный и запоминающийся