Pull to refresh
65

Programmer

1,5
Rating
105
Subscribers
Send message
Не знаю почему, но мне все эти ссылки (и перемещаемые, и обычные) интуитивно не нравятся. Не проще ли явно передавать указатель (который всегда 4 или 8 байт) и делать с объектом что угодно по указателю?
Я увлекаюсь дизайном языков программирования, и вот как раз недавно собирал информацию по ссылкам. Ссылки (обычные) появились в С++ для того, чтобы можно было возвращать из функции что-то, что может быть слева от присваивания (LValue). Это нужно для перегрузки операторов =, *, [], ++, --. Заодно появилась возможность писать что-то вроде foo() = 42.
В Rust таких неявных ссылок нет (там понятие «ссылка» есть, но это скорее просто разновидность указателя с явным разыменованием). Перегрузка lvalue-операторов есть, возвращают они ссылки, требующие явного разыменования, и тем ни менее как-то выкрутились. Например перегрузка индексации.
Передача аргументов по ссылке в С++ происходит неявно, что не очень хорошо с точки зрения наглядности. В C# используется слово ref для явной передачи по ссылке, и читаемость такого кода значительно лучше. Кстати на Хабре есть статья, в которой перечисляются и другие недостатки…
Ну и move-семантика. Ее назначение понятно, но вот реализация… чисто синтаксически это выглядит как-то криво и громоздко. std::move которая на самом деле ничего не делает, а просто пытается изменить тип аргумента. А есть еще std::forward. Все это производит впечатление какой-то кривизны…
Интересно, можно ли сделать лучше? Пусть не в рамках С++, а вообще?
Хорошо в Испании, тепло:) Насколько я понимаю, одно из самых теплых мест в Европе.
А вы в Испании живете и работаете? Расскажете как там с этой точки зрения?
Динамические метки и goto по ним есть в расширении GCC
Никогда не пользовался, но зато как по-хакерски:
static void *array[] = { &&foo, &&bar, &&hack };
goto *array[i];

или даже вот так, храним смещения между метками, а не сами метки:
static const int array[] = { &&foo - &&foo, &&bar - &&foo,  &&hack - &&foo };
goto *(&&foo + array[i]);
при копипасте примеров из pdf иногда пропадают некоторые символы. Что-то я довводил вручную, но не везде заметил. Там должно быть подчеркивание.
Не совсем. При наследовании базовый класс всегда размещается в начале памяти производного. Здесь же можно разместить базовые классы в любом месте, по любому смещению относительно начала производного. Для низкоуровневых задач это бывает весьма полезно.
Важно не то, сколько добавить, важно то — как это сделать. Т.е. не количество фич само по себе, а внутренняя взаимогармоничность разных элементов языка. Этого я у многих современных языков не вижу.
Ну а С∀ — просто интересный образец того, как люди видят недостатки в существующем и пытаются их как-то исправить. Здесь интересно само направление мысли, что-ли… Вот например ссылки. На Хабре уже была статья о недостатках ссылок, с предложением о том как эти недостатки устранить. Здесь — другой подход (тоже не лишенный недостатков!). Но интересно сравнить, обдумать…
Спасибо, для Firefox пригодится, а то там нет встроенного сохранения в mhtml

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

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

Меня нет в соцсетях (по крайней мере под реальным именем)
Я вообще кладу трубку не снимая, если мне звонят с неизвестного номера

Пора уже переходить на нормальный децентрализованный интернет (торренты в некотором смысле слишком низкоуровневые и не слишком удобны, по большому счету это только первый шаг в правильном направлении)

Кто вам такое сказал? «Покидание» может быть чем угодно. Например, переходом на «микроуровень», где размеры меньше чем планковское расстояние, и действуют другие физические принципы и законы — например свободные от второго начала термодинамики, и соответственно тепловой смерти… Возможно для этого необходимы какие-то сверхтонкие квантовые эффекты, а не грандиозные взрывы космических масштабов:)
Думаю, что колонизация галактики для развитых цивилизаций — такая же бессмысленная цель, как для современного человечества — постановка всех камней в пустыне на кадастровый учет. Никому это не нужно. Я полагаю, что в конечном итоге любая развитая цивилизация, достигшая технологической сингулярности, покидает эту несовершенную Вселенную, подобно тому как птенец рано или поздно покидает скорпулу яйца… И делается это вовсе не на космических кораблях.
Совершенно очевидно, что те айтишники которым сейчас за 30 или за 40, не перестанут быть айтишниками когда им будет за 50. Раньше это была молодая профессия, просто потому что она была новая. А сейчас она уже не новая, и вполне будет спрос на разных специалистов.

Я боюсь, как бы со временем из-за этих складных экранов нормальные ноутбуки с физической клавиатурой не исчезли:) Думаете такого не может быть? Со смартфонами именно это и произошло. Все разнообразие моделей и форм-факторов скатилось в абсолютную однотипность...

Мне нужен. Это как математическая нотация: в разных разделах математики изучаются совершенно разные вопросы, но нотация на 90% общая. Если бы в каждом случае были бы свои обозначения для арифметических операций, функций и т.д., это был бы полный мрак...

В C#10 сделали совмещенную деконструкцию в новые и существующие переменные. Может и в Go подтянутся
string model = string.Empty;
(model, var color) = car;

и это кстати нужная фича для паттерн-матчинга частично определенными паттернами. Типа вот такого (на некотором гипотетическом C-like языке)
match(car) {
case "BMW X5", var color: foo(color); 
case var model, Black: bar(model);
}
«Моржовый оператор» лучше всего использован в Go.
Вообще проблема Python (а также Ruby, Perl, PHP, JavaScript и т.д.) в том, что можно создавать переменные без явного объявления. Вот просто написать «x = 100», и у вас новая переменная. Или не новая, а ранее объявленная… Если имя переменной длинное, то одна случайная опечатка — и программа не работает. Или работает, но не совсем так как задумывалось… В Go придумали идеальное решение: отдельный оператор для объявления переменных.
Небольших поясняющих примеров кода в статье очень не хватает.

Information

Rating
1,819-th
Registered
Activity