Как стать автором
Обновить
41
Карма
0
Рейтинг

Пользователь

  • Подписчики 8
  • Подписки 3

Как я студентам язык D преподавал

движок к игре Quantum Break был написан на D

Не совсем: движок игры написан на C++, а D использовался вместо скриптового языка для быстрого прототипирования: код на D компилировался в DLL, и можно было вносить изменения, даже не перезапуская игру.

Портируем make.c на D

Но честно говоря, они сделали большую бяку, когда задепрекейтили c-style arrays (

Я когда свой небольшой проект портировал, то просто прошёлся по объявлениям массивов регвыром.


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

Триумфальное возвращение Ломуто

А в D целые представляются всегда как дополнение до двух?

Уолтер не видит смысла поддерживать что-то другое.

Портируем make.c на D

D гарантирует, что если вы скопируете в него сишный код, то он либо будет работать точно так же, как и в C, либо не скомпилируется вообще. Так что если вы оставите char *name,*text;, ничего плохого не случится: компилятор просто укажет вам на ошибку.

D как улучшенный C

Классы с полиморфизмом есть в полноценном D. В Better C только структуры. Они не поддерживают наследование, но могут содержать методы, конструкторы и деструкторы. Есть любопытная техника, которая позволяет реализовать полиморфизм без наследования: alias this.


struct A {
    int x = 42;
}
struct B {
    A a;
    alias a this; // Теперь B позволяет обращаться к членам A как к своим собственным.
}
B b;
assert(b.x == 42);

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

D как улучшенный C

В D, как я понял, если не делаешь инициализацию сам, то структура сама инициализируется нулями

Не нулями. Агрегатные типы инициализируются значениями по умолчанию для их полей — для double, например, это NaN, а не ноль. Можно указывать свои значения по умолчанию:


struct S { int x = 42; }
S s;
assert(s.x == 42);

При этом любую инициализацию всегда можно отключить:


struct S { int x = 42; }
S s = void;
// Теперь s.x равно бог весть чему.

Язык вам ничего не навязывает. Он по умолчанию делает «как правильно», но оставляет вам возможность выжать из железа максимум, если вы знаете, что делаете.


В итоге будет ряд случаев, когда компилятор не сделает оптимизацию и в рантайме будет выполнен ряд лишних операций.

Компилятор умеет оптимизировать лишние инициализации.

D как улучшенный C

https://dlang.org/spec/expression.html#equality_expressions


У типов с плавающей точкой +0.0 И -0.0 считаются равными, NaN и NaN считаются неравными. Равенство структур проверяется по равенству всех членов, если не перегружен оператор сравнения.

D как улучшенный C

Это просто перевод.

D как улучшенный C

По умолчанию все проверки убираются из релизной версии кода, кроме функций, помеченных атрибутом @safe. Но также есть опция компилятора -boundscheck, которая позволяет настроить желаемое поведение.

Life in the Fast Lane

Это не лень каких-то разработчиков, а требования рынка. Время, которое вы тратите на ручное управление памятью — это время, которое вы могли потратить на разработку новых фич. Поэтому и имеем то, что имеем.


С другой стороны, так ли это плохо? Мы можем сколько угодно смеяться над программами на Электроне, но я боюсь, что мире, в котором был бы только C — это мир, в котором бы просто не было многих программ, которыми мы каждый день пользуемся.


И потом, если для вас превыше всего производительность, то для кого-то на первом месте безопасность и корректность кода. И для них C — корень всех зол, а языки, выполняющиеся в виртуальной машине, — послание с небес.

Важнейшие заблуждения о разработке игр

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

Мне этот абзац показался странным. И действительно, в оригинале читаем:


For example, all fun games share the quality that they change who the player is as the game progresses —that is, by the time you are done, you are a different person than you were when you started, even though that “difference” may just be the fact that you are better at pressing a particular combination of buttons

Сам игрок меняется, а не персонаж!
Большое спасибо, теперь я знаю, что книги в переводе «Питера» покупать ни в коем случае нельзя.

Google Chrome «поедает» рынок браузеров

Оперу он уже таким образом убил, сейчас убивает IE, а потом настанет черёд и Файрфокса.

Google Chrome «поедает» рынок браузеров

их проект вдохновил другие компании на разработку браузеров: Opera, Safari, Edge, Brave.

Ничего, что Опера старше Огнелиса на восемь лет?

Игры не обязаны развлекать

«Идеальный читатель „Поминок по Финнегану“ в конечном счете развлекается не меньше, чем читатель Каролины Инверницио. Ровно столько же. Но по-своему». — Умберто Эко, Заметки на полях «Имени розы»

Российские стартаперы не достигают успеха из-за лени

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

Эффект Зейгарник на практике

Все достижения экспериментальной психологии поставлены под сомнение недавно вскрывшимся кризисом воспроизводимости. Эффект Зейгарник, как и многие другие «открытия», не был толком подтверждён. Что не мешает различным продавцам «секретов успеха» о нём рассказывать.

Vivaldi 1.7 — Тихо! Идёт съёмка…

И с монохромным сглаживанием тогда уж.

Будут ли роботы стоять в пробках?

Почему-то люди отказываются понять, в чём на самом деле состоит причина пробок. Причина в том, что легковой автомобиль — ужасно неэффективное средство передвижения. Никакой автопилот этого не изменит: сама идея использовать огромную железную коробку для перемещения одной человеческой тушки ущербна.
Space required to transport 60 people by car, bas, and bicycle

Ищем и скачиваем непопулярные и старые файлы в интернете

Спасибо, для меня это открытие, что доторрентный файлообмен не только всё ещё существует, но и может выручить, когда торрент бессилен.
У меня несколько лет висела торрент-раздача никому не нужной игры для PS2, скачанная на 99,9%. Не хватало всего одного фрагмента в 1 МБ в одной из частей многотомного архива, и ни один пир с полной раздачей так и не объявился. Попробую, что ли, воспользоваться дедовскими методами, хотя бы из спортивного интереса.


Скрытый текст
Буквально на днях захотелось пересмотреть «Дарью», прочитал про Restoration Project, откопал раздачу на каком-то агрегатора и внезапно в графе «автор раздачи» обнаружил знакомый ник.

Ломаем Android. Как глубока кроличья нора?

P.P.S. Еще один специалист по мобильной ИБ, Justin Case, сказал, что он знает уязвимость, которой подвержены все современные процессоры Qualcomm, но раскрывать её детали он не будет.

Видимо, бережёт лазейку на всякий случай.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность