Обновить
155
Григорий@bfDeveloper

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

0,2
Рейтинг
18
Подписчики
Отправить сообщение
Справедливости ради отмечу, что под линуксом GDC действительно сгенерировал 10 мегабайт. Но gdc сейчас во многом отстаёт, вон и версия языка только 2.066.
Свежий LDC сгенерировал 645 килобайт. Много, но я не пытался ничего ужимать. Думаю, что тут как и у Rust пожмётся выкидыванием лишнего.
Не надо бросаться камнями в D, не проверив на хоть сколько-то актуальной версии. На Win7 64-bit с DMD 2.070.0 helloworld занимает 200 килобайт. Без ключей, без конфигов. Если заморочиться размером, то можно не отставать от C. Вот, например, helloworld в 438 байт: http://forum.dlang.org/thread/qcbicxrtmjmwiljsyhdf@forum.dlang.org
с lvalue gcc говорит, что
error: call of overloaded 'bar(int&)' is ambiguous
bar(a);
^

Потому что обе сигнатуры — одно и то же для перегрузок. То есть всё работает, но ошибка совсем не информативна.
P.S. Лучше воспользоваться не =delete, а static_assert (false, «lvalue is not supported»);
Божественно. Особенно радует, что это не экран шаблонного кода, а вполне вменяемые 2 строки. Удачно отделяется концепт с условием от определения самого метода. Всё таки даже без концептов С++11 силён.
Долго соображал над конструкцией typename = std::enable_if_t<...>. Я правильно понял, что это просто безымянный аргумент шаблона для using? А то на первый взгляд выглядит как специальный синтаксис.
С тем количеством динамики, которое заложено в JS и, соответственно, в TS, получится медленнее, чем V8. Не вижу потенциала для ускорения. V8 и так компилит всё, что возможно. Можно попробовать с потерей динамики, то есть в рамках абстракций TS, но не уверен, что это будет достаточно понятно, гибко и быстро.
Вот возможность писать плагины к ноде на D не помешала бы. Это и сейчас возможно, просто не удобно, много рутины на стыке C++ и D.
Вам не верят те, кто тоже компилировал свои проекты и сравнивал. Для веба действительно не так заметно, там больше libevent работает, но имеет смысл проводить более чистый эксперимент. В реальном коде будет что оптимизировать, и тогда выбор компилятора будет вносить существенный вклад.
И всё-таки хочется конкретных опций компилятора (inline, O3, nobounds-check вкл или выкл).
P.S. минус не мой, не подумайте.
Меня тоже вначале удивляло процедурно-функциональное API. Но если понять и принять идею, то фобос очень удобен. Особенно это касается диапазонов (ranges), которые однозначно лучше всего, что я видел в других языках. Может быть поначалу и непонятно, зато отличное соотношение удобство/производительность.
И кто же тут нытик? Вы осуждаете человека, рискующего жизнью, и сами ноете из-за одного минуса.
Справедливости ради, сейчас все используют ручку, потому что карандаш это небезопасно.Графитовая пыль проводит ток и может оседать в невероятных местах. Так что не зря разрабатывали ручку.
P.S. kekekeks опередил
Простите, а о чём пост? Космонавтика — тема гиктаймса. Просто ссылка на поставщика железок, работающих на марсе? Два абзаца текста, один из которых копипаст с вики, второй про рекламируемую технологию. Очень нехорошо эксплуатировать марсаход для привлечения людей в абсолютно пустую статью.
20-и кратный бинокль это перебор. В качестве обзорного бинокля используют 7 или 10 крат. Даже 10х сильно дрожит в руках и наблюдать сложновато. Важнее увеличения апертура, а точнее диаметр зрачка. Если взять бинокль 20х с апертурой 20, то вы вообще ничего не увидите, так как область обзора ничтожно мала, а линза 20мм собирает слишком мало света. Самое хорошее — 7х или 10х с апертурой 50. Шире 50/7 = 7 миллиметров зрачок глаза нигде не откроется, так что светосила будет максимальная. У меня 10х50, можно различить спутники Юпитера, красиво выглядит луна. Так же это хороший обзорный бинокль в пару к телескопу.
Спасибо за статью, позволю себе немного покритиковать код.
#define LN_ONE          16  // 00010000 клетка закрашена, но линия ч/з нее не проходит. для клеток с числом 1

