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 ()
Последнее исправление: sudopacman (всего исправлений: 2)

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

Хорошо единообразие.

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

Ок, не сам по себе питон, а его рекомендация: pep08. Если ее не соблюдают — на работу не берут.

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

Ок, не сам по себе питон, а его рекомендация: pep08.

У любой конторы, которая профессионально делает софт на %langname%, есть стандарт для %langname%.

Если ее не соблюдают — на работу не берут.

Если его не соблюдают - с работы увольняют.

Esper
()

Тоже что ли запилить свой язык погроммирования, с дамами и преферансом. И назову его как нибудь - «Xyi language». Красота будет, друзья тебя спросят: «На какой языке ты пишешь?» А ты им так гордо: «На х*е пишу».

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