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)
Ответ на: комментарий от Deleted

Давай не сравнивать двух калек, т.к. неконструктивно думать в терминах «у кого менее худо».

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

В D, кстати, спецсимволов и прочего не меньше. В Nim, с поправкой на возможности, каких-то откровений я тоже не увидел.

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

Но ведь для корректной передачи замыкания нужно передать два указателя, а не один.

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

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

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

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

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

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

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

[жалобы поскипал]

В качестве примера хотелось бы видеть сравнимый язык

Сравнимого (в смысле «равного») языка, думаю быть не может. Везде есть отличия у молодых. Раст тоже очень молодой, и если делать скидку его уродству из за того, что в мамонтах дескать не намного лучше, а новые не такие как раст - то в пень такую дискуссию.

Если честно, то мысль не понял.

Почему в команде rust-разработчиков нет Гвидо, или Вирта, или их инкарнации, или людей похожих на них духом, а в nim, python, pascal-семействе есть?

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

Но ведь для корректной передачи замыкания нужно передать два указателя, а не один.

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

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

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

Можно и с статическими и с динамическими. В тех же модулах, паскалях, оберонах, nim'e, val'e код выглядит не ужаснее питона или тикля, несмотря на типизацию. В расте, независимо от типизации я тебе говорю про лютый пиздец, а ты ищешь оправдания среди других подобных языков.

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

Потому что либо придётся статически различать те замыкания, что захватывают, от тех, что не захватывают,

И чем это плохо?

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

В тех же модулах, паскалях, оберонах, nim'e, val'e код выглядит не ужаснее питона или тикля, несмотря на типизацию

Реальный код на Rust выглядит не хуже кода на Си. «Лютый пиздец» видят специально обученные люди в специально подобранных фрагментах.

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

[жалобы поскипал]

Ну то есть конструктива не будет? Понять простую мысль, что «уродства» вызваны дополнительными возможностями ты тоже не в силах?

Почему в команде rust-разработчиков нет Гвидо, или Вирта, или их инкарнации, или людей похожих на них духом, а в nim, python, pascal-семействе есть?

Для начала этот тезис надо доказать.

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

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

Нет, ты просто бредишь.

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

Реальный код на Rust выглядит не хуже кода на Си.

На самом деле намного лучше. Впрочем практически на всем код выглядит лучше чем на С.

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

Реальный код на Rust

https://github.com/rust-lang/rust/blob/master/src/librustc/lint/mod.rs#L120

тыкнул наугад. аж в глазах порябело))

выглядит не хуже кода на Си

Хуже. Достаточно пройтись по коду самого раста и например опёнка.

Это несмотря на то, что быть даже близким по красоте к Си - сомнительное достижение.

P.S. Творить языки, где синтаксис не придаток к идеям, которые можно им выразить, а важная часть языка - редкость. Но стремиться к лучшему - нужно.

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

тыкнул наугад. аж в глазах порябело))

Я уже бросал взятый наугад фрагмент кода на Nim с подсчетом символов.

Это несмотря на то, что быть даже близким по красоте к Си - сомнительное достижение.

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

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

«уродства» вызваны дополнительными возможностями

И снова оправдания. Не ищи смысла, почему синтаксис такой. Он такой, потому что не оказалось человека, способного придать синтаксису смысл, идею, как в случаях с python, языками Вирта, и другими.

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

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

Не, ты договаривай - какими? Потому что и Паскаль, и Питон по заложенным концепциям просто убоги (учебные языки, как-никак).

P.S. а насчет «языков» Вирта - Вирт всю жизнь писал Паскаль.

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

языками Вирта

Ага, я вижу какие они популярные.

Ну и я предпочту мощный язык, пусть и с кривым синтаксисом, примитивному, но «красивому».

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

Ну и я предпочту мощный язык, пусть и с кривым синтаксисом, примитивному, но «красивому».

Common Lisp ждет тебя.

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

Common Lisp ждет тебя.

При прочих равных, естественно. Да и динамическую типизацию я не люблю.

Хотя отвращения к «скобкоте» нет. Хотя если так выбирать, то предпочту Racket.

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

