Как стать автором
Обновить
147
0
Григорий @bfDeveloper

Программист на C++, D, Brainfuck

Отправить сообщение
Понимаете, с точки зрения математики тут парадокса нет. Вы предложили рассматривать как квадратное уравнение, а то есть зафиксировать момент времени t и координаты r. Может быть один корень, может два. Последствия и того, и другого начинаются в физической интерпретации. Как и области определений, из которой очень быстро может следовать бессмысленность второго корня в силу отрицательности или ненулевой мнимой части. Тут же подразумевается вещественное время и координаты, но комплексные функции. Ограничения на h нужно тоже задать и смотреть. А пока мы просто решаем уравнение, проблем нет.
Раз вы видите парадокс и знаете его решение, значит вы рассматриваете модель подробнее, чем простое квадратное уравнение, а значит нужно разбираться с используемыми функциями, их областями определений, значений и тд.
Ну а истории про то, как ученик Капицы не смог решить, отсылки про советские и российские времена, и общий тон вопроса придают очень неприятные оттенки задаче и задающему.
P.S. Квадратные уравнения, это 8 класс российской и 7 класс советской школы, никак не 5. Куда же нас унесло, хорошо же общались про D и GUI.
Не понимаю к чему это. В квантовой физике я понимаю примерно ничего, проблема наличия решения уравнений Навье-Стокса лежит исключительно в области математики, никак не касаясь физики. Давайте не уходить в оффтопик. Я изначально писал про уравнения исключительно как специфическую область интересов, которую не все разделяют.
Мы вроде сошлись на том, что мне интересно одно, вам другое и оба не видим в этом факте беды. Вы сокрушаетесь, что ваша любимая тема непопулярна, чтож бывает. Вы хотите создать курс программирования GUI? Ничего не имею против, поспособствовать тоже особо ничем не могу. Мне лично не кажется, что такая узкая тема как «Программирование пользовательского интерфейса на С++ / WTL / ATL» не совсем хороша для базового курса, но в магистратуре профильных заведений может найтись место.
Вы правы. Я думал, как включить минимальный GUI в курс, чтобы поднять интерес. Не стал, потому что для этого нужно убрать что-нибудь другое. GUI сложнее консоли, у него больше состояний, так или иначе он базируется на событиях и нужна инверсия контроля. В этом году я ещё не делал нового обзора gui библиотек на D, есть небольшой шанс, что я всё же внесу интерфейс в курс.
Очень хотел бы внести ещё и компиляцию в webassembly с библиотекой для вёрстки прямо из кода, но инструментарий был сыроват и сложноват. Это бы позволило писать под привычное окружение — браузер.
Почему же экспериментально, вполне теоретически. Сейчас уже нет, но ещё недавно вполне неплохо был погружён в теоретические изыскания. Так как для хобби сложновато, а в работе не пользуюсь, безнадёжно отстал. Никогда не считал, что это задача мне по силам (если она вообще кому-то по силам), но интересно же. Там весёлая история, как и с P=NP, практики исходят из существования единственного решения, как и P!=NP, а теоретики не уверены — одна из задач тысячелетия.
А курс «Программирование пользовательского интерфейса на С++ / WTL / ATL» в университете, не исключено я буду вести лично
Обязательно напишите про то, что у вас получится, с удовольствием почитаю про ваш опыт. Серьёзно, без подколок и сарказма. Разнообразие это очень хорошо.
От темы и правда ушли, тут GC, ниже GUI, но вы попали в больное место, не могу молчать.
Rust, Машина Тьюринга и Brainfuck — те вещи, знакомство с которыми я считаю необходимыми для современного образованного программиста. Rust, чтобы увидеть, как бывает всё не так и это здорово. Машина Тьюринга вместе с задачей останова просто для понимания пределов программирования. Меня поражает как мало людей не понимают, что нельзя в общем случае написать программу, которая идеально проинспектирует другую программу. А Brainfuck для демонстрации абсолютно чистого программирования, кода самого в себе. Его простота и полнота завораживает и заставляет относиться к компьютеру по-другому.
И всё это не важно в каком порядке и когда. Rust разве что только после становления хотя бы как начинающего программиста. Чтобы видеть контраст, нужно видеть фон.
Вы мне предлагаете поспорить о вкусах. Я знаком с проблемами и сложностями проектирования GUI, не интересно. Не знаю будет ли это хорошим примером, но интересна ли вам проблема числа 10958? Или доказательства/опровержения существования и единственности решения системы уравнений Навье-Стокса? И в то, и в другое я закапывался и мне это нравится, но я не ожидаю, что понравится всем, даже если потратят столько же времени. Фломастеры разные, пусть все занимаются своим делом. У меня интерфейсы вызывают непреодолимую тоску и вовсе не из-за простоты или рутины.
Про C++ не спорю, это мой основной рабочий инструмент для прода в нише совершенно противоположенной вашей — разработка серверных библиотек. По совершенно объективным причинам я не лезу туда с D. А вот инструментарий для себя и других я пишу на D, и все это устраивает, потому что быстро пишется и быстро работает.
Острой необходимости в замене C++ нет, иначе бы она уже была, но это не значит, что нужно останавливаться на нём.
все эффективные оптимизации аллокации уже реализованы в malloc.
Все эффективные оптимизации на общий случай реализованы в malloc. Всегда есть частный случай, который может быть быстрее. Тот же malloc не располагает кучей данных, которые есть у GC — априорное знание о размерах объектов, например.
ну вы будете его использовать только там, где без него совсем никак — в случаях раздельного владения объектом между потоками
И RC нужен не только для многопоточности. Растовский rc::Rc наоборот не атомарен и должен использоваться только в одном потоке. Общее владение ресурсом так или иначе приводит к счётчику ссылок, сборке мусора или ошибкам и утечкам. Выбирайте. Здорово, когда можно не выбирать и использовать только одиночное эксклюзивное владение, но это же не всегда возможно даже в Rust.
Вы считаете, что C++ лучше в качестве первого языка? Или я не правильно понял про места, где учат C++? Я считаю что D гораздо лучше в качестве первого, возможно даже лучший из мне известных.
Это на ваш взгляд, а для меня нет хуже задачи, чем GUI. Занимался им на Qt и на Flash. Я верю, что вам и многим другим нравится, но на нём свет клином не сошёлся.
Про опенсорс согласен, хотелось бы больше. Не хватает какой-то библиотеки, которая подняла бы D своей популярностью. Я надеялся, что vibe.d станет ею, но разочаровался — удобно, но не быстро, не хватает какой-то изюминки.
Ручное управление памятью в D есть, и это отвечает на оба ваших вопроса. Ничего не мешает вообще использовать только C подмножество, будет всё то же самое, но удобнее за счёт фич этапа компиляции.
А к докладу Антона Полухина, который вы скинули, я бы хотел добавить, что любое управление памятью имеет накладные расходы. malloc требует дополнительного места под размер, имеет избыточное потребление для маленьких объектах на многих реализациях, и вообще не быстр, иначе не появились бы альтернативы и ручные аллокаторы. Любое выделение памяти не бесплатно, любой контроль за используемой памятью, GC, счётчик ссылок или дерево владения из Qt, вносит накладные расходы. Тот же Rust при всеобъемлющем контроле за временем жизни всё равно предлагает счётчик ссылок для динамики. А есть ситуации, когда RC медленнее, чем GC.
Поэтому важны настоящие zero cost абстракции, которые позволят вообще не выделять память, коих в D хватает. Например ленивые диапазоны (моя статья на хабре). После выхода C++20 выглядит банально, вот только как Ranges туда попали? Eric Niebler напрямую ссылался на D в объяснениях. И я считаю такие вещи важнее, чем встроенный в язык GC.
Существенная доля ответов есть в статье, но постараюсь ответить подробнее.
Лично мне D просто нравится. Я продуктивнее пишу на D, чем на C++, Perl или JS, и похоже это не только субъективное восприятие, а свойство языка. Почему именно на этой кафедре решили преподавать именно этот язык, история сложная и для меня до сих пор целиком не известная.
Я понимаю, что GC делает язык похожим на другие языки со сборщиком мусора, но это иллюзия. В D гораздо больше из мира C++ и Rust, чем из C# или Java. Банально сравните производительность, граммотный D на голову обходит любые VM языки или тот же Go. В задачах, когда из процессора действительно нужно выжать всё, D не уступает и часто лидирует в сравнении с C и Rust. И это очень важно понять, что удобство не всегда достаётся ценой производительности.
В вузе надо учиться программировать и изучать концепции, а не практиковаться в чём-то одном. Вуз не должен выпускать программистов на Go, он должен выпускать образованных людей. После D вы сможете относительно просто перейти и на C++, и на C# и на Go, а вот обратное не верно. Этот язык богат на подходы, при этом прост в изучении основ. Кроме того кругозор позволяет видеть абстракции, а не конкретные синтаксические конструкции. На примере D хорошо объяснять программирование контрактное, функциональное, многопоточное, метапрограммирование. Как вы сможете донести саму идею zero cost (бесплатных) абстракций на примере Java, где их фактически не существует? А ведь это важная идея, которую продвигает тот же Rust.
И да, если бы я оценивал свой уровень владения Rust достаточным, то я бы предложил преподавать его. Имхо, в нём одна интересная мысль, но она действительно стоит того. Вот только я знаю D, а не Rust. Ну и кстати, в D тоже появляется анализ времени жизни и зарождается borrow checker. И если они доведут его до кондиции, решив все проблемы удобства и совместимости, то лет через 6 мы увидим его в C++, поверьте.
Спасибо за отзыв, приятно слышать.
Чат в дискорде был, в нём же собирались на «лекции». В нём можно удобно писать и личные вопросы и общие в групповой. Так себе работало, как всегда только для самых активных.
Плюсов обычно в карму нет.
Прямо как на хабре)
Ручки и мёрч от компании это интересно. Видимо ваш работодатель возлагает какие-то надежды на выпускников? К себе работать зовёте?
Я планировал и всё ещё хочу так делать, но пока не получается. В этом году знакомство с группой началось с вопроса от них, можно ли на стажировку, так что может быть удача наконец-то улыбнётся.

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

