LINUX.ORG.RU

Nim lang

 ,


0

4

Народ, кто-нибудь балуется Nim-ом? Надо популяризировать язык, скоро уже 1-я версия выйдет. А то что все про Rust :-)

Я тут just for fun, решил реализовать упражнения из «Functional programming in Scala» на Nim-е: https://github.com/vegansk/nimtests/tree/master/fpinnim. Язык пока справляется, хотя баг репорты бывают и пишутся. Надеюсь, в дальнейшем это перерастет в написание функциональной версии stdlib-а для него. А язык ох как хорош. Тут тебе и отсутствие требования наличия vm, в отличии от Scala, и нормального размера бинарники, в отличии от Haskell, и для JS бэкэнд пишется. И ffi не только с сями, но и с плюсами. В общем компилируемый, мультипарадигменный, опциональный GC, имеет effect system, macroprogramming, etc. А в devel сейчас еще и кроссплатформенное скриптование на нем добавили.



Последнее исправление: vega (всего исправлений: 1)

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

Ну и больше смущают разные платформы типа JVM. Ведь если на эти сильно завяжешься, то уже с платформы никуда не денешься. И получается, что пишешь не столько на языке, сколько на JVM. Вон скала на .net замахивалась, а в итоге поддержка сдохла. Подозреваю, что оно никому не нужно оказалось.

Я уже писал выше, хочется наоборот отвязаться от платформы. Пример: scalajs. Даже библиотека scalaz практически вся функционирует. Да, на разных платформах IO, GUI разный, и от условной компиляции никуда не денешься, но модели данных и алгоритмы можно переиспользовать.

vega
() автор топика
Ответ на: комментарий от DarkEld3r

Ну чуть короче писать, но сложнее читать будет

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

anonymous
()

Гнать надо санными тряпками эти ваши nim'ы

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

выражения намного проще парсятся глазами.

В моём случае, это явно не так. Конечно, можно апеллировать к непривычности и тут сложно спорить так как объективно проверить будет непросто.

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

Отличие от чего?

от раста.

Ну и я не думаю, что скобковость/отступовость так уж сильно важно для языка, относительно остальных фич.

если бы различие было лишь в скобковость/отступовость. Весь код на расте - нечитаемый пиздец из спецсимволов, размешанных алфавитными.

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

Весь код на расте - нечитаемый пиздец из спецсимволов, размешанных алфавитными.

Так лучше?

proc sizeViaFold[T](t: Tree[T]): int = t.fold((_: T) => 1, (x: int, y: int) => 1 + x + y)
proc maximumViaFold[T: SomeNumber](t: Tree[T]): T = t.fold((_: T) => _, (x: T, y: T) => x.max(y))
proc depthViaFold[T](t: Tree[T]): int = t.fold((_: T) => 1, (x: int, y: int) => 1 + x.max(y))
proc mapViaFold[T,U](t: Tree[T], f: T -> U): Tree[U] = t.fold((_: T) => Leaf(f(_)), (x: Tree[U], y: Tree[U]) => Branch(x, y))
tailgunner ★★★★★
()
Ответ на: комментарий от Deleted

Весь код на расте - нечитаемый пиздец из спецсимволов, размешанных алфавитными.

Это бред. Раст по «спецсимволам» где-то на уровне плюсов.

В любом случае:

In Nim one can define his own operators. An operator is any combination of the following characters:

= + - * / < > @ $ ~ & % | ! ? ^ . : \

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

а два пробела имеют меньший приоритет чем один? Было бы вообще офигительно))

3+4 * 5+7  / 2

вместо

((3+4) * (5+7)) / 2

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

чем что?

Чем «пиздец из спецсимволов, размешанных алфавитными», о котором ты говорил.

давай аналог на rust :)

Сначала ты дашь тот код, о котором говорил ты.

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

Раст по «спецсимволам» где-то на уровне плюсов.

Хуже. И дело не в том, что язык позволяет использовать тот, или иной спецсимвол. А в том, что в расте они используются over-9000, а в nim, python, ruby, pascal, etc - гораздо меньше.

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

Это бред. Раст по «спецсимволам» где-то на уровне плюсов.

Но таки вырывается вперед за счет '.

pub struct Keys<'a, K: 'a, V: 'a> {
    inner: Map<Iter<'a, K, V>, fn((&'a K, &'a V)) -> &'a K>
}
anonymous
()
Ответ на: комментарий от tailgunner

Так лучше?

Это реализация операций над ADT через fold. На scala выглядит практически так же, на Haskell получше. А как будет выглядеть реализация дерева в виде ADT на rust?

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

