LINUX.ORG.RU

Nim 0.15.0

 


1

5

Вышла новая версия языка программирования Nim 0.15.0.

Данный релиз включает в себя около 180 исправлений ошибок и улучшений. Наиболее значимые изменения: улучшение документации, новый макрос multisync и новая реализация HttpClient.

Документация

Все страницы в документации теперь содержат поисковое поле и меню для выбора сортировки процедур. Это позволит искать процедуры, типы, макросы и многое другое на любой странице документации. Сортировка процедур по типу формирует более естественную таблицу содержания, что должно облегчить поиск процедур и других идентификаторов.

Макрос multisync

Был добавлен макрос multisync для определения процедур синхронного и асинхронного ввода-вывода без лишнего дублирования большого количества кода.

Например, процедура recvTwice ниже:

proc recvTwice(socket: Socket | AsyncSocket): Future[string] {.multisync.} =
  result = ""
  result.add(await socket.recv(25))
  result.add(await socket.recv(20))
будет преобразована макросом multisync в следующий код:
proc recvTwice(socket: Socket): string =
  result = ""
  result.add(socket.recv(25))
  result.add(socket.recv(20))

proc recvTwice(socket: AsyncSocket): Future[string] {.async.} =
  result = ""
  result.add(await socket.recv(25))
  result.add(await socket.recv(20))
позволяя использовать recvTwice вместе с синхронными и асинхронными сокетами.

HttpClient

Многие процедуры модуля httpclient объявлены устаревшими в пользу новой реализации с использованием макроса multisync. Теперь есть два типа: HttpClient и AsyncHttpClient. Оба реализуют одинаковые процедуры и функциональность, единственное отличие в поддержке тайм-аута и являются ли они блокирующими или нет.

Список изменений

Изменения, затрагивающие обратную совместимость

  • Модуль json для JSON-объектов теперь использует OrderedTable вместо Table.
  • Изменения в процедуре split из модуля strutils.
  • Поведение в синтаксисе вызова команд в скором времени будет изменен для кругых и фигурных скобок. Код вида a [i] будет интерпретирован как a([i]), вместо a[i]. Таким образом, f (a, b) означает, что кортеж (a, b) был передан в f. Для a [i] компилятор покажет предупреждение:
    Warning: a [b] will be parsed as command syntax; spacing is deprecated
    See Issue #3898 for the relevant discussion.
    
  • Перегрузка специальных операторов ., .(), .=, () теперь должно сопровождаться прагмой {.experimental.}.
  • Шаблоны и макросы immediate теперь считаются устаревшими. Вместо этого надо использовать параметры untyped.
  • Метатип expr теперь считается устаревшим. Вместо этого надо использовать untyped.
  • Метатип stmt теперь считается устаревшим. Вместо этого надо использовать typed.
  • Компилятор стал более разборчив в типах tuple.
  • При компиляции консольных приложений для Windows, кодировка вывода консоли теперь автоматически устанавливается на UTF-8.
  • Необработанные исключения в JavaScript выбрасываются, независимо, определен ли noUnhandledHandler. При этом, стектрейсы должны стать более удобнее для чтения.
  • Процедура system.alert в JavaScript теперь считается устаревшей. Вместо этого надо использовать dom.alert.
  • re.nim более не считается устаревшим, так как очень много кода использует его. Теперь у него упрощенный API.
  • Тип поля headers в типе AsyncHttpClient был изменен со строковой таблицы на специализированный тип HttpHeaders.
  • Процедуре httpclient.request, принимающей httpMethod в качестве строкового значения больше не требуется префикс "http" (или похожие).
  • Преобразованные оператором $ строки значения HttpMethod более не содержат префикс "Http".
  • Объект Request из модуля asynchttpserver теперь использует тип HttpMethod для метода запроса.

Добавления в библиотеку

  • В модуль parsecsv добавлены readHeaderRow и rowEntry в качестве легковесной альтернативы питоновской csv.DictReader.
  • Добавлена процедура setStdIoUnbuffered в модуль system для небуферизированного ввода-вывода.
  • Добавлены center и rsplit в модуль strutils для предоставления, схожей в Python, функциональности строкам Nim.
  • Добавлены isTitle, title, swapCase, isUpper, toUpper, isLower, toLower, isAlpha, isSpace, и capitalize в модуль unicode.nim для совместимых с юникодом манипуляций и тестирований регистрам букв.
  • Добавлен новый модуль strmisc для редких строковых операций. В данный момент добавлены partition, rpartition и expandTabs.
  • walkFiles из модуля os разделен на три отдельные процедуры для четкого разграничения функциональности. walkPattern умеет работать с файлами и директориями, walkFiles только с файлами и walkDirs только с директориями.
  • Добавлен синхронный HttpClient в модуль httpclient. Старые get, post и похожие процедуры теперь считаются устаревшими в пользу него.
  • Добавлен новый макрос multisync, позволяющий писать процедуры для синхронных и асинхронных сокетов без дублирования.
  • Макрос async теперь сам автоматически довершает параметры FutureVar[T].