Я уже бросал взятый наугад фрагмент кода на Nim с подсчетом символов.

https://github.com/nim-lang/Nim/blob/devel/compiler/ast.nim ?

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

синдром утёнка.

сомневаться в его читабельности - неплохой способ сказать «я не такой, как все».

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

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

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

синдром утёнка.

epic_facepalm.jpg

Если что, Fortran, Lisp, Cobol и Algol были раньше.

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

какими?

Уже упомянул пару. Выше по треду. Все они в той или иной степени стремятся к этому, у кого-то лучше получается, у кого-то хуже. Но не стоит забрасывать это, как в случае с rust. Ничего хорошего из этого не вышло.

Паскаль

ObjectPascal например в реализации fpc довольно швейцарен. Конечно, не сравнить с новыми языками «всё в одном», но это всё же пример того, как можно быть мощнее других, более убогих языков, вроде Си, и при этом, синтаксически проще, а компилятор быстрее.

Вирт всю жизнь писал Паскаль.

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

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

Си выстрелил не из за божественной красоты синтаксиса. А когда уже выстрелил, грех не использовать стереотипы, заложенные годами.

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

Си выстрелил не из за божественной красоты синтаксиса

Еще раз - никакого синдрома утенка не было. И божественно красивый Паскаль просто не выстрелил.

Уже упомянул пару

Вот всё у тебя так - «уже $WHATEVER».

Результаты его долгого исследования

Нет никаких результатов.

растекаются по новым языкам

Нечему растекаться (Go взял дурацкий синтаксис объявления метода, но это и всё). Современные языки конструируются под влиянием ФП.

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

Ага, я вижу какие они популярные.

популярность - про другое.

Ну и я предпочту мощный язык, пусть и с кривым синтаксисом, примитивному, но «красивому».

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

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

Еще раз - никакого синдрома утенка не было

Был, есть и будет. И в программировании в том числе.

Нет никаких результатов.
Нечему растекаться

отрицала :-P Его труды повлияли на Ada, Java, Lua, Python, Ocaml, C#. Ну да бох с тобой) Го и всё.

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

Еще раз - никакого синдрома утенка не было

Был

Ну-ну. Время создания языков я привел.

Его труды повлияли на Ada, Java, Lua, Python, Ocaml, C#

Ахаха. Особенно Ocaml порадовал.

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

Ну-ну. Время создания языков я привел.

А о причинах популярности умолчал.

Особенно Ocaml порадовал.

опосредовано, через модулу :)

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

Еще раз - никакого синдрома утенка не было

Был

Время создания языков я привел.

А о причинах популярности умолчал.

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

Его труды повлияли на Ada, Java, Lua, Python, Ocaml, C#

Ахаха. Особенно Ocaml порадовал.

опосредовано, через модулу :)

См. выше.

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

интересный у тебя стиль общения, V пис.

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

Это особенно полезно разработчикам языков, не так ли?

Дык, я не разработчик (языков).

И что значит «не так радикально» в этом контексте?

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

«Лютый пиздец» видят специально обученные люди в специально подобранных фрагментах.

Да брось, в комьюнити и правда эпидемия закорючек головного мозга. Ты только прочитай обсуждение: https://internals.rust-lang.org/t/vs-for-inclusive-ranges/1539/66

Вместо того, чтобы взять общепринятую математическую нотацию и прогнуть под неё парсер, они всерьез обсуждают вот такое:

a...b for [a, b]
a..<b for [a, b)
a>..b for (a, b]
a>.<b for (a, b)


Потом приходит nikomatsakis, и заколачивает гвоздь в крышку унитаза: a..b for [a, b); a...b for [a,b]

Если это не пиздец, то что тогда пиздец? Кресты с их нечитабельными шаблонными вычислениями нервно курят в стороне.

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

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

Ты лжешь, зачем? Кто-то был «за», кто-то «против».

Кресты с их нечитабельными шаблонными вычислениями нервно курят в стороне.

Толстовато. Попробуй еще раз.

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

Кресты с их нечитабельными шаблонными вычислениями нервно курят в стороне.

Попробуй еще раз.