Создание D foundation, организации, которая будет заниматься развитием языка (комментарий)

Это макрос. Ты еще предъяви претензии, что регэксп читается хуже текста. Впрочем, соотношения спецсимволов к алфавитно-цифровым: Nim 142/340 == 0.42, Rust 133/269 == 0.49. Разница в 7% делает текст «пиздецом»? Окай.

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

Ты еще предъяви претензии,

ты еще позвезди мне тут :-P

что регэксп читается хуже текста.

регэксп и в африке регэксп, а макросы везде по разному.

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

оотношения спецсимволов к алфавитно-цифровым: Nim 142/340 == 0.42, Rust 133/269 == 0.49. Разница в 7%

вроде по цифрам всё окай, а на код глянешь - пиздец)

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

Ты еще предъяви претензии,

ты еще позвезди мне тут :-P

И что ты сделаешь?

вроде по цифрам всё окай, а на код глянешь - и пиздец)

Просто ты боишься символов $. Но ты не бойся, они безвредны. Смотри: $$$$$$$$$$$$$

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

Зачем в мире где есть Go и Rust нужен Nim?

Очевидно, нужен любой язык, обладающий хотя бы минимальным потенциалом на веки вечные избавить мир от go. Хотя насчет этого нима я сомневаюсь, какой-то гибрид питона и паскаля.

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

И что ты сделаешь?

а ты что можешь?

Просто ты боишься символов $. Кстати: $$$$$$$$$$$$$

ааааааа, прекрати!!111 хотя нет, продолжай.

Deleted
()

Если уж говорить о популяризации перспективных языков, то как насчет mbeddr? http://mbeddr.com/index.html

Characteristics

  • State-of-the-Art C IDE including Syntax Highlighting, Code Completion, Refactorings, Debugger
  • Incremental improvements to C, such as Modules, Boolean Types, Stricter Type System, Phyiscal Units
  • Modular C extensions to improve Robustness, Testability and Maintainabiliy such as Unit Tests, State Machines or Components
  • Support for Key Aspects of the Software Engineering Process: Requirements & Rracing, Product Lines, Documentation
  • Integrated Formal Verifications, for example, to Verify State Machines, Component Contracts or Decision Tables
  • Integrated Visualizations and Reports
  • ... and yes, it integrates with build servers, works with existing version control systems such as git or svn, and can host plugins to integrate with other tools.


Benefits

  • Improved Code Quality, Testability and Maintainability
  • Direct, Integrated Support for the Development Process and its Artifacts
  • Tight Integration of Different Programming Paradigms in terms of Semantics and IDE
  • Avoids many of today's Tool Integration Problems
  • Blurs the Artificial Boundary between Coding and Modeling.



mbeddr is open source; licensed under the Eclipse Public License.

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

ты еще позвезди мне тут :-P

И что ты сделаешь?

а ты что можешь?

Безнаказанно звездеть, например.

ааааааа, прекрати!!111 хотя нет, продолжай.

Начинай писать макросы на Rust. Тебе точно понравится.

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

Ахахах, накажи меня, я сегодня плохой юзер.

Начинай писать макросы на Rust.

ну, не настолько же.

P.S. Я тебя понимаю так: есть люди, для которых синтаксис не важен вообще. Ты - один из них. Признать что синтаксис у раста коричневый - ты не хочешь, т.к. ты рассчитываешь на его популярность. Окай?)

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

Есть RCP-приложения, а это - MPS-приложение. Обсуждать его как язык - глупо.

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

Ахахах, накажи меня

Я верю, что ты уже взрослый и справишься сам.

Я тебя понимаю так: есть люди, для которых синтаксис не важен вообще. Ты - один из них.

Нет. Синтаксис важен. Мне вот, например, категорически не нравится стандартный стиль Nim с отступом 2 пробела.

Признать что синтаксис у раста коричневый

Коричневое - оно в глазах смотрящего. Т.е. в твоих глазах. Ну или в голове, твоей же.

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

синтаксис у раста коричневый

Во-первых, ты жульничаешь, приводя в пример метапрограммирование, а не регулярный код. Во-вторых, не так то легко натянуть простой и чистый синтаксис на сложные концепции. И наконец, «хороший синтаксис» понятие очень субъективное. Кто-то считает идеалом си-стайл портянки, кто-то однородное месиво со скобочками, а другие жить не могут без монадических трансформеров. И у всех своя правда.

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

Ну ё-маё! Ну откуда вы все лезете, наркоманы? На читабельном языке что хоть эта байда значит? На Си, или на крестах можно аналог?

DELIRIUM ☆☆☆☆☆
()