Перестаньте объявлять константы дефайнами. В С++ есть const, который нормально живёт в неймспейсах, имеет нормальные области видимости и права доступа и вообще является хорошим стилем против плохого препроцессора.
Флаги лучше объявлять через операторы побитовго сдвига или через литералы
Разнообразные объединения флагов лучше писать через побитовое или, например:
const size_t TOP_LEFT = TOP | LEFT;

У вас случай посложнее, но всё равно прослеживается логика. Не зря же написаны эти комментарии с бинарным представлением. Гораздо лучше чтобы вместо объяснений был код с подобным уровнем пояснений.
Самые обыкновенные. 50 км проходит почти любой человек с первого раза, прогрессировать не так сложно. А вот супербатарейки у людей из рекордов: https://ru.wikipedia.org/wiki/Суточный_бег
Налегке с бутылкой воды и минимумом еды. По городу, а не пересечёнке, чтобы можно было в любой момент сойти с маршрута, магазины на всякий случай и тд. По факту больше 74 не ходил, но очень хочется в этом году добиться 100км за сутки.
Очень полезная фича. По Москве очень часто непонятно, как перейти железную дорогу, ТТК, МКАД и тд. Всегда, когда планировал длительные прогулки (50-80 км) это было основной головной болью. Возможно уже на этих выходных попробую на маршруте километров в 50.
пишите в саппорт, потом просите кого-то постарше. Мне отключили в мобильном, и при раздаче интернета с него в том числе.
http://code.dlang.org/packages/libhttp2
Модуль в активной разработке, сейчас идёт его интеграция в vibe.d.
Так что прямо сейчас http2 нет, но скоро будет.
Для чего-то важного и популярного типа libcurl есть свои реализации. Тот же vibe.d. Там есть даже свой event loop, оборачивающий kqueue, epoll и win32 в общий интерфейс, называется libasync. А некоторые вещи лучше вообще не переписывать, например OpenGL. Его лучше максимально дёшево слинковать.
Ещё ABI очень важен для редких задач. Упомянутый мной выше co2mon из питона и node.js люди используют стартом отдельного процесса, с которого берут stdin и stdout. Это действительно наиболее простое решение для них. А D просто линкует библиотеку, зовёт функцию и получает данные.
D позволяет решать действительно сложные и редкие задачи просто, а Go простые задачи очень просто.
Здесь всё зависит от задач и от программистов. Те, кто писал сайтики на php могут продолжить заниматься этим на Go. Те кто закапывался в алгоритмы и оптимизации в C++ радуются D.
везде можно использовать C, C++,

Как много языков имеют ABI совместимость с C и C++, не требуют никаких прослоек, используют совместимые типы и не внедряются в систему сборки?
В каком языке вы можете просто слинковать существующую системную библиотеку и начать использовать, не подключая всяких биндингов? Мне, например, для использования простой библиотеки потребовалось всего-лишь описать её интерфейс в .di файле. Это заняло не больше, чем клон самой библиотеки с гитхаба. Для более сложных случаев есть специальная утилита htod. И нет, это не автогенератор прослоек или биндингов, это просто генератор заголовков для использования из D. Никаких накладных расходов, никаких преобразований типов.
Я видел, что предлагает Rust, знаю как пишутся плагины для node.js, активно использовал JNI, на работе пишу XS для perl, и поверьте, удобнее, чем из D c C и C++ взаимодействуют только С и С++.
jin.go — отличная библиотека, но всё же select не получился. Приведённый в статье пример очень так себе. Гораздо лучше с задачей селекта справляются обычные D сообщения. С сообщениями можно писать так:
receive(
    (int val) {

    },
    (double val) {

    },
    (int i, double d) {

    },
    (MyStruct s) {

    }
);

Тогда из другой задачи можно писать
tid.send(42);
tid.send(3.14);
tid.send(10, 10.0);
tid.send(MyStruct(args));

Основной недостаток в том, что сообщение отправляется задаче, а не в некий канал. Передача данных реализуется через передачу владения, что быстро и безопасно. Просто не выглядит как поток или канал.

Информация

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