Добавления в инструментарий

  • В документации появилась возможность поиска и сортировки по типам.
  • Прагмы теперь скрыты в документации по умолчанию.
  • В документации теперь присутствуют ссылки на редактирование.

Добавления в компилятор

  • Через флаг -d/--define теперь можно опционально передавать код, который может быть использован во время компиляции.

Добавления в Nimscript

  • В Nimscript появилась возможность включать и отключать определенные подсказки и предупреждения через процедуры warning и hint.
  • Nimscript экспортирует процедуру patchFile, который может использоваться для наложения патчей на модули или файлы для различных пакетов Nimble, включая пакет stdlib.

Добавления в языке

  • Добавлены макросы {.intdefine.} и {.strdefine.} для (опционального) использования определений во время компиляции.
  • Теперь можно использовать инструкции следующего вида import system except echo или from system import nil.

Исправления ошибок

  • Исправлен «Feature request: unbuffered I/O» #2146
  • Исправлен «clear() not implemented for CountTableRef» #4325
  • Исправлен «Cannot close file opened async» #4334
  • Исправлен «Feature Request: IDNA support» #3045
  • Исправлен «Async: wrong behavior of boolean operations on futures» #4333
  • Исправлен «os.walkFiles yields directories» #4280
  • Исправлен «Fix #4392 and progress on #4170» #4393
  • Исправлен «Await unable to wait futures from objects fields» #4390
  • Исправлен «TMP variable name generation should be more stable» #4364
  • Исправлен «nativesockets doesn't compile for Android 4.x (API v19 or older) because of gethostbyaddr» #4376
  • Исправлен «no generic parameters allowed for ref» #4395
  • Исправлен «split proc in strutils inconsistent for set[char]» #4305
  • Исправлен «Problem with sets in devel» #4412
  • Исправлен «Compiler crash when using seq[PNimrodNode] in macros» #537
  • Исправлен «ospaths should be marked for nimscript use only» #4249
  • Исправлен «Repeated deepCopy() on a recursive data structure eventually crashes» #4340
  • Исправлен «Analyzing destructor» #4371
  • Исправлен «getType does not work anymore on a typedesc» #4462
  • Исправлен «Error in rendering empty JSON array» #4399
  • Исправлен «Segmentation fault when using async pragma on generic procs» #2377
  • Исправлен «Forwarding does not work for generics, | produces an implicit generic» #3055
  • Исправлен «Inside a macro, the length of the seq data inside a queue does not increase and crashes» #4422
  • Исправлен «compiler sigsegv while processing varargs» #4475
  • Исправлен «JS codegen - strings are assigned by reference» #4471
  • Исправлен «when statement doesn't verify syntax» #4301
  • Исправлен ".this pragma doesn't work with .async procs" #4358
  • Исправлен «type foo = range(...) crashes compiler» #4429
  • Исправлен «Compiler crash» #2730
  • Исправлен «Crash in compiler with static[int]» #3706
  • Исправлен «Bad error message „could not resolve“» #3548
  • Исправлен «Roof operator on string in template crashes compiler (Error: unhandled exception: sons is not accessible [FieldError])» #3545
  • Исправлен «SIGSEGV during compilation with parallel block» #2758
  • Исправлен «Codegen error with template and implicit dereference» #4478
  • Исправлен «@ in importcpp should work with no-argument functions» #4496
  • Исправлен «Regression: findExe raises» #4497
  • Исправлен «Linking error - repeated symbols when splitting into modules» #4485
  • Исправлен «Error: method is not a base» #4428
  • Исправлен «Casting from function returning a tuple fails» #4345
  • Исправлен «clang error with default nil parameter» #4328
  • Исправлен «internal compiler error: openArrayLoc» #888
  • Исправлен «Can't forward declare async procs» #1970
  • Исправлен «unittest.check and sequtils.allIt do not work together» #4494
  • Исправлен «httpclient package can't make SSL requests over an HTTP proxy» #4520
  • Исправлен «False positive warning „declared but not used“ for enums.» #4510
  • Исправлен «Explicit conversions not using converters» #4432
  • Исправлен «Unclear error message when importing» #4541
  • Исправлен «Change console encoding to UTF-8 by default» #4417
  • Исправлен «Typedesc ~= Generic notation does not work anymore!» #4534
  • Исправлен «unittest broken?» #4555
  • Исправлен «Operator „or“ in converter types seems to crash the compiler.» #4537
  • Исправлен «nimscript failed to compile/run — Error: cannot 'importc' variable at compile time» #4561
  • Исправлен «Regression: identifier expected, but found ...» #4564
  • Исправлен «varargs with transformation that takes var argument creates invalid c code» #4545
  • Исправлен «Type mismatch when using empty tuple as generic parameter» #4550
  • Исправлен «strscans» #4562
  • Исправлен «getTypeImpl crashes (SIGSEGV) on variant types» #4526
  • Исправлен «Wrong result of sort in VM» #4065
  • Исправлен «I can't call the random[T](x: Slice[T]): T» #4353
  • Исправлен «invalid C code generated (function + block + empty tuple)» #4505
  • Исправлен «performance issue: const Table make a copy at runtime lookup.» #4354
  • Исправлен «Compiler issue: libraries without absolute paths cannot be found correctly» #4568
  • Исправлен «Cannot use math.`^` with non-int types.» #4574
  • Исправлен «C codegen fails when constructing an array using an object constructor.» #4582
  • Исправлен «Visual Studio 10 unresolved external symbol _trunc(should we support VS2010?)» #4532
  • Исправлен «Cannot pass generic subtypes to proc for generic supertype» #4528
  • Исправлен «Lamda-lifting bug leading to crash.» #4551
  • Исправлен «First-class iterators declared as inline are compiled at Nim side (no error message) and fail at C» #2094
  • Исправлен «VS2010-warning C4090 : 'function' : different 'const' qualifiers» #4590
  • Исправлен «Regression: type mismatch with generics» #4589
  • Исправлен «„can raise an unlisted exception“ when assigning nil as default value» #4593
  • Исправлен «upcoming asyncdispatch.closeSocket is not GC-safe» #4606
  • Исправлен «Visual Studio 10.0 compiler errors, 12.0 warning» #4459
  • Исправлен «Exception of net.newContext: result.extraInternalIndex == 0 [AssertionError]» #4406
  • Исправлен «error: redeclaration of 'result_115076' with no linkage» #3221
  • Исправлен «Compiler crashes on conversion from int to float at compile time» #4619
  • Исправлен «wrong number of arguments regression in devel» #4600
  • Исправлен «importc $ has broken error message (and is not documented)» #4579
  • Исправлен «Compiler segfaults on simple importcpp in js mode [regression]» #4632
  • Исправлен «Critical reference counting codegen problem» #4653
  • Исправлен «tables.nim needs lots of {.noSideEffect.}» #4254
  • Исправлен «Capture variable error when using <tt class=„docutils literal“><span class=„pre“>=></span></tt> macro» #4658
  • Исправлен «Enum from char: internal error getInt» #3606
  • Исправлен «Compiler crashes in debug mode (no error in release mode) with Natural discriminant in object variants» #2865
  • Исправлен «SIGSEGV when access field in const object variants» #4253
  • Исправлен «varargs cannot be used with template converter.» #4292
  • Исправлен «Compiler crashes when borrowing $» #3928
  • Исправлен «internal error: genMagicExpr: mArrPut» #4491
  • Исправлен «Unhelpful error message on importc namespace collision» #4580
  • Исправлен «Problem with openarrays and slices» #4179
  • Исправлен «Removing lines from end of file then rebuilding does not rebuild [js only?]» #4656
  • Исправлен «getCurrentException and getCurrentExceptionMsg do not work with JS» #4635
  • Исправлен «generic proc parameter is not inferred if type parameter has specifier» #4672
  • Исправлен «Cannot instantiate generic parameter when it is parent type parameter» #4673
  • Исправлен «deepCopy doesn't work with inheritance after last commit» #4693
  • Исправлен «Multi-methods don't work when passing ref to a different thread» #4689
  • Исправлен «Infinite loop in effect analysis on generics» #4677
  • Исправлен «SIGSEGV when compiling NimYAML tests» #4699
  • Исправлен «Closing AsyncEvent now also unregisters it on non-Windows platforms» #4694
  • Исправлен «Don't update handle in upcoming/asyncdispatch poll() if it was closed» #4697
  • Исправлен «generated local variables declared outside block» #4721
  • Исправлен «Footer Documentation links, & Community link point to the wrong place under news entries» #4529
  • Исправлен «Jester's macro magic leads to incorrect C generation» #4088
  • Исправлен «cas bug in atomics.nim» #3279
  • Исправлен «nimgrep PEG not capturing the pattern 'A'» #4751
  • Исправлен «GC assert triggers when assigning TableRef threadvar» #4640
  • Исправлен ".this pragma conflicts with experimental ptr dereferencing when names conflict" #4671
  • Исправлен «Generic procs accepting var .importcpp type do not work [regression]» #4625
  • Исправлен «C Error on tuple assignment with array» #4626
  • Исправлен «module securehash not gcsafe» #4760
  • Исправлен «Nimble installation failed on Windows x86.» #4764
  • Исправлен «Recent changes to marshal module break old marshalled data» #4779
  • Исправлен «tnewasyncudp.nim test loops forever» #4777
  • Исправлен «Wrong poll timeout behavior in asyncdispatch» #4262
  • Исправлен «Standalone await shouldn't read future» #4170
  • Исправлен «Regression: httpclient fails to compile without -d:ssl» #4797
  • Исправлен «C Error on declaring array of heritable objects with bitfields» #3567
  • Исправлен «Corruption when using Channels and Threads» #4776
  • Исправлен «Sometimes Channel tryRecv() erroneously reports no messages available on the first call on Windows» #4746
  • Исправлен «Improve error message of functions called without parenthesis» #4813
  • Исправлен «Docgen doesn't find doc comments in macro generated procs» #4803
  • Исправлен «asynchttpserver may consume unbounded memory reading headers» #3847
  • Исправлен «TLS connection to api.clashofclans.com hangs forever.» #4587

