
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Страницы: (56) « Первая ... 3 4 [5] 6 7 ... 55 56 ( Перейти к последнему сообщению ) |
![]() |
Сообщ.
#61
,
|
|
Цитата applegame @ Никто не мешает разбить код на отдельные модули для каждой платформы, а затем при помощи version импортировать уже нужные части в зависимости от платформы сборки. Ну т.е. в итоге получится тоже самое, что и в Go, только с добавочным костылем в языке, ОК. Цитата D_KEY @ А если у меня зависимость от версии ОС, архитектуры, конкретной POSIX'овой или SUS-константы? Если у тебя какие-то сложные правила сборки, то ты всегда можешь воспользоваться make. В большинстве случаев этого достаточно: http://golang.org/pkg/go/build/ Кстати, что за POSIX/SUS-константы? |
Сообщ.
#62
,
|
|
|
Цитата OpenGL @ Кстати, что с ними в D? Считал, что там есть нормальные деструкторы как в плюсах. Это неверно? Есть там деструкторы, но классические плюсовые деструкторы с GC не уживаются, ибо он недетерминирован. Я когда книжку читал, был разочарован. Сейчас уже забыл за ненадобность. Могу потом написать, когда добирусь до дома и открою книгу. Или вон D_KEY может вспомнить - он тоже читал. |
Сообщ.
#63
,
|
|
|
Цитата D_KEY @ Внезапно, версия ОС важна для системы, на которой запускается проект, а не на которой собирается, а значит это не может входит в задачи ни системы сборки, ни компилятора. Это параметры задаваемые вручную при помощи соответствующих ключей.Внезапно, в разных версиях могут быть разные API(если мы о винде) или разная степень и подход к реализации стандартов(если мы о *nix). Задача системы сборки проверять наличие нужных библиотек и модулей, а не сообщать исходному коду тип платформы, так как тип платформы всегда известен компилятору. Добавлено Цитата korvin @ Это смотря с какой стороны смотреть. С одной стороны костыль, с другой стороны гибкость. Кроме того version позволяет условно компилять не только в зависимости от платформы, но и как классический #ifdef в зависимости от аргументов командной строки, или в зависимости от режима debug/release и т.п. Ну т.е. в итоге получится тоже самое, что и в Go, только с добавочным костылем в языке, ОК. Добавлено Для объектов созданных с помощью new (читай классов) деструкторы практически бесполезны, так как действительно не детерминированы, то бишь вызываются, когда приспичит GC, причем в одному ему ведомом порядке. Для объектов создаваемых на стеке (читай структур) деструкторы детерминированы и работают аналогично плюсовым. Поэтому на базе структуры можно создать аналог shared_ptr, который будет вызывать деструктор уже вполне детерминировано. |
![]() |
Сообщ.
#64
,
|
|
Цитата applegame @ зависимости от платформы, но и как классический #ifdef в зависимости от аргументов командной строки, или в зависимости от режима debug/release и т.п. Да-да, и снова греп и каша в сорцах... =) |
Сообщ.
#65
,
|
|
|
Цитата applegame @ Внезапно, версия ОС важна для системы, на которой запускается проект, а не на которой собирается, а значит это не может входит в задачи ни системы сборки, ни компилятора. Внезапно, это зависит от проекта. Да и от политики установки программ в ОС. Скажем, порты во FreeBSD собирают софт перед установкой ![]() Добавлено Цитата applegame @ а значит это не может входит в задачи ни системы сборки, ни компилятора. Это параметры задаваемые вручную при помощи соответствующих ключей. Нет, спасибо. Я предпочитаю автоматизацию. Даже разворачивать систему автоматически, при помощи того же ansible, например. Может и это в язык сунуть? ![]() |
Сообщ.
#66
,
|
|
|
Цитата korvin @ А как по другому? Да-да, и снова греп и каша в сорцах... =) ![]() ![]() |
Сообщ.
#67
,
|
|
|
Цитата korvin @ Да-да, и снова греп и каша в сорцах... =) Согласен, кстати. Воюю со всеми, в том числе и с коллегами, пытаясь объяснить, что это всё - задача системы сборки и не должно быть с исходниках. Они же должны быть разложены по директориям, а вместо #ifdef должны использоваться либо порождающие паттерны, либо языковые механизмы типа одного .h и по .cpp на конкретную реализацию. Война проигрывается ![]() |
Сообщ.
#68
,
|
|
|
Цитата D_KEY @ Вообще в D вставлено ровно две вещи: тип OS и архитектура, остальное внешними ключами. Может и это в язык сунуть? ![]() |
Сообщ.
#69
,
|
|
|
Цитата applegame @ А как по другому? Вот, ещё один... Цитата applegame @ Отдельные файлы с исходниками для дебаг-версии, отдельно для релиз? А у вас разный код исполняется в debug и в realese? ![]() |
Сообщ.
#70
,
|
|
|
Цитата MyNameIsIgor @ В релиз версии не выполняются некоторые проверки, которые делаются в дебаг-версии. Так что код, да, слегка различается. А у вас разный код исполняется в debug и в realese? ![]() Добавлено Продолжаем тему используемости D. Вот эта контора - http://www.funatics.de/en/ делающая, насколько я понял браузерные MMO игры, начала миграцию игрового бэкенда с NodeJS на D. |
![]() |
Сообщ.
#71
,
|
|
Цитата applegame @ В релиз версии не выполняются некоторые проверки, которые делаются в дебаг-версии. Так что код, да, слегка различается. Сколько видел библиотек и программ, они все позволяют запускать себя в режиме отладки, дабы, если у пользователя возникнет проблема, он мог ее понятней описать разработчику/мейнтейнеру. Т.е. необходимость этих проверок определяется в рантайме и остается в "релизной" версии. |
Сообщ.
#72
,
|
|
|
Цитата applegame @ В релиз версии не выполняются некоторые проверки, которые делаются в дебаг-версии. Контракты - особая тема. Но и в этом случае условная компиляция должна быть скрыта от программиста. Если проверки не относятся к контрактам, то они должны быть одинаковыми. |
![]() |
Сообщ.
#73
,
|
|
Цитата applegame @ начала миграцию игрового бэкенда с NodeJS на D. Не удивительно, с NodeJS грех не мигрировать. При этом практически не важно на что. Даже Ryan Dahl ненавидит NodeJS. =) |
Сообщ.
#74
,
|
|
|
Цитата korvin @ Да ну? Много ли скажем игр с такой возможностью? Для этих целей сама программа делает краш-репорт. Из релизной версии могут выпиливаться контракты, юниттесты (которые опять же могут лежать в отдельных файлах) или другие проверки. Которые не считаются необходимыми в релизной версии, для которой важна максимальная производительность. Сколько видел библиотек и программ, они все позволяют запускать себя в режиме отладки, дабы, если у пользователя возникнет проблема, он мог ее понятней описать разработчику/мейнтейнеру. Т.е. необходимость этих проверок определяется в рантайме и остается в "релизной" версии. |
![]() |
Сообщ.
#75
,
|
|
Цитата applegame @ Из релизной версии могут выпиливаться контракты, юниттесты (которые опять же могут лежать в отдельных файлах) или другие проверки. Про контракты уже Игорь сказал, юнит-тесты всегда идут отдельно. О каких других проверках речь? Опять же, если от софта требуется надежность, то проверки придется оставлять, если не требуется, то зачем вообще тратить на них время? |