(no subject)

Комментатор предостерёг: если не гордиться за своих, то придётся перестать выпускать сборники вида «Поэты нашего города».

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

А если после этого ещё бы исчезли стихи, написанные к праздникам руками коллег, то других аргументов даже и не надо — эти два перевесят что угодно.



Рандом-преемственность

Вот как у людей такое вообще в одной голове уживается?

Александр Невский, новгородский князь, считающий себя вассалом ордынского хана, в свою очередь бывшего вассалом монгольского Великого хана, — Наш.

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

В своё время, молодец такой, он защитил Нашу Россиюшку, наваляв тевтонцам. Которые, правда, действовали в союзе с другим русским князем — Ярославом (Владимировичем), имевшим право на Псковский престол, но это почему-то не считается.

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

Collapse )

И я тоже

Реал, не понимаю, что останавливает тех людей, которые «победили, потому что победили наши дедушки».

Надо продолжать в том же духе.

Дедушку наградили орденом, поэтому и меня наградили орденом.

Мама была профессором, поэтому и я тоже профессор.

Прадедушка был генералом, поэтому и я тоже генерал.

Пра-прадедушка владел крепостными, поэтому и я тоже владею крепостными.

Хотя, нет, постойте, от последнего как раз ничто не останавливает — «дворяне» до сих постоянно проявляются.

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

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



Мы можем

Прочитал в рассуждениях любителей «можем перепоказать» ценное дополнение, которое всё проясняет. Хотя что-то там говорят они в основном друг другу, а вовсе не тем иностранцам, которые якобы строят нам адские козни, этим самым иностранцам предлагается отвечать в том числе «фразой Александра Невского».

Ну, той самой, которую он сказал в фильме, а в реальности никогда не говорил.

Надо отметить, в этом контексте фраза «можем перепоказать» приобретает совершенно другие коннотации. Ну да, в случае чего мы обязательно этот фильм ещё раз перепокажем. Друг другу.

И «можем повторить» тоже отлично к этому контексту подходит. Выкуси, Голливуд: мы в любой момент можем пустить этот фильм в повторный показ.

Хотя, как знать, быть может, это они так выражают гордость за свои зашкаливающие интеллектуальные способности: не только кино смотрели, но даже некоторые фразы из него повторить могут!

О разработке магических языков

Смысл программ на Scala состоит в том, чтобы придумать и описать где-то так семь слов, при помощи которых вы сможете сказать всё по выбранной вами теме. После этого начинается скучная, но, благо, короткая часть, когда вы говорите всё по этой теме в десяти строках.

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

С другой стороны, это ещё и плюс, поскольку вами сказанное действительно ведь работает, а потому, очевидно, сказано правильно. Что сродни наколдовыванию целой кучи волшебства на тайном языке для посвящённых: эффект видят все, но сами повторить его не могут, поскольку не знакомы с этим языком.

Нововведения Scala 3 позволяют сократить локальный магический язык с где-то так семи слов до где-то так четырёх, поэтому колдовать на тайных языках для посвящённых гипотетически смогут даже высшие обезьяны. Если, конечно, их удастся какому-то из них научить.




doc-файл

Как привнеси в Scala немножко Wolfram

В приложении к предыдущей статье я задумался, а сколько вообще надо дописать к Scala, чтобы разобранная в статье конструкция работала и там тоже. То есть, чтобы код вида

x \\ f \\ g


превращался в код

g(f(x))


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

Знаете сколько для этого надо написать?

Collapse )




А потом…

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

Суть проблемы вот в чём. Есть у вас, предположим, набор функций, которые — для простоты — принимают число и возвращают число. В результате, вы можете взять число и последовательно применить эти функции «по цепочке» — то есть каждую следующую к результату выполнения предыдущей, составляя, таким образом, самые разные последовательности вычислений и преобразований.

Ничего удивительного тут, разумеется, нет — любой язык, который позволяет определять функции (пусть даже не как граждан первого рода), позволяет и их цепочечный вызов. Однако есть неудобство: хоть это и записывается коротко, читается оно с трудом.

Причём для длинной цепочки оба «стандартных» варианта выглядят очень так себе.

В варианте…

Collapse )

Чистое лицемерие

Я большой поклонник функций как «граждан первого рода». Это действительно радикально сокращает код и одновременно с тем делает его гораздо более понятным. И заодно более универсальным. По этой причине данный столп функционального программирования сейчас внедрился во все мейнстримные языки, и все, кто его понимает, очень сим довольны.

Однако, стоит вам произнести «функциональная парадигма», как тут же обнаружится какой-то теоретик программирования, слышавший это словосочетание, который обязательно добавит что-то типа: «так несчитово — в настоящем функциональном программировании ещё и все значения неизменяемые». Эти ваши Си-шарпы и Скалы, таким образом, для быдла. В крайнем случае, если вы уж не засели за честный Хаскель, то хотя бы пишите «честно»: никогда не используйте изменяемые значения.

Тут, к сожалению, есть маленькая такая проблемка: в синтетических примерах всё прекрасно, но вот если использовать этот второй столп для реальных задач, то все вышеприведённые плюсы тут же превращаются в своих гипертрофированных антагонистов — всё становится чудовищно длинно, совершенно нечитаемо и очень локально.

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

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

Collapse )