Я на рабочую программу и не жаловался, документ понятный, нужный, пусть и объёмный. Это как раз очень порадовало, что программа — фактически единственная "бумажка".
Про посещаемость да, но всё же оставлять всё на самодисциплину неправильно. Не всем хватает мотивации, и если правильно "помочь" организоваться, то результаты будут лучше. Не поделитесь опытом, за что поднимаете и понижаете карму? Работает как элемент геймификации или наоборот школьного журнала?
Ну а истории про то, как просят кому-то что-то поставить и у меня появились. Я боялся, что их будет даже больше, но пока всё в рамках разумного. Родители к счастью ещё ни разу не звонили.

Вас, возможно, интересует, почему ваша статья заминусована? Я кнопки голосования не трогал, но позволю себе высказать гипотезу.
Формулировка задачи выглядит очень странно. Что такого особенного в передаче файлов по сети? Почему без сторонних библиотек? Зачем шифровать? Почему не взять более традиционные алгоритмы?
Ну и технический уровень реализации тоже не высок. Простите за сравнение, но у меня студенты третьего курса не самого профильного факультета на сокетах посложнее вещи делают. Не говоря уже про то, что они делают с библиотеками.
Это вовсе не означает, что вы не можете написать о своём опыте на хабр, но нужно трезвее оценивать уровень и соответственно менять фокус с того, что вы сделали на то, почему. Может быть, вы учитесь программировать и хотите поделиться своей историей? Или делаете сложную техническую систему, где программирование лишь неважная деталь? При нужном ракурсе вы сможете получить тут поддержку и советы, а не минусы.

Да, но 0..100 читается лучше. iota хороша для функциональных цепочек с map, filter, chunk и тд, и ещё для шага отличного от 1, он там третьим аргументом передаётся.
Имхо, это недоработка в языке, что 0..100 это только для foreach. Было бы лучше, если можно было бы в любом месте использовать для обозначения диапазонов. Вместо этого… переиспользовали для срезов и значение там совсем другое.

Выше уже упоминали D, а если вспомнить, что все эти ranges в C++ попали оттуда (именно в виде шаблонных конструкций этапа компиляции), то и for надо смотреть там же.


foreach (i; 0..100) {}

В C++ это переносится примерно так же, как у вас в статье


for (auto i : iota(100)) {}

Я считаю, что синтаксический сахар в виде range-based for вместе с хорошей библиотекой ranges (ranges-v3, которая фактически в стандарте C++20), и есть идеальный for.
Ну и стоит упомянуть, что функциональщина в виде map, filter или cartesianProduct часто лучше читается. Можете посмотреть на ndslice и увидеть, как хорошо решается задача многомерного прохода на тех же абстракциях.

image
В данном случае дело не только в jpeg, но суть вы поняли

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность