По сабжу - чем лучше ЯП знаешь, тем больше видишь в нем недостатков. В этом смысле конечно питон и С++ для меня верх красоты и уродства одновременно;-)
Создателей питона за одно разделение на изменяемые/неизменяемые объекты уже прокляло 100500 кодеров.
Интересно, зачем в питоне переопределять операторы?
Затем же, зачем и в других ЯП?
В нормальных языках это делать ненужно, спецопы управляют потоком вычислений и задают семантику. Если ты не собираешься переопределять семантику ЯП средствами самого ЯП, то переопределение операторов - голимый моветон и садомазо-манкипатчинг.
Создателей питона за одно разделение на изменяемые/неизменяемые объекты уже прокляло 100500 кодеров.
«Какой из меня, к черту, писатель, если я ненавижу писать. Если для меня это мука, болезненное, постыдное занятие, что-то вроде выдавливания геморроя» :P
Если ты не собираешься переопределять семантику ЯП средствами самого ЯП,
Я нихрена ни понял все этих умных слов, но в наших задачах перегрузка операций юзается очень активно. С-но я даже не знаю как без нее - код разбух бы в разы.
Тяжело вам, наверное.
Нам нормально. А вот вам, с Вашим геморроем вредно сидеть за компьютером наверное?;-)
Не думаю, что бы у Вас был доступ к моей мед.карте. Остается сделать вывод, что Вас очень волнует тема геморроя (никогда не знал, что его можно выдавливать). Искренне Вам соболезную, видимо это заболевание очень Вас беспокоит.
Насчет нашей команды - подобные заявления сделанные при острой нехватке информации (а откуда бы Вам ее взять?) позволяют сделать довольно однозначный и нелицеприятный вывод о Вашем интеллектуальном уровне.
У него в избранных тегах много вкусного, мог бы и не нести чуши - видать когда то перегруженным оператором че то прищемило...
У меня для контейнеров прегружен оператор присваивания, типа написал А=0 и забил весь массив. Как то в цикле забыл индексацию поставить,
for(long i=0; i<A.N; i++) A = f(i);
как назло массив был здоровый. Кластер встал колом, я давай изучать явление - типа с памятью проблемы все дела... квадратичная зависимоть от размера данных... O_O
Уже ответил - операторы сами по себе уродство, на их месте должны были быть функции из стандартного «пакета», стандартной библиотеки или дефолтного пространства имен.
У меня тут на больную голову пришла дурная мысль. Есть ЯП (скажем питон), который меня ну-почти-во-всем-устраивает. Не устраивают в частности некоторые ограничения синтаксиса, ну например то что я не могу новых операторов вводить;-)
Поскольку я ленив, то я хочу его расширить с минимальными усилиями. Я беру и пишу препроцессор, который обрабатывает код в приятном для меня синтаксисе и делает из него код питон. Причем, поскольку я очень ленив, то синтаксис расширяется только ортогональным питону образом, и дальше тупо работает str.replace()
Я такое сделал для скобочек (у нас иногда их много) - зело удобно вышло. Пишешь скажем {%a+b%} и имеешь на выходе красивую формулу в Тех-е с фигурными скобками. М.б. ввести скажем оператор генерации последовательности
Да я так понимаю что руби это те же яйцы, тока в профиль. Стар
я уже ЯП менять;-)
Не совсем DSL. наск я понимаю, придумать хороший ЯП под узкую задачу это отдельная тема. Я просто хочу чуть-чуть расширить ЯП общего назначения, что бы на нем було удобней решать какие то свои задачи (потому что я не хочу ЗАменять функционал ЯП - мне прсото не хватает существующего;-)).
Фсе просто, (mul i j) это 9 символов, i*j это 3 символа. Теперь у тебы выражение, которое занимает экран. В вашей префиксной записи оно будет занимать ТРИ. Это ппц, я вам скажу...
Не говоря про проблемы с кодогенерацией (выводом из CAS) и генерацией отчетов ТеХ.
PS Сумма в ТеХ это тащем то аналог цикла. Цикл тоже префиксную записать имеет, это нормально и общепринято. Но если я предложу коллегам перейти на префиксную запись для +-*/, они меня пошлют, и будут правы, потому что никаких реальных профитов это не дает, а проблем куча.
А что вы думаете: о доминанте и субдоминанте, в контексте нот и пауз?
Пусть композиция содержит лишь ноты A,B,C,D,E,F,G. Где тут доминанта и субдоминанта? Ответ неоднозначен. Отсюда вывод — это, опять же, структуры другого уровня, нотная запись как таковая ими не оперирует.
Я бы с бааальшим удовольствием поглядел, как Вы будете бол-мен сложное алгебраическое выражение кодить в таком стиле.
Мне Matlab подсказывает, что A*B - матричное умножение, A.*B - поэлементное. У меня есть мнение, что как раз синтаксис Matlab стал убийцей FORTRAN'а, что в научных кругах - так точно. Если скорость не критична, то Matlab по удобству выносит FORTRAN в одну калитку. Ну а по поводу скорости, FORTRAN уже не самый быстрый, компиляторы C/C++ давно его догнали.
Арифметические операции (7) + - * / ** // % и операторы сравнения (6) == < > <= => !=, остальное все равно придется записывать функциями. Учитывая, что под операциями сравнения не всегда понимаются их бинарные реинкарнации, остается самый примитив - арифметика 1-го класса. Которая ВНЕЗАПНО оказывается тоже не бинарной. И умножение, и деление. А теперь возьми много операндов и перемножь их.
Lisp, читаю: произведение суммы, функции-такой-то и свободных параметров. Python - парсим глазами. IRL (+) тоже уйдет, потому что не семантика. Сумма осмысленных параметров - это определение какой-то еще функции, так что будет что-то типа:
Здесь я вижу f с заданной семантикой на уровне идентации, значащими параметрами и флагами. Если параметров во вложенных функциях становится много - добавляем уровень идентации. Алгоритм описан функционально (превед математика), арифметические операции спрятаны в потрохах определений. А просто «какие-то волшебные числа» в вызов запихивают разве что бакланы, для этого делают специальный блоки инициализации и в них тюнять, что надо. В функциях остаются одни определения. Ты можешь так же написать в Python -> и получишь Lisp с неуниформным вызовом лжефункций-операторов, функций, килограмм глазного парсинга или такое же (!) количество скобок как и в лиспе, да-да. Ну, если ты пользуешься в основном операторами (не функциями) бинарными - да, будет чуть многословно. Но я в этом сильно сомневаюсь.
Фсе просто, (mul i j) это 9 символов, i*j это 3 символа.
(* i j) - 7 символов, i * j - 5. Теперь следи за руками: (* 1 2 3 4 5 6 7 8 9) = 21 символ, (1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9) = 35 символов, уберем пробелы, снизив читабельность, ведь IRL тут будут не цифры а название параметров, но ничего, получим: (1*2*3*4*5*6*7*8*9) ту же разницу в 2 символа, и чем длиннее будут числа, именованные параметры, тем разница в процентном соотношении будет сокращаться :)
В вашей префиксной записи оно будет занимать ТРИ.
Как выясняется, нет. Занимать будет чуть больше места, речь о процентах. Но читабельность повышается значительно, кроме того из имеративного «возьмем гвозь, добавим к нему еще 3, и еще 9 гвоздей) получаем декларативную сумму кучек по 1, 3 и 9 гвоздей.
Кстати, идею Гвидо о том что питону не нужны макросы я не поддерживаю.
Он наоборот говорил, что если придумают нормальный синтаксис для макросов и он будет кому-нибудь нужен - не исключено, что в какой-то Python их включат.
Теперь следи за руками: (* 1 2 3 4 5 6 7 8 9) = 21 символ, (1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9) = 35 символов
Это синтетические примеры. Давай посмотрим на реальный код. В том коде что я работаю 99% арифметических выражений либо вообще короткие, либо не состоят из одного только умножения. Я верю что и такие задачи встречаются в жизни. Но они всего лишь маленькое подмножество. Потом я не записываю сложную арифметику в одну строчку. Я делаю промежуточные присваения.
Если мне надо будет много чего перемножить (или выполнить другую операцию) я сделаю product [1...9] или product [a,b,c,d] итп.
Пусть композиция содержит лишь ноты A,B,C,D,E,F,G. Где тут доминанта и субдоминанта? Ответ неоднозначен. Отсюда вывод — это, опять же, структуры другого уровня, нотная запись как таковая ими не оперирует. Т.е. язык как таковой не завязан на гармонию.
В данной вами последовательности нот, должна определенна тоника (переменная), за исключением какофонического приема. Как следствие вытекают и другие переменные. А где что образуется, это по усмотрению гармонической мысли автора. Нотная запись обязывает автора, знать нотную грамоту, не исключая музыкальную гармонию. Что само за себя говорит, о присутствии переменной.