nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Next Entry
URL в С++ исходниках
nyaload
_winnie
Это валидный и компилирующийся C++ код:

int main()
{
    http://users.livejournal.com/_winnie/
    return 0;
}
Tags: , ,

  • 1

Re: «Как перестать имитировать...»

Или, быть может, вы чего-то не понимаете?

int main() {
	cout <<
	run [
		_c = val(30),
		_v = array(),
		for_s (_i = val(0), _i < _c, ++_i) [
			_v[_i] = val(1)
		],
		for_s (_i = val(2), _i * _i < _c, ++_i) [
			if_s (_v[_i]) [
				for_s (_j = _i * _i, _j < _c, _j += _i) [
					_v[_j] = bval(false)
				]
			]
		],
		_v[val(6)]
	]
	<< endl;
}

Re: «Как перестать имитировать...»

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

И я готов расчехлить запылённые C++/Boost/Loki и потратить нерабочее время на объяснение, почему приведённый код — говно пёстрая, но дешёвая подделка для туристов. При условии, что я смогу это собрать и запустить. Приведи, пожалуйста, недостающие инклуды и юзинги.

Re: «Как перестать имитировать...»

#include <iostream>
#include <string>
#include "mu.hpp"

using namespace std;

Re: «Как перестать имитировать...»