>>> Подробности

★★★★★

Проверено: Shaman007 ()

всяк конкретный аноним

напиши свой код на nim

buratino ★★★★★ ()
Ответ на: комментарий от DELIRIUM

Не, вот это лучше: Исправлен «Type mismatch when using empty tuple as generic parameter». Или вот: «clear() not implemented for CountTableRef». Тут уже недалеко и до оптимизации nop и пустого цикла. А кто не оптимизировал пустой цикл на ассемблере вручную, тот не отец.

anonymous ()

До чего же интересная разработка. Я вот все стесняюсь на нем что-нибудь наброчат т.к. не уверен что найду нужных библиотек. Однако частенько почматриваю в их PR на gh и от патчей там отбоя нет, что очень круто!

deterok ★★★★★ ()
Ответ на: комментарий от Joe_Bishop

тоже так подумал. до пхп ему еще далеко.

bernd ★★★★★ ()

Товарищи! В каждую деревню по языку программирования! В каждый сельсовет по компилятору!

xtala ()

С версией 1.0 решили серьезно повременить?

buddhist ★★★★★ ()

A procedure that returns a value has an implicit result variable declared that represents the return value.

Дальше не читал.

anonymous ()

Экая обширная простыня, а хоть пару слов про сам язык сказать забыли. Оно императивное? Функциональное? По приведённым кусочкам синтаксиса явно не гомоиконное, скорее уж напоминает внебрачного сына паскаля и д.