Хотел. Хотел скопипастить сюда типичный макрос из libcore, но так и не смог заставить ЛОР-овский парсер сожрать *это* без искажений. Так что Ъ в пролёте, а ты можешь полюбоваться на https://github.com/rust-lang/rust/blob/a520568ae7dea13430c3d9ba5b3fb9596d8637... , строки 118..152 , и на его дальнейшее использование.

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

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

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

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

Ты лжешь, зачем? Кто-то был «за», кто-то «против».

Если бы возражавших не было, это была бы не эпидемия, а пандемия.

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

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

Очередная маленькая победа нагромождения закорючек над читабельностью.

И логикой. ИМХО нужное поведение для .. и ... перепутано местами.

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

волевым решением авторов языка был принят вариант с двумя и тремя точками

А ты как бы сделал? Ну-ка покажи.

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

вонючий бойлерплейт

Жизнь такая.

на вонючих макросах

Я думал, они гигиенические, а оно вон как :(

запись этого же самого бойлерплейта дряхлым Си-шным препроцессором была бы в разы читабельнее

Опять слишком толсто.

Запись чего-то подобного на крестовых шаблонах была бы сравнима по угловым скобкам

Что-то я не понял - запись чего именно? Назови имя макроса.

Если бы возражавших не было, это была бы не эпидемия, а пандемия.

О вау. А назови мне эпидемический порог для Rust community.

Очередная маленькая победа нагромождения закорючек над читабельностью.

Не-а. Там же написано - взят вариант из Swift. Победа совместимости.

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

Несбалансированные скобки? Нет уж, оставь это

Несбалансированные скобки вокруг двоеточия. Кроме того, если не различать круглые и квадратные, то сбалансированность сохраняется.

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

Жизнь такая.

Design decisions такие.

Что-то я не понял - запись чего именно? Назови имя макроса.

Я тебе номера строк назвал, на этих строках макрос только один. Что тебе не ясно?

Не-а. Там же написано - взят вариант из Swift. Победа совместимости.

Там написано, что синтаксис взят из Ruby, но семантика при этом взята прямо противоположная. Победа пиздеца.

Про Swift написано: «Swift adopted ..< as the notation for an exclusive range.» Обрати внимание на угловую загогулину.

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

Дык, я не разработчик (языков).

дык и я тож.

И что значит «не так радикально» в этом контексте?

мощный-кривой vs примитивный-прямой. Такая дилемма бесполезна и неконструктивна для дальнейшего развития языков по всем фронтам. Синтаксис - не придаток, не «неважная», а самая что ни на есть естественная и равноправная часть языка. Жертвовать синтаксисом в угоду фичастости, это как качать только правую руку, а левую подтягивать постольку-поскольку. К тебе, непосредственно, как и ко мне, это отношения не имеет, мы не разработчики языков а их пользователи.

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

Запись чего-то подобного на крестовых шаблонах была бы сравнима по угловым скобкам

Что-то я не понял - запись чего именно? Назови имя макроса.

Я тебе номера строк назвал, на этих строках макрос только один. Что тебе не ясно?

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

Там написано, что синтаксис взят из Ruby, но семантика при этом взята прямо противоположная.

Да, насчет Swift я ошибся.

Победа пиздеца.

Почему-то я не сомневаюсь, что ты в любом случае сказал бы это.

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

Мне не ясно, как это можно реализовать шаблоном Си++

*В точности* это реализовать, afaik, нельзя. Можно реализовать «нечто подобное».

А именно, можно написать шаблонный класс, внутри которого будет 4 перегрузки двухаргументного статического метода. Дальше возникает проблема: не получится экспортировать эти перегрузки из скопа класса наружу, чтобы при упоминании имени метода в произвольном месте кода эти перегрузки начали бы участвовать в резолюшене. Однако вместо экспорта, можно от класса тупо унаследоваться там, где нужно участие перегрузок.

Полегчало?

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

Мне не ясно, как это можно реализовать шаблоном Си++

*В точности* это реализовать, afaik, нельзя. Можно реализовать «нечто подобное».

...на смеси шаблонов и макросов.

Полегчало?

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

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