Не знаю почему, но мне все эти ссылки (и перемещаемые, и обычные) интуитивно не нравятся. Не проще ли явно передавать указатель (который всегда 4 или 8 байт) и делать с объектом что угодно по указателю?
Я увлекаюсь дизайном языков программирования, и вот как раз недавно собирал информацию по ссылкам. Ссылки (обычные) появились в С++ для того, чтобы можно было возвращать из функции что-то, что может быть слева от присваивания (LValue). Это нужно для перегрузки операторов =, *, [], ++, --. Заодно появилась возможность писать что-то вроде foo() = 42.
В Rust таких неявных ссылок нет (там понятие «ссылка» есть, но это скорее просто разновидность указателя с явным разыменованием). Перегрузка lvalue-операторов есть, возвращают они ссылки, требующие явного разыменования, и тем ни менее как-то выкрутились. Например перегрузка индексации.
Передача аргументов по ссылке в С++ происходит неявно, что не очень хорошо с точки зрения наглядности. В C# используется слово ref для явной передачи по ссылке, и читаемость такого кода значительно лучше. Кстати на Хабре есть статья, в которой перечисляются и другие недостатки…
Ну и move-семантика. Ее назначение понятно, но вот реализация… чисто синтаксически это выглядит как-то криво и громоздко. std::move которая на самом деле ничего не делает, а просто пытается изменить тип аргумента. А есть еще std::forward. Все это производит впечатление какой-то кривизны…
Интересно, можно ли сделать лучше? Пусть не в рамках С++, а вообще?
Хорошо в Испании, тепло:) Насколько я понимаю, одно из самых теплых мест в Европе.
А вы в Испании живете и работаете? Расскажете как там с этой точки зрения?
Не совсем. При наследовании базовый класс всегда размещается в начале памяти производного. Здесь же можно разместить базовые классы в любом месте, по любому смещению относительно начала производного. Для низкоуровневых задач это бывает весьма полезно.
Важно не то, сколько добавить, важно то — как это сделать. Т.е. не количество фич само по себе, а внутренняя взаимогармоничность разных элементов языка. Этого я у многих современных языков не вижу.
Ну а С∀ — просто интересный образец того, как люди видят недостатки в существующем и пытаются их как-то исправить. Здесь интересно само направление мысли, что-ли… Вот например ссылки. На Хабре уже была статья о недостатках ссылок, с предложением о том как эти недостатки устранить. Здесь — другой подход (тоже не лишенный недостатков!). Но интересно сравнить, обдумать…
Пока я просто сохраняю нужные мне странички средствами браузера в mhtml. Сайтов, целиком пригодных к скачиванию, не так уж и много (обычно это какие-то авторские работы типа книг или методичек на университетских сайтах). Но для таких есть телепорт про и другие подобные программы.
А идеальная система - просто некая кнопка типа "лайка", аналогичная добавлению в закладки, по нажатию на которую страница сохраняется в оффлайне, добавляется в какие-то оффлайновые базы для поиска, и - в идеале - ставится на раздачу в децентрализованной сети.
Пора уже переходить на нормальный децентрализованный интернет (торренты в некотором смысле слишком низкоуровневые и не слишком удобны, по большому счету это только первый шаг в правильном направлении)
Кто вам такое сказал? «Покидание» может быть чем угодно. Например, переходом на «микроуровень», где размеры меньше чем планковское расстояние, и действуют другие физические принципы и законы — например свободные от второго начала термодинамики, и соответственно тепловой смерти… Возможно для этого необходимы какие-то сверхтонкие квантовые эффекты, а не грандиозные взрывы космических масштабов:)
Думаю, что колонизация галактики для развитых цивилизаций — такая же бессмысленная цель, как для современного человечества — постановка всех камней в пустыне на кадастровый учет. Никому это не нужно. Я полагаю, что в конечном итоге любая развитая цивилизация, достигшая технологической сингулярности, покидает эту несовершенную Вселенную, подобно тому как птенец рано или поздно покидает скорпулу яйца… И делается это вовсе не на космических кораблях.
Совершенно очевидно, что те айтишники которым сейчас за 30 или за 40, не перестанут быть айтишниками когда им будет за 50. Раньше это была молодая профессия, просто потому что она была новая. А сейчас она уже не новая, и вполне будет спрос на разных специалистов.
Я боюсь, как бы со временем из-за этих складных экранов нормальные ноутбуки с физической клавиатурой не исчезли:) Думаете такого не может быть? Со смартфонами именно это и произошло. Все разнообразие моделей и форм-факторов скатилось в абсолютную однотипность...
Мне нужен. Это как математическая нотация: в разных разделах математики изучаются совершенно разные вопросы, но нотация на 90% общая. Если бы в каждом случае были бы свои обозначения для арифметических операций, функций и т.д., это был бы полный мрак...
«Моржовый оператор» лучше всего использован в Go.
Вообще проблема Python (а также Ruby, Perl, PHP, JavaScript и т.д.) в том, что можно создавать переменные без явного объявления. Вот просто написать «x = 100», и у вас новая переменная. Или не новая, а ранее объявленная… Если имя переменной длинное, то одна случайная опечатка — и программа не работает. Или работает, но не совсем так как задумывалось… В Go придумали идеальное решение: отдельный оператор для объявления переменных.
Я увлекаюсь дизайном языков программирования, и вот как раз недавно собирал информацию по ссылкам. Ссылки (обычные) появились в С++ для того, чтобы можно было возвращать из функции что-то, что может быть слева от присваивания (LValue). Это нужно для перегрузки операторов =, *, [], ++, --. Заодно появилась возможность писать что-то вроде foo() = 42.
В Rust таких неявных ссылок нет (там понятие «ссылка» есть, но это скорее просто разновидность указателя с явным разыменованием). Перегрузка lvalue-операторов есть, возвращают они ссылки, требующие явного разыменования, и тем ни менее как-то выкрутились. Например перегрузка индексации.
Передача аргументов по ссылке в С++ происходит неявно, что не очень хорошо с точки зрения наглядности. В C# используется слово ref для явной передачи по ссылке, и читаемость такого кода значительно лучше. Кстати на Хабре есть статья, в которой перечисляются и другие недостатки…
Ну и move-семантика. Ее назначение понятно, но вот реализация… чисто синтаксически это выглядит как-то криво и громоздко. std::move которая на самом деле ничего не делает, а просто пытается изменить тип аргумента. А есть еще std::forward. Все это производит впечатление какой-то кривизны…
Интересно, можно ли сделать лучше? Пусть не в рамках С++, а вообще?
А вы в Испании живете и работаете? Расскажете как там с этой точки зрения?
Никогда не пользовался, но зато как по-хакерски:
или даже вот так, храним смещения между метками, а не сами метки:
Ну а С∀ — просто интересный образец того, как люди видят недостатки в существующем и пытаются их как-то исправить. Здесь интересно само направление мысли, что-ли… Вот например ссылки. На Хабре уже была статья о недостатках ссылок, с предложением о том как эти недостатки устранить. Здесь — другой подход (тоже не лишенный недостатков!). Но интересно сравнить, обдумать…
Пока я просто сохраняю нужные мне странички средствами браузера в mhtml. Сайтов, целиком пригодных к скачиванию, не так уж и много (обычно это какие-то авторские работы типа книг или методичек на университетских сайтах). Но для таких есть телепорт про и другие подобные программы.
А идеальная система - просто некая кнопка типа "лайка", аналогичная добавлению в закладки, по нажатию на которую страница сохраняется в оффлайне, добавляется в какие-то оффлайновые базы для поиска, и - в идеале - ставится на раздачу в децентрализованной сети.
Кстати, а есть аналогичная база газет за 90-е и 2000-е?
Пора уже переходить на нормальный децентрализованный интернет (торренты в некотором смысле слишком низкоуровневые и не слишком удобны, по большому счету это только первый шаг в правильном направлении)
Я боюсь, как бы со временем из-за этих складных экранов нормальные ноутбуки с физической клавиатурой не исчезли:) Думаете такого не может быть? Со смартфонами именно это и произошло. Все разнообразие моделей и форм-факторов скатилось в абсолютную однотипность...
Мне нужен. Это как математическая нотация: в разных разделах математики изучаются совершенно разные вопросы, но нотация на 90% общая. Если бы в каждом случае были бы свои обозначения для арифметических операций, функций и т.д., это был бы полный мрак...
и это кстати нужная фича для паттерн-матчинга частично определенными паттернами. Типа вот такого (на некотором гипотетическом C-like языке)
Вообще проблема Python (а также Ruby, Perl, PHP, JavaScript и т.д.) в том, что можно создавать переменные без явного объявления. Вот просто написать «x = 100», и у вас новая переменная. Или не новая, а ранее объявленная… Если имя переменной длинное, то одна случайная опечатка — и программа не работает. Или работает, но не совсем так как задумывалось… В Go придумали идеальное решение: отдельный оператор для объявления переменных.