bik_top>> Во-первых, они [вычисления во время компиляции] записываются в синтаксисе, отличном от обычного.
udpn> Ваши проблемы. У меня в таком же.
udpn> run [ _c = val(30),...
udpn> Или, быть может, вы чего-то не понимаете?

Быть может, ты не понимаешь значение понятия «синтаксис»?

udpn> #include "mu.hpp"

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

udpn> #include "mu.hpp"

Признайся, что там? Специализнул шаблонца, присыпав сверху ворохом макросов?

udpn>
for_s (_i = val(2), _i * _i < _c, ++_i) [
    if_s (_v[_i]) [

Видишь ли, подобные заманухи (как и двухстрочный Quicksort на Хаскеле) хорошо подходят лишь для демонстрации курьёзов языка впечатлительным барышням.

Код иллюстрирует то, что сделать можно (всё такое яркое и цветастое, как на рекламных брошюрах), а не то, что в действительности нужно. Он показывает, дескать, и так мы можем, и эдак, и статические условные операторы есть, и списки. А пользователю, например, хотелось бы: прочитать список вещественных чисел из файла, отфильтровать числа из нужного диапазона (filter), посчитать для каждого функцию Бесселя (map), свернуть всё в одно скалярное значение (fold).

И вот пытливый начинающий C++-программист, вооружась Вандевурдом-Джоссатиссом и воодушевившись «агитками» вроде приведённой тобой, садится писать свой первый метакод на C++. Но скоро его постигает недоумение и разочарование. Закомые ему STL-алгоритмы применить нельзя, определять промежуточные double const тоже неизвестно где, компиляция валится в непонятных местах с пиздецовыми сообщениями. Или пример из документации падает при изменении строки «cout << *_1 << '\n'» на «cout << '\n' << *_1». И тому подобные милые нюансы синтаксических излишеств C++, о которых забывают упомянуть в рекламных слоганах. Ходишь, как по минному полю, никогда не знаешь, когда компилятор неприятно удивит тебя в следующий раз.

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

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

И последнее (пора закругляться). Почему-то C++-дрочеры склонны излишне героизировать владение шаблонным метапрограммированием (мы джедаи, а вы ниасилившее быдло). Хотя оно имеет такое же отношение к программированию, как решение судоку — к математике. Возвращаясь к исходному посту треда: гнать человека из профессии ссаными тряпками за незнание стандарта С++ вполне уместно, если профессия этого человека — Знаток Стандарта C++. В случае, когда речь идёт о Программисте, причём хорошем — ссаными тряпками лучше гнать C++, имхо.

Re: «Как перестать имитировать...»

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

>> имеет такое же отношение к программированию, как решение судоку — к математике
Да, такое же непосредственное. Не хотел бы рушить ваши прагматические взгляды на мир, но математика изучает что-либо не только потому, что это нужно, но и попросту с надеждой, что это когда-нибудь кому-нибудь пригодится. Правильный пример звучал бы так: "метапрограммирование относится к программированию так же, как теория групп к математике".

Математика

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

Ну, это общее место; изучение математики и обучение математике не нуждается в оправданиях или обосновании пользы для «народного хозяйства».

>> имеет такое же отношение к программированию, как решение судоку — к математике
> метапрограммирование относится к программированию так же, как теория групп к математике

В том контексте я говорил не о метапрограммировании вообще, которое вполне хорошая штука; а о его дурной пародии в лице шаблонов C++. Последнее же — просто игрушка, способ продемонстрировать молодецкую удаль и всё такое, но ничего не говорящая о профессионализме человека как программиста. Или даже имеет негативный оттенок — вместо вгрызания, допустим, в Computer Science, человек тратил уйму времени на вторичную ерунду.

Re: Математика

>> Или даже имеет негативный оттенок — вместо вгрызания, допустим, в Computer Science, человек тратил уйму времени на вторичную ерунду.
Да почти всё в CS и математике является этой "вторичной ерундой". Вы почему-то считаете, что шаблоны - это неудачная реализация метавычислений. Почему? Непонятно. Буковки не такие? Так это вы, наверное, забыли о генериках с этими их интерфейсами и о рантаймовой обработке AST.

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

Усидчивость

> Вы почему-то считаете, что шаблоны - это неудачная реализация метавычислений. Почему? Непонятно.

Непонятно текстом, попробую картинками. Мои претензии выглядят как-то так, твоя реакция — примерно эдак.

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

Владение компайл-таймовыми вычислениями на C++ безусловно свидетельствует об усидчивости и даже, с позволения сказать, чугунности жопы. Но об этом может свидетельствовать и, например, штудирование программистом Девангари. Однако на работодателя произвело бы более благоприятное впечатление, если бы соискатель демонстрировал усердие в областях, более приближенных к программированию (основной рабочей деятельности программиста), чем Девангари, вычисления на плюсовых шаблонах или там на абаке.

Другие перечисленные тобой пункты для освоения спецвозможностей шаблонов C++ не нужны, последний даже противопоказан. Так что увы — выпиливание лобзиком по шаблонцам не демонстрируют наличие у человека тех личных качеств, которые согласно тебе являются признаками профессионализма. (Впрочем, не свидетельствует об отсутствии.)

Re: Усидчивость

Что-то я забыл про этот тред. Продолжим шолле?

>> Непонятно текстом, попробую картинками. Мои претензии выглядят как-то так, твоя реакция — примерно эдак.
Ваши претензии выглядят как безосновательный неконструктивный бред. Теперь ещё и с картинками.

>> Владение компайл-таймовыми вычислениями на C++ безусловно свидетельствует об усидчивости и даже, с позволения сказать, чугунности жопы
В первую очередь, оно свидетельствует о том, что человек понимает многофазные вычисления. Это требует более высокого уровня абстрактного мышления, чем повторение идиом из Гаммы и компании. Вас это раздражает только потому, что вы таковым не обладаете.
P.S. Камень в сторону С++?.

Чугунножопость. И снобизм.

>Ваши претензии выглядят как безосновательный неконструктивный бред.

Это у тебя такая двачерская закалка, или что?

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

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

>Вас это раздражает только потому, что вы таковым не обладаете.

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

>человек понимает многофазные вычисления... Вы таковым не обладаете.

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

Re: Чугунножопость. И снобизм.

>> Это притягивание за уши какой-то мнимой пользы, поданной под видом «всё, что нас не убивает, делает нас сильнее». Типа, живём в нищете, зато вырабатываем в себе стойкость к отсутствию комфорта, профит.
Шаблоны -- аналог теории Галуа в математике. Если человек действительно разобрался в их работе, ему подвластна любая область программирования.

>> Ты всё-таки считаешь, что понимание шаблонов C++ требует каких-то выдающихся незаурядных мозгов, имеющихся только у тебя и Вандевурда с Джоссаттиссом.
Нет, оно требует всего лишь их наличие. Но вы правильно уловили ноту элитизма.

>> Перечисли, пожалуйста, фазы этих твоих многофазных вычислений. Какие из них я не понимаю, и почему ты пришёл к такому выводу.
В простейшем случае: сompile time, run time. Вы не понимаете сами вычисления, а не фазы. Если бы вы их понимали, мы бы не вели этот разговор. В качестве самопроверки предлагаю объяснить себе, как работает хотя бы boost::lambda, и почему у неё такая архитектура.

> Шаблоны -- аналог теории Галуа в математике.

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

> В простейшем случае: сompile time, run time.

Чтобы это понимать, совершенно не нужно долбить шаблоны C++.

> В простейшем случае: сompile time, run time.

Более того, я в compile time различаю фазы лексического, синтаксического, семантического анализа и этап инстанцирования. В том смысле, что (даже не зная устройства конкретного компилятора, только догадываясь) я как правило могу определить, к какому этапу принадлежит та или иная ошибка. Есть ещё pre-compile time, всякие autotools, программирование на конфигах, etc. Когда ты говорил про «понимать многофазные вычисления», думал, что ты имел в виду что-то более колоссальное. Какой уж тут «элитизм».

> В качестве самопроверки предлагаю объяснить себе, как работает хотя бы boost::lambda, и почему у неё такая архитектура.

Я себе всё это (в том числе и boost::mpl) объяснял в те времена, когда усиленно изучал и программировал на C++. Буст тогда имел версию что-то вроде 1.36—1.40. Всё, для чего преимущественно используется boost::lambda, мне сейчас гораздо проще использовать в C#/F#. И внутри оно устроено гораздо проще, как и должно быть. Чище, понятнее, без плюсового мусора в виде перегруженных операторов, плейсхолдеров boost::lambda::_1 и тому подобного говна для поддержки костылями идеологически простых понятий.

Edited at 2011-02-13 01:55 pm (UTC)

Re: Элитизм

>> В общем, твой тезис нуждается в подробном обосновании, проведении параллелей
Я велосипеды изобретать не буду, просто отправлю вас в сторону http://sharpc.livejournal.com/62818.html .

>> Чтобы это понимать, совершенно не нужно долбить шаблоны C++
Если есть желание, можно долбить phantom types, где даже натуральные числа придется вручную делать как Пеано завещал. Суть от этого изменится несущественно. Да и синтаксис красивее не станет.

>> Когда ты говорил про «понимать многофазные вычисления», думал, что ты имел в виду что-то более колоссальное.
Боюсь потревожить ваш пьедестал, но вы написали очередную порцию бреда. От того, что в вашем перечислении будет много запятых, вы умным казаться не будете. И снова повторю, что понимание существования фаз и понимание взаимодействия фаз -- две совершенно разные вещи. Впрочем, ничего удивительного. Нельзя понять проблему, не столкнувшись с ней.

>> Я себе всё это (в том числе и boost::mpl) объяснял в те времена, когда усиленно изучал и программировал на C++.
Действительно? Давайте проверим! Зачем нужен lambda_wrapper?

>> Всё, для чего преимущественно используется boost::lambda, мне сейчас гораздо проще использовать в C#/F#. И внутри оно устроено гораздо проще, как и должно быть. Чище, понятнее, без плюсового мусора в виде перегруженных операторов, плейсхолдеров boost::lambda::_1 и тому подобного говна для поддержки костылями идеологически простых понятий.
Мне глубого пофиг на ваши предпочтения.

>> В общем, твой тезис нуждается в подробном обосновании, проведении параллелей

> Я велосипеды изобретать не буду, просто отправлю вас в сторону http://sharpc.livejournal.com/62818.html.

(Зачем я это прочитал?) Ты не способен увязать теорию Галуа и шаблоны C++, так я и думал. Это всё было иносказательно, аллегорично, метафорично, если абстрагироваться, бла-бла-бла?

>> Чтобы это понимать, совершенно не нужно долбить шаблоны C++

> Если есть желание, можно долбить phantom types, где даже натуральные числа придется вручную делать как Пеано завещал. Суть от этого изменится несущественно. Да и синтаксис красивее не станет.

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

> Боюсь потревожить ваш пьедестал...

Да ну что ты, Д'Артаньян на пьедестале здесь только ты, илитка.

> Действительно? Давайте проверим! Зачем нужен lambda_wrapper?

«— Сколько человек погибло в Великой Отечественной? — 20 миллионов. — А теперь перечисли всех поименно!» ©

> Действительно? Давайте проверим! Зачем нужен lambda_wrapper?

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

>> ...И внутри оно устроено гораздо проще, как и должно быть. Чище, понятнее, без плюсового мусора в виде перегруженных операторов, плейсхолдеров boost::lambda::_1 и тому подобного говна для поддержки костылями идеологически простых понятий.

> Мне глубого пофиг на ваши предпочтения.

Т.е. по существу возражений нет.

Score!

(Anonymous)
Это первый приз!

  • 1
?

Log in

No account? Create an account