zabbal ★★★★ ()
Ответ на: комментарий от deterok


До чего же интересная разработка. Я вот все стесняюсь на нем что-нибудь наброчат т.к. не уверен что найду нужных библиотек.


Не стоит бояться, лучше попробовать сделать на нем что-то простое для себя. Я вот тоже долго к D присматривался. D community не особо большое и развитие идет довольно вяленько. Меня, как и многих, отпугивала туманная перспектива и отсутствие серьезных проектов. А потом я все же решил попробовать для своих меленьких поделок и теперь мокаться в C++ больше совсем не хочется, хотя и приходится по работе.

m0rph ★★★★★ ()

re.nim более не считается устаревшим, так как очень много кода использует его.

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

Esper ()
Ответ на: комментарий от anonymous

Всем известный Платов

Всем своим знакомым?

что это лучший язык программирования!

И плевать, что для полноценного применения он ещё не годится?

anonymous ()
Ответ на: комментарий от m0rph

Тоже считаю, что годных компилируемых язычка два: swift и d. Которые можно посоветовать всем, кто хочет начать кодить на компилируемых в машинный код языках, либо кому нужна производительность, но простота.

menangen ★★★★★ ()

Зачем так много буковок?

Или это для привлечение неофитов в это поделие для студиоузов?

Bioreactor ★★★★★ ()

