Состоялся (https://nim-lang.org/blog/2017/09/07/version-0172-released.h... релиз языка системного программирования Nim 0.17.2 (https://nim-lang.org), нацеленного обеспечение высокой производительности, переносимости и выразительности кода. Язык использует (https://ru.wikipedia.org/wiki/Nim) статическую типизацию и создан с оглядкой на Pascal, C++, Python и Lisp. Код проекта поставляется (https://github.com/nim-lang/Nim) под лицензией MIT. Кроме того, доступен релиз пакетного менеджера nimble 0.8.8 (https://github.com/nim-lang/nimble/blob/master), применяемого для распространения модулей на языке Nim, а также запущен новый раздел документации (http://devdocs.io/nim/).Исходный код на языке Nim компилируется в представление на C, C++ или JavaScript. В дальнейшем полученный C/C++ код компилируется в исполняемый файл при помощи любого доступного компилятора (clang, gcc, icc, Visual C++), что позволяет добиться производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора.
По аналогии с Python в Nim в качестве разделителей блоков применяются отступы. Регистр написания символов в идентификаторах не учитывается. Поддерживаются средства метапрограммирования (https://ru.wikipedia.org/wiki/%D0%9C%D0%... и возможности для создания предметно-ориентированных языков (DSL).
В новой версии устранена важная ошибка в сборщике мусора, приводящая к крахам процессов. Из новых возможностей отмечается поддержка файлов ".nimble-link", реализованных для обеспечения работы новой команды пакетного менеджера "nimble develop", позволяющей связать существующую копию пакета с заданной установочной директорией без необходимости переустановки пакета после каждого изменения.
URL: https://nim-lang.org/blog/2017/09/07/version-0172-released.html
Новость: http://www.opennet.ru/opennews/art.shtml?num=47160
Наверно Платов из Xored проспонсировал
Интересно, он в дурку еще не попал? Его раздутое самомнение и так было на грани разумного. А недавно его прилюдно носом макнули в его же продукты жизнедеятельности.
> Интересно, он в дурку еще не попал? Его раздутое самомнениеТак не раздувайте ещё сильнее. Забудьте про него.
> Наверно Платов из Xored проспонсировалАга. "Полное обеспечение ... жителя Германии". $250 ему там как раз на медстраховку и 20 булок хлеба хватит.
https://ebanoe.it/2017/08/30/xored-platov-vs-adamovsky/
Мало того, что язык нелеп (создан с оглядкой на Pascal, C++, Python и Lisp), так ещё и "код на языке Nim компилируется в представление на C, C++ или JavaScript", но при этом "нацеленного обеспечение высокой производительности, переносимости и выразительности кода" и что же мы получаем: "производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора".
Паровоз Стефенсона почти вечный двигатель, если не учитывать закон сохранения энергии.
П-ф-ф-ф-ф.
> но при этом "нацеленного обеспечение высокой производительности, переносимости и выразительности кода" и что же мы получаем:
> "производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора".Что мы получаем? Похоже, в первую очередь мы получаем очередное "по ссылкам не ходи, ничего по теме не знай и не читай – просто сразу, бодро отвечай!".
Вообще-то в сабже других проблем хватает (в т.ч. из-за излишнего "замеса"/"заимствований"), но вот как раз делать все ручками никто не запрещает: "-d:useMalloc" для использования сишного дефолтного аллокатора и "--gc:none" для полного отключения сборщика. Соответсвующие типы там есть:
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....
> Traced references are declared with the ref keyword, untraced references are declared with the ptr..
> 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.Другое дело, что стандартная либа много где хочет GC и поэтому совсем без оного далеко не уедешь.
Язык вырос как ответвление от FreePascal. Со временем стал довольно сложным. Читать получившийся на выходе код С-программы тоже непросто. В этом отношении vala гораздо приятнее. А в остальном нормально. Сборку мусора можно не использовать или приостановить на время. Генерация javascript и c++ тоже можно считать дополнительным преимуществом. Были пробы с генерацией на выходе кода FreePascal. В отличии от go-lang и d-lang исходники компилятора давно на нём самом.Нелепый язык - это дело непривычки. Скорость выполнения - лучше чем у java. Скорость компиляции -- гораздо быстрее c++ при использовании для компиляции tcc. Переносимость вообще максимальная.
PS: пробовал как-то d-lang v1 под управлением linux 2.4 -- проблемы с потоками не позволили. Далась эта встроенная многопоточность в современных языках. Даже clib без её поддержки гораздо проще и быстрее.
> В отличии от go-lang и d-lang исходники компилятора давно на нём самом.с версии 1.5 go написан на go (актуальная версия - 1.9)
исходники компилятора
компилятора
---------с версии 1.5 go написан на go
Чукча не палится
если вы не успеваете, повторю ещё раз: компилятор языка go написан на языке go, так понятнее?
>Сборку мусора можно не использовать или приостановить на время. В отличии от go-lang и d-lang исходники компилятора давно на нём самом.D уже давно написан на D кстати. В плане генерации кода D в разы мощнее. На нем можно в Дишном синтаксисе писать Сишные либы вообще без сборщика мусора если надо. А если нужен GC, то там тоже куча техник есть как его использование минимизировать.
Еще важный момент. На Nim невозможно написать код который будет работать быстрее кода на чистом Си, а на Ди можно в режиме betterC за счет оптимизации разных хвостовых рекурсий и тп. Вряд ли там прирост будет выше пары процентов, но все же.
>На Nim невозможно написать код который будет работать быстрее кода на чистом СиПопадались мне адепты одного языка, которым даже удавалось писать на нем программы, которые работали быстрее, чем программы работающие на ассемблере. Но до сих пор "меня терзают смутные сомнения" ... :)
> а на Ди можно в режиме betterC за счет оптимизации разных хвостовых рекурсий и тп.
> betterC
> хвостовых рекурсий*повеяло неуловимым ароматом вакуума под переливчатые трели сферических коней*
> D уже давно написан на D кстати.Это неправда! Пруф: https://github.com/dlang/dmd/tree/master/src/ddmd/backend
Кроме того, для компиляции используются closed-source компилятор dmc и, опять же, closed-source C-библиотеки, которые неизвестно как оптимизированы.
Из-за этого, может ли D называться opensource-проектом? :)
>> D уже давно написан на D кстати.
> Это неправда! Пруф: https://github.com/dlang/dmd/tree/master/src/ddmd/backend
> Кроме того, для компиляции используются closed-source компилятор dmc и, опять же, closed-source
> C-библиотеки, которые неизвестно как оптимизированы.
> Из-за этого, может ли D называться opensource-проектом? :)gdc, ldc - изучайте матчасть
>gdc, ldc - изучайте матчастьОни тоже написаны не на D, так что сами изучайте. :)
Разве не все ранее проприетарные компоненты D стали под Boost License?
> В отличии от go-lang и d-lang исходники компилятора давно на нём самом.Так пишете, словно это не недостаток.
Минусующие потрудятся объяснить? Или непереносимость уже стала премуществом?
Пост, где написано что-то обидное, перепечатана новость и вкорочена шутка ни к селу, ни к городу.
О, да это же A.Stahl в треде! :)
Я уверен, что имелась ввиду производительность труда при работе с языком.
Это точно не про Nim, синтаксис которого базируется на отступах.
А я вот попробовал этот язык 6 месяцев назад и не жалею. Получил такуй производительность какую хотел (сгенерированный ассемблер такой как надо) в правильных руках работает. Код отлично читается.
В правильных руках язык ассемблера такое вам покажет, что вы, скорее всего, и не видели.
> в Nim в качестве разделителей блоков применяются отступына этом знакомство с языком можно закончить
Чем отступы то неугодили? Nim прекрасен тем что похож и такой-же простой как питон, а скорость стремится к Си. Отступы - отличное решение, особенно если таб ставить не 2 символа, а 8. Скобочки - оверхед и пережиток, т.к любой _читабельный_ код пишется иерархически, а не в одну строку, для непонятно чем мотивированной экономит места.
> Скобочки - оверхед и пережитокСкобочки явно обозначают начало и конец блока. Explicit is better than implicit.
Там можно и скобочки, если захочешь.
> Чем отступы то неугодили?Это же стандартный шаблон опеннета - оно мешает копипастерам копипастить^W^W делиться мудростью и заимствовать творческие идеи!
Ведь все знают, что поддержка движками бложиков или форумов тегов для кода редка и сыровата (17 лет всего), а без нее просто съедаются лишние пробелы! А вот то, что вообще почти любой движок нафарширует безтеговый код всякими смайликами и прочим, заменяя разные комбинации двоеточий, скобок и цифр - враки и фантазии чистой воды!
Ну и опять же, все знають, что далеко не каждый, даже дюже навороченный, редактор поддерживает нормальный режим пробелов - а вдруг придется писать код в блокноте? Как тогда? Вот то-то же!
вы все врети тоже такой себе шаблон
> вы все врети тоже такой себе шаблонПо теме что-то будет? Или своей головы и знаний нема, без шаблона никак?
Пардон за безграмотность, но не подскажет ли кто, что такое "выразительность кода" и как её определить?
(Википедию смотрел, но определения не нашёл).
Это когда ты самовыражаешься в создании троллейбуса из буханки хлеба, вместо использования языка, предназначенного для конкретной задачи. Вот такая ниша у Nim - быть выразительным.
Нигде нету определений опубликованных.
Я тоже пока не публиковал.Выразительность языка прог-ия это спепень достигнутого компромисса между плотностью выраженной семантики кода на единицу строковой площади кода,
и, читабельностью.где,
Кол-во семантики выраженной куском кода ЯП это, кратко и огрубляя, количество узлов AST представления.Также есть понятие приведенной семантики, позволяет сравнивать ЯП разного уровня.
Плотность - отношение
Строковая площадь - количество строк и колонок кода при записи его в наиболее читабельном виде. В отличие от чистого LOC позволяет проводить честное сравнение
---
В общем это сфера работы проектировщика ЯП особенно ЯП ВУПри чрезмерном увеличении сем.плотности с какого-то момента падает читабельность
При увеличении подробности кода, спецификативности -- читабельность снова падает но уже резко
падает семантическая плотность из-за колич-ва введенных "мусорных" keyword-ов и синтаксического overhead'аНахождение удачного компромисса и приводит к более выразительному коду, и ЯП.
Спасибо.
Выразительность кода - это субъективное понятие
>Регистр написания символов в идентификаторах не учитывается.Для языка, который позиционируется как ЯП системного программирования, это совершенно не допустимо. Это перечёркивает все его преимущества.
Вероятно, подойдёт любителям Паскаля, они же привыкли к case insensetive.
Хм... большинство ассемблеров не чувствительны к регистру.
> Хм... большинство ассемблеров не чувствительны к регистру.Гхы. Это же стандартный шаблон опеннетных недотроллей: отступы, регистрочувствительность.
https://www.opennet.ru/opennews/art.shtml?num=46611
>>> И это ставит на нём жирный крест.
>> На регистронечувствительном языке, который ещё после это претендует называться языком системного программирования.
> Многие диалекты асма тоже не чувствительны к регистру.
> Я конечно понимаю, эксперту опеннета по системному программированию необязательно знать такие тонкости, но что уважаемый эксперт сказать то хотел?Возможно, местный эксперт еще отпишется, что асм - это не системный ЯП или не ЯП вообще )
А вот действительно, имхо, неудачное решение как нечувствительность к "_" – никто не упоминает.
Никто ядра, ну кроме некоторых особо yпоротых Menuet'чиков, и даже микроядра не пишет на ассемблерах. Почему же тогда Керниган и Ричи решили, что Сишечка должна быть регистрочувствительной?
> Никто ядра, ну кроме некоторых особо yпоротых Menuet'чиков, и даже микроядра не пишет на ассемблерах.И что? Ассемблеры перестали быть системными?
Кстати, причем тут новомодные минет-осы и не менее новомодные диалекты асмов? Гугли историю создания сишечки, PDP-11, MACRO-11, удивляйся, просвещайся.
Подсказка: регистр в том же MACRO был только один.> Почему же тогда Керниган и Ричи решили, что Сишечка должна быть регистрочувствительной?
А в огороде бузина, да?
Видимо не все встречали код, написанный в идиотом в совершенно не логичных регистрах. Хотя, может вы находите удовольствие, используя регистры наугад :-)
Да как-то об этом уже давно не думается. Сейчас практически любой проект (команда) начинается с соглашения о стиле кодирования. Кстати, у Nim он тоже есть. Другое дело, когда тянешь себе чужие наработки, то частенько в тексте они выглядят инородным телом именно из-за разных представлений о "красоте". В этом смысле в Nim очень удобны и нечувствительность к регистру и игнорирование подчёркиваний.У меня вообще сложилось такое ощущение, что автор хочет сделать Nim комфортным для программистов с любыми привычками. Это и плюс, и минус т.к. может оказаться, что читать чужой будет совсем непросто. Хотя, вот в Go сделали автоматический форматинг и нет проблем: "безобразно, но единообразно" понятно всем. Может и в Nim такое завезут с возможностью форматить в любой стиль.
Что-то Вы господа всесмотрите на какие-то отступы, а я лично вот переживаю завот это уточнение:> новой версии устранена важная ошибка в сборщике мусора, приводящая к крахам процессов
То есть собрался значит такой великий программист утереть нос всем этим Питонистам, Сиплюсистам, ДжаваХипстерам и ... обос#лся в первый же цикл сборки мусора ...
На версию языка посмотрите. А потом ещё пройдитесь по ошибкам LLVM.
Перефразирую Глеба Жеглова: Качество языка определяют не ошибки в реализации компилятора, а в возможности (в том числе своевременно) их исправлять.
> То есть собрался значит такой великий программист утереть нос всем этим Питонистам,
> Сиплюсистам, ДжаваХипстерам и ... обос#лся в первый же цикл сборки мусора
> ...Великий онанимный разоблачитель код-то смотрел, приводивший к краху?
type
Foo = ref object
s: seq[Bar]
Bar = ref object
f: Fooproc test() =
var f = Foo.new()
for i in 0 .. 5:
f.s = @[]
for j in 0 .. 5:
var b = Bar.new()
b.f = f
f.s.add(b)test()
Циклические ссылки особой извращенности. И судя по фиксу, виновата излишняя оптимизация:
https://github.com/nim-lang/Nim/commit/88b65ea957b286bf7225c...
Интересно, анонимный знаток поймет, в чем ошибка ...
Фу, пакость какая.
Ну так и говорите язык для написания "Hello, world...",
а в случае извращенных ссылок идите в проверенный годами
язык.В целом может скорректировать таргетинг языка. Сказать,
что он например для обучения. Хотя чем плох для обучения
JavaScript или Python или Java?В целом я вот не пойму зачем сегодня вообще языки писать.
Может подскажет уважаемый аноним всезнайка, что в нем такого
решающего и отличающего от других? В чем килл фича? Низкие проценты
по кредиту^W стоимости выполнения функций или что?
> Ну так и говорите язык для написания "Hello, world...",Не, не буду так говорить.
> Хотя чем плох для обучения
> JavaScript или Python или Java?
> JavaScript или PythonУ меня аж хипстодетектор сгорел (
> В целом я вот не пойму зачем сегодня вообще языки писать.
Автор пишет в первую очередь джаст фор фан. Видимо, забыл спросить анона с опеннета, что и зачем ему лучше делать.
> Может подскажет уважаемый аноним всезнайка,
Ну что вы, право слово - до вас мне еще очень далеко. Знание, что, как и зачем нужно правильно скорректировать, писать, делать или не делать всем остальным - все еще не доступно мне, увы! (
А что на нем пишут? Или что-то уже написали?
Хелловорлды, тысячи их.
Это тот язык, в котором, не смотря на все возможности метапрограммирования, в стандартной библиотеке до сих пор нет типобезопасного printf? Постойте, и не типобезапасного тоже нет? Или это я просто плохо искал? Тогда ткните меня носом, плз.
Не нужен с его отступами. После питона и так тошно.
Зачем нужны скобки, если всё равно надо делать отступ
Кто-нибудь может пояснить, зачем нужно все это барахло, если есть няшный Golang с отменной кросскомпиляцией и шикарной многопоточностью, которая создается одним взмахом руки???????
По кросс-компиляции Nim однозначно победит - он будет работать на любой платформе, для которой есть Си компилятор, а, как ты понимаешь, он есть почти для всех существующих платформ :)
> По кросс-компиляции Nim однозначно победит - он будет работать на любой платформе,
> для которой есть Си компилятор, а, как ты понимаешь, он есть
> почти для всех существующих платформ :)Ну и как , сидя под Linux , скомпилировать бинарник для виндовса или MacOS?
>> По кросс-компиляции Nim однозначно победит - он будет работать на любой платформе,
>> для которой есть Си компилятор, а, как ты понимаешь, он есть
>> почти для всех существующих платформ :)
> Ну и как, сидя под Linux , скомпилировать бинарник для виндовса или MacOS?Как и обычную сишную прогу - молча.
https://nim-lang.org/docs/nimc.html#cross-compilation
cat anon.nim && nim c --cpu:i386 --clang.exe:mingw32-gcc --clang.linkerexe:mingw32-gcc --os:windows anon.nim && wine ./anon.exe
echo "Hello Opennet"
Hint: used config file
...
Hello Opennet