Мне Nim понравился, как язык для «низкоуровневого» программирования с довольно широкими возможностями. В отличие от Go умеет в нормальные типы, в отличие от Rust не упарывается в тотальный контроль памяти. Ну, читабельность дело индивидуальное.

Одна из главных особенностей - пилится увлеченными людьми, за которыми не стоят корпорации, пилится for fun, а не для ВЕЛИКИХ ЦЕЛЕЙ. Может это все предрассудки, но мне как-то спокойнее.

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

Не знаю. Думаю, что сложнее - в Rust нет GC.

А зачем GC? Для простых типов - ничего, для ссылок - smart pointers или как там принято.

vega
() автор топика

пишу на nim. в vim. под win.

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

Ну ё-маё! Ну откуда вы все лезете, наркоманы? На читабельном языке что хоть эта байда значит? На Си, или на крестах можно аналог?

Ну если посмотреть весь исходник, может и понятнее станет. А вообще - https://en.wikipedia.org/wiki/Algebraic_data_type и дальше смотри Tree. На C/C++ ни ADT, ни pattern matching-а из коробки нет, только эмулировать. А наркоманы в Boost MPL тусят :-)

vega
() автор топика
Ответ на: комментарий от loz

Одна из главных особенностей - пилится увлеченными людьми, за которыми не стоят корпорации, пилится for fun, а не для ВЕЛИКИХ ЦЕЛЕЙ. Может это все предрассудки, но мне как-то спокойнее.

Это да, разработчики в irc весьма адекватны. Вроде как уболтал их улучшить систему вывода типов до выхода 1-й версии, чтобы не нужно было их явно указывать в некоторых случаях, как здесь: https://github.com/vegansk/nimtests/blob/master/fpinnim/Ch03/List.nim#L197

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

А наркоманы в Boost MPL тусят

Использовал его в продакшне, точнее подмножество: boost.MSM.

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

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

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

В твоих исходниках - тоже.

Ага, у меня и в Scala проектах и в плюсовых тоже отступ 2 пробела, это ж не значит что в Scala и в плюсах это стандарт. Просто мне так нравится

;; Tab setup
(setq-default indent-tabs-mode nil)
(setq-default tab-width 2)
vega
() автор топика
Ответ на: комментарий от tailgunner

И автору компилятора Nim так нравится. Совпадение? Не думаю.

Ок, ссылку на стандарт в студию!

Я так понимаю, подобного примера с раскрасивейшим синтаксисом rust-а не будет, лучше про отступы поговорим? :-)

vega
() автор топика
Ответ на: комментарий от tailgunner

Не знаю. Думаю, что сложнее - в Rust нет GC.

Хм, собираю без GC, при этом вылазит куча ворнингов по поводу используемых refов:

nim c -r --gc:none -d:debug --debugger:native ListTest

Дальше запускаю valgrind:

~/w/n/n/t/fp git:master ❯❯❯ valgrind ./ListTest                                                                                                                                                                                              ◼
==31022== Memcheck, a memory error detector
==31022== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==31022== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for copyright info
==31022== Command: ./ListTest
==31022== 
[OK] Initialization and conversion
==31022== 
==31022== HEAP SUMMARY:
==31022==     in use at exit: 0 bytes in 0 blocks
==31022==   total heap usage: 6 allocs, 6 frees, 1,413 bytes allocated
==31022== 
==31022== All heap blocks were freed -- no leaks are possible
==31022== 
==31022== For counts of detected and suppressed errors, rerun with: -v
==31022== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

Что-то тут не так, надо будет поразбираться...

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

Ок, ссылку на стандарт в студию!

Ссылка на значительну кодовую базу Nim, в которой используется другое соглашение - в студию!

подобного примера с раскрасивейшим синтаксисом rust-а не будет,

Я уже сказал - нет.

лучше про отступы поговорим? :-)

Я вижу, тебе это интересно. Можем поговорить.

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

Ты кодишь на nim?

Начал локальные задачи в конторе на нем писать. Сделал админку почтовика на jester. Написал unit tests для плюсовой библиотеки типов. Сейчас пишу библиотеку описания типов для внутренних нужд, движок потом выложу. Это что-то типа protobuf, но с описанием данных через nimовские объекты с последующей генерацией на основе макросов: xsd, scala case classes, typescript interfaces, documentation. Попутно пробую его в качестве функционального. Как-то так.

vega
() автор топика
Ответ на: комментарий от tailgunner

Я так понимаю, подобного примера с раскрасивейшим синтаксисом rust-а не будет, лучше про отступы поговорим? :-)

Я вижу, тебе это интересно. Можем поговорить.

Нет, мне код хотелось посмотреть, так что </thread>

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