Очень полезное начинание. Список исправлений показывает, что работа ведётся и активно, тем самым призывая сообщество к помощи в разработке. Каждый может занять свою нишу в доступном широком спектре разработки. Если хочешь заниматься разработкой самого языка - берёшь и вносишь предложения. Не хватает библиотек? Берёшь и становишься известным автором популярной библиотеки. Это ведь замечательно, интересно. Всяк полезнее, чем просто потратить своё время на хейт на ЛОРе, всё равно хейт никогда ничего не менял, а вот конструктивные предложения, разработки и изобретения имеют способность выстреливать. В конце концов один финский Попов взялся копипиздить Solaris, и теперь все мы пишем эти комменты из-под его поделки же, ну.

Martein ()
Ответ на: комментарий от the_electric_hand

В фильме «Революционная ОС» он живьём на камеру говорит, что когда был студентом ему хотелось иметь дома систему такую, в которой они работали в универе - Solaris. И для того чтобы это реализовать, он почитал лекции Таненбауна, взял Minix и на его основе начал творить, но вдохновение на него было ниспослано самим Солнцем, ну вы поняли.

Martein ()
Ответ на: комментарий от Martein

Причем, разработка на гитхабе, легко влиться. Очень годно, на самом деле.

Deleted ()
Ответ на: комментарий от Esper

Я тоже долго парился с выбором языка. Нужно было что-то в меру простое и универсальное. Долго экспериментировал с разными языками в итоге переключился на D. О чем ни сколько не жалею.

Теперь мне откровенно смешно читать про проблемы с утечками памяти и том как сложно переносить код между платформами. Написал один раз — работает везде с минимальными модификациями.

Вот кстати хороший пример того, как решения на С\С++ посасывают по скорости в сравнении с кодом на D http://blog.mir.dlang.io/glas/benchmark/openblas/2016/09/23/glas-gemm-benchma...

anonymous ()

настораживает такое количество ошибок
возникает ощущение что в архитектуре что-то не то

Bad_ptr ★★★★ ()
Ответ на: комментарий от anonymous

Долго экспериментировал с разными языками в итоге переключился на D. О чем ни сколько не жалею.

Я сам пользуюсь D для всякой околоскриптушной дребедени и мне он нравится. Но говорить, что у D достаточно хорошая инфраструктура для любых задач или называть его простым - по мне, как-то не очень честно.

Esper ()
Ответ на: комментарий от Esper

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

Инфраструктура не не такая уж плохая. Разве что IDE умной не достает. А что касательно сложности, то он гораздо проще чем С++. Хотя думаю если ты на нем сам пишешь, то не мне тебе про D рассказывать.

Да есть вещи которые нужно разово осилить типа шаблонов, но зато потом проблем не возникает. Мне теперь на Питоне что-то написать сложнее чем на D.

anonymous ()
Ответ на: комментарий от foror

swift и d

А если нужен рефлекшн и компиляция в рантайме, как это всё сделано в джаве? Могёт эта парочка?

Нет конечно, это же не Common Lisp.

tp_for_my_bunghole ()
Ответ на: комментарий от anonymous

D

А что касательно сложности, то он гораздо проще чем С++.

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

tp_for_my_bunghole ()

Сперва был Nimrod.

Через несколько лет Nim.

Следует ли ждать через пару лет «наследника» по имени N? (с вдвое бОльшим количеством исправлений)

DeVliegendeHollander ★★ ()
Ответ на: комментарий от anonymous

Нафига плодить столько говноязыков,

Их плодят по простой причине. Всем очень нравится синтаксис как у Питона, но у Питона есть много недостатков, например скорость. Вот и плодят что-то похожее на питон, только компилирующееся в машинный код. Всё это прекратится когда сам Питон научатся компилировать в машинный код, так чтобы даже ядро ОС на нём можно было писать.

anonymous ()
Ответ на: комментарий от anonymous

когда сам Питон научатся компилировать в машинный код

Вроде же есть уже компиляторы питона? Или я что-то напутал?

так чтобы даже ядро ОС на нём можно было писать

Ну это уж слишком. Для этого же Rust родили.

DeVliegendeHollander ★★ ()
Ответ на: комментарий от DeVliegendeHollander

