All streams
Search
Write a publication
Pull to refresh
26
0
Константин Барсов @Efrit

Разработчик

Send message
gperf её реализовать сможет — но хочется переложить всю работу на компилятор, не прибегая к каким-либо сторонним средствам.
Но как Вы в этом случае будете реализовывать функцию подсчёта хэша, работающую во время компиляции?
Ведь аргументы макроса CASE могут встречаться в коде где угодно…
Да, Вы правы, должно быть 9. Спасибо за уточнение. Перебил константу в файле, обновил статью.
Лично у меня не проходит, static_assert срабатывает; в диапазон 0-127 кастятся только ASCII-символы.
Конечно, пишите. Хорошие статьи про алгоритмы украшают Хабр.
Да, извиняюсь, я спутал с шифрованием вроде MD5. А Perfect hash реализовать можно, но для этого придётся при добавлении строки в CASE заодно добавлять эту строку в функцию вычисления хэша.
Конечно, я рассматривал и perfect hash. С его применением ограничения вообще бы не чувствовались :)
Однако потом посчитал, что отсутствие коллизий важнее. Ведь данные макросы может использовать человек, который и не подозревает, что в них идёт вычисление хэша… И коллизии могут быть очень некстати, даже если вероятность их возникновения минимальна.
Хотя, конечно, функцию str_hash можно переделать на всё что угодно.
Кстати, да — ведь при возведении 128 в степень и впрямь можно использовать битовую арифметику, хотя на результат это не повлияет. Я про это что-то не подумал, спасибо за уточнение. Надо будет файл обновить.

Что касается эскейп-последовательностей в case — лично у меня GCC на них кидает варнинг при компиляции, так что программист их заметит. В крайнем случае, можно изменить функцию str_is_correct на диапазон 0-126 — тогда точно можно быть спокойным.
Вы это будете знать на этапе компиляции, или блокирование изменения поверхности произойдет в рантайме?
На этапе компиляции.
Однако возможно использование mutable-переменных или различных const_cast, так что на 100% «константному методу» доверять нельзя.
финальный модификатор const после списка параметров — мой самый любимый. Он указывает на то, что idSurface::Split() не будет изменен самой поверхностью (surface).
Небольшая неточность: не «не будет изменен самой поверхностью», а «не будет изменять саму поверхность».
Автор имеет в виду, что const-метод не может менять объект, для которого вызван. Хотя полностью надеяться на это нельзя, поскольку mutable-переменные никто не отменял.


За последние 6 недель разработки Dyad я дописал 13k строк кода.
Вот это скорость! При стандартном 8-часовом рабочем дне получается примерно 1 строчка кода в минуту.
Видимо, проект так нравился автору, что он его и дома не оставлял ;)
Ещё можно Жанну Агузарову отправить.
Погостила на Земле, и хватит — пускай отправляется на родину.
Очевидно, Кемени и Курц, иначе условие бы не выполнилось.
Никак не могу прочесть дальше 1965 года.
А если он не доживёт до того момента, когда «его разум можно будет загрузить в компьютер», он прикажет загрузить туда Кэролайн.

P.S. Про нано-ботов в крови там тоже, кстати, было.
Спасибо. Ну тогда тем более :)
А какие преимущества, интересно, даст D по сравнению с C++11 для этого фреймворка? Если учесть то, что Qt и так его расширяет — те же проперти, сигналы/слоты, QtConcurrent…

Сборка мусора не в счёт — хватает смарт-пойнтеров, которые эту проблему решают.
Думаю, что рано или поздно Qt для D частично появится.
Да, извиняюсь, нужно было конкретизировать — я имел в виду iOS и Android, как самые популярные ныне мобильные платформы. Да и под ВинФон также хочется.
Qt на мобильных платформах… Наконец-то!

Совмещение Qt5 и C++11 должно дать высокую скорость работы и настоящую кросс-платформенность. Неужели всё действительно будет так шикарно?
Если Вам в C++ не нравится какой-то механизм — не используйте его, только и всего.

Никто не заставляет Вас пользоваться rValue-ссылками — можете использовать обычные lValue.
Более того, никто не заставляет пользоваться ссылками вообще — можете везде юзать указатели, как в старом добром С.

rValue-ссылки — это прекрасный способ полноценного использования временного объекта. Благодаря нему, в частности, в С++11 инициализация STL-ных контейнеров происходит куда быстрее, нежели в старом C++03 — поскольку для объектов, «заполняющих» контейнер, теперь вызывается не контруктор копирования, а констуктор перемещения.

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

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity