Ним: как я могу приблизить его к синтаксису Python?

Я знаю, что это НЕ очень хорошая идея, но я хочу сделать Nim более «питоновским». Примеры:

1) вместо proc использовать def

2) вместо echo используйте print

3) вместо readLine используйте input

4) вместо parseJson используйте json.loads

и так далее.

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

Честно, пожалуйста, не объясняй мне, почему ты считаешь это плохой идеей. Я хочу поиграть и попробовать. Ни одно животное не пострадает, бла-бла.

Любые идеи?

Благодарю вас!


person Spaceman    schedule 18.06.2015    source источник
comment
Что заставляет вас думать, что вы можете изменить языковые ключевые слова ?   -  person Cory Kramer    schedule 18.06.2015
comment
@CoryKramer знает Нима всего 2 часа, я понятия не имею, могу ли я это сделать или нет. Вот почему я создал этот вопрос.   -  person Spaceman    schedule 18.06.2015
comment
@tobias_k да, на самом деле это то, что я сначала подумал, но, может быть, есть другой более удобный способ...   -  person Spaceman    schedule 18.06.2015
comment
Я не знаю nim, но, кроме def, все остальные являются простыми функциями, поэтому вам нужно определить функции с именами Python и просто управлять ими, пересылая свои аргументы встроенным функциям Nim, при необходимости корректируя семантику.   -  person Matteo Italia    schedule 18.06.2015
comment
Не плохой вопрос. Может быть, это не очень хорошая идея для большинства людей, но в любом случае кажется правильным вопросом.   -  person Lye Fish    schedule 18.06.2015


Ответы (1)


Для echo, readLine и parseJson вы можете найти их определения в system.nim и json.nim и определить свои собственные процедуры. Это должно работать:

import json

proc print*(x: varargs[expr, `$`]) {.magic: "Echo", tags: [WriteIOEffect], sideEffect.}

proc input*(f: File): TaintedString  {.tags: [ReadIOEffect], benign.}

proc loads(p: var JsonParser): JsonNode = parseJson(p)

Что касается def, я не думаю, что это возможно с тем же синтаксисом, что и для proc. При желании можно придумать какой-нибудь def макрос, который сам генерирует AST какого-нибудь проца. Но, насколько я понимаю, получившийся синтаксис для определения proc будет довольно уродливым.

person bluenote10    schedule 18.06.2015