LINUX.ORG.RU

перегрузка операций против пользовательских инфиксных операций

 


2

3

В С++ можно перегружать операции. Нагрузить + смыслом выше крыши. Это, с одной стороны, хорошо - можно писать компактный код. С другой стороны, увеличивается степень неявности и вероятность получить 1+2=12.

Есть другой вариант - определённые пользователем операции. Выглядит это примерно так (позволю попробовать свой язык - ведь нужно ж наработывать стиль; думаю, все поймут)

фун СложитьСтрокиФункция(С - строка;остальные_аргументы(Хв) - однородный_список(строка));
  прменя Рез - строка = С, измнямя;
  цикл посписку(Сл,Хв)
    Рез = Рез -- Сл;
  кнецикл
кнецфун
  
инфиксная_операция(:имя СложитьСтроки,
                   :рлзаця СложитьСтрокиФункция,
                   :пртет "+");

печать("аффтор" СложитьСтроки " " СложитьСтроки "жжот");

Здесь «+» значит - «сделать приоритет как у операции плюс». Что не так с этим подходом и почему он не прижился?

★★★★★

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

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

см. «Словарь синонимов В.Н.Тришина» — помогает подобрать замены более легкочитаемые.

хотя это и не важно: можно считать, что у тебя это пока ещё абстрактный синтаксис, а конкретный ещё не устаканился.

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

глокая куздра штеко кудрячит бокрёнка.

вот смотри, это всё равно гораздо понятнее чем «глк кздр штк кдрчт бкрнк» за то, что он вступил в партию ПДРС (эпичнейшее)

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

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

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

моё ИМХЗ.

anonymous
()
Ответ на: комментарий от den73
пкет
  псвднимы ц = врженя/цлчислне,п = врженя/плавще;
кн

неконсистентненько как-то: пкет..кн, фун..кнецфун, цикл..кнецикл и т.п.

то ли дело, в Dylan:

define macro foobar ... 
...
end macro foobar
foobar blablabla
...
-- или даже
foobar blabla
 baz quux xyzzy
end foobar

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

трудности перевода

restart прзапск перезапуск, возобновление

сызнова или вдругорядь (мицгольно; граммарнаци говорят: вдругорѣдь)

impure грязн грязная, пбочн_эфф, с_побочными_эффектами

нечисто или нечисть.

otherwise(else) + ??? ???

инако (причём тут else должен быть другой, чем в if)

finally + защита, в_конце, развязка, раскрутка, очистка, при_выходе

опосля

case/switch + случ,выбр случаи, выбор

обряд

default + умолчн умолч, умолчание

обычно, обычай

handler обрботчк обработчик

выручай

... итд. (не, что-то на словотворчество птянуло. вообще, больше глаголов, наречий или отглагольных окончаний).

anonymous
()
Ответ на: трудности перевода от anonymous

ну и классическое

try ? авос авось, попытка

дык

restart прзапск перезапуск, возобновление

опаньки (или в 'ошибку')

let + пуст(пусто),пложм пусть, положим

вот, тут

out(var,inout) /про параметр/ ссылк ссыл, по_ссылке, взврщамй

туда/сюда/оттудова

variable + прем прм(параметр), перем, переменная

место

anonymous
()
Ответ на: ну и классическое от anonymous

Спасибо за варианты, но я сейчас не занимаюсь подбором слов - у меня просто выше крыше других дел, особенно по основной работе. Если хочешь, чтобы у твоих находок получился шанс на включение в язык, сделай пулл реквест для https://bitbucket.org/budden/l2/src/default/doc/клчвые-слва-вранты.md?at=defa...

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

неконсистентненько как-то: пкет..кн, фун..кнецфун, цикл..кнецикл и т.п.

Я экспериментирую. если пкет..кн, то конечно и фун..кн. А вот для цикл в кумире сделано кц и я вижу в этом определённый смысл. Но тема не про то, а про перегрузку операций. По теме есть ещё кому что сказать? Я уже практически созрел до того, чтобы сделать возможность назначения инфиксной операции любым идентификаторам, которые больше ничем не заняты.

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

Если применять их где попало, то язык рискует превратиться во write-only кашу.

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

или чего-то не хватает в CGOL ?

Я не знаю что это. К сожалению, информации столько, что приходится ставить защитные фильтры и игнорировать даже некоторые ныне здравствующие языки.

глк кздр штк кдрчт бкрнк

Для тех, кто забыл перевести часы - я уже на это забил. глокя куздра штека кдрячт бкрёнка.

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

А вообще, скорее всего придётся разработать «а-приори» данный набор сокращений, который не следует ни из каких правил.

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

В общем всем спасибо, предварительное решение есть, ставлю галочку.

den73 ★★★★★
() автор топика

годный тред, давно я так не смеялся!..

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

Pratt's parser

кстати, тоже вот оттуда в тему треда: рекурсивный нисходящий парсер на приоритетах операций, интересный код

блогозапись об

в тему твоего первого сообщения и вопроса «почему так никто не делает». делают же.

anonymous
()
Ответ на: Pratt's parser от anonymous

Спасибо. Неплохо.

GCOL понятно почему не годится: потому что я не вижу ни одной декларации типов. Ну и собственно не вся семантика от лиспа мне нужна, это уже можно видеть по опубликованным док-там.

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

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

Пока не могу решить, как поступить.

den73 ★★★★★
() автор топика
Ответ на: трудности перевода от anonymous

finally + защита, в_конце, развязка, раскрутка, очистка, при_выходе

опосля

«Так или иначе».

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