Вроде же есть уже компиляторы питона? Или я что-то напутал?

Ну там есть какие-то штуки, но всё не то.
Cython вроде для упрощения написания модулей для питона на C, используется для написания модулей, требовательных к вычислительным ресурсам.
Nuitka якобы компилирует питон, но на самом деле это не совсем то, скомпилированная таким образом программа всё равно работает на питоне и в скорости особо не выигрывает (по сути программа на питоне просто упаковывается в скомпиленный standalone бинарь).

Ну это уж слишком. Для этого же Rust родили.

Ну он стрёмный какой-то на вид, вызывает ассоциации с паскалем.

anonymous ()
Ответ на: комментарий от DeVliegendeHollander

Вроде же есть уже компиляторы питона? Или я что-то напутал?

Cython. Для создания нативных модулей для CPython с аннотацией типов языка C.
Его использует Kivy, кроссплатформенный GUI с использованием OpenGL ES.
Генерирует HTML файл с подсветкой частей кода в котором показывает где можно добавить аннотации типов, и какие области полностью транслируются C. Управление GIL на уровне синтаксиса(«with nogil:»). Есть модуль parallel использующий OpenMP.

tp_for_my_bunghole ()
Последнее исправление: tp_for_my_bunghole (всего исправлений: 1)
Ответ на: комментарий от SL_RU

Kivy ещё живо?

Это не тот тип проекта в котором постоянно что-то должно изменяться и таким образом генерировать волнения в массах.

OpenGL ES 2. Принцип в использовании инфраструктуры отдельных библиотек(sister projects), альтернативы.
Есть два возможных источника недовольства, 1) не нравится API, 2) не нравится реализация. Первое в Python встречается относительно редко.

tp_for_my_bunghole ()
Ответ на: комментарий от anonymous

Цепепе - это урод, который претерпевал различные мутации и в итоге превратился с тяжелое, вырвиглазное, нагроможденное и небезопасное гамно. Правильно Линус делает, что на километр не подпускает С++ быдлокодеров к ядру.

FilosofeM ★★ ()
Ответ на: комментарий от tp_for_my_bunghole

ну лодненько. Надо бы попробовать как-нибудь. Вроде годнота.

SL_RU ★★★ ()
Ответ на: комментарий от anonymous

Вот кстати хороший пример того, как решения на С\С++ посасывают по скорости в сравнении с кодом на D http://blog.mir.dlang.io/glas/benchmark/openblas/2016/09/23/glas-gemm-benchma...

Ну, OpenBLAS - это в первую очередь ассемблер. Не знаю, сколько там ассемблера в Eigen. Но по графикам видно, что этот Mir GLAS подозрительно быстр, да, впечатляет, но

Mir GLAS is significantly faster than OpenBLAS and Apple Accelerate for virtually all benchmarks and parameters

это явно преувеличение. Просто быстрее на мелких матрицах, и незначительно быстрее на матрицах побольше. И у Eigen однозначно проблема с комплексными числами.

gag ★★★★★ ()
Ответ на: комментарий от foror

А если не нужен?

(видел тред на одной странице)

anonymous ()
Ответ на: комментарий от anonymous

Ярило скрипт.

сумма: пусть изначально 0
число: же изначально 1000000
пока [число поболее чем 0] [
  пусть сумма: будетъ к сумма присовокупить число 
  число: же езъмь число отнять 1
]
ответствуй! сумма

Это лучше чем то что было под названием «алгоритмический язык» когда-то давно в начальной школе совка в конце 80-х. Были только учебники, кампутеров не было.

https://github.com/pragmagic/yarilo

Первый увиденный реальный проект на NIM, если не считать сам NIM(bootstrap).

tp_for_my_bunghole ()
Последнее исправление: tp_for_my_bunghole (всего исправлений: 1)
Ответ на: комментарий от anonymous

Всем очень нравится синтаксис как у Питона

лично мне именно это в пейтоне и не нравится. Но... вкусовщина.

h4tr3d ★★★★★ ()
Ответ на: комментарий от h4tr3d

Не вкусовщина. Для питона нельзя написать автоматический форматтер кода, который не ломался бы при первом же копипасте блока в другое место с неправильным отступом. Поэтому скобочки - это маст хэв.

anonymous ()
Ответ на: комментарий от RazrFalcon

Баклан, компелятор написан на самом nim, в качестве бэкэнда есть Си, а это значит, что оно заведется на всем, где поддерживается Си, в отличии от хруста.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.