Pull to refresh
1
0
Send message

Как мы перешли со Scala на Go

Reading time 6 min
Views 44K
Перевод статьи технического директора компании CrowdStrike, о том, как и почему они перешли со Scala на Go по мере роста компании с 5 до 200+ человек.

Scala долгое время была частью стека нашей компании CrowdStrike, по сути даже главным языком. Я помогал внедрять Scala когда мы начали разрабатывать наш софт в 2012-м году. На самом деле, это было даже одной из главных причин моего перехода в CrowdStrike. Несколько основных разработчиков были заинтересованы во внедрении Scala, так что это был хороший вариант для всех.

Я перешёл из компании Gravity, которая достаточно активно использовала Scala. Это был основной язык в компании. Я привык к нему, мне он нравился, я видел его мощь и был уверен, что смогу предотвратить некоторые из сложностей, которые я видел в Scala, по мере того, как CrowdStrike будет расти. Мы делали высоконагруженную аналитику, batch-задачи на Hadoop и наш Chief Architect (привет, Биссел!) использовал лямбда-архитектуру задолго до того, как это стало модно.

Недавняя цитата от одного из наших senior-разработчиков заставила меня таки написать этот пост, описывающий, почему мы перевели большую часть нашего стека на Go, и почему новые сервисы мы по-умолчанию теперь пишем именно на Go.
Читать дальше →
Total votes 75: ↑50 and ↓25 +25
Comments 300

Неконстантные константные выражения

Reading time 24 min
Views 39K
// <какой-то код>
 
int main ()
{
        constexpr int a = f ();
        constexpr int b = f ();
 
        static_assert (!= b, "fail");
}

Можно ли в приведенном выше фрагменте вместо комментария вставить такое определение f (), чтобы a получила значение, отличное от b?

“Разумеется, нет!” — скажете вы, немного подумав. Действительно, обе переменные объявлены со спецификатором constexpr, а значит, f () тоже должна быть constexpr-функцией. Всем известно, что constexpr-функции могут выполняться во время компиляции, и, как следствие, не должны зависеть от глобального состояния программы или изменять его (иными словами, должны быть чистыми). Чистота означает, что функция при каждом вызове с одними и теми же аргументами должна возвращать одно и то же значение. f () оба раза вызывается без аргументов, поэтому должна оба раза вернуть одно и то же значение, которое и будет присвоено переменным a и b… правильно?

Еще неделю назад я знал, что это правда, и действительно думал, что невозможно пройти static_assert в приведенном выше фрагменте, не допуская неопределенного поведения.

Я ошибался.
Увиденное под катом уже не развидеть
Total votes 61: ↑57 and ↓4 +53
Comments 28

Четно-нечетная сортировка слиянием Бэтчера

Reading time 4 min
Views 25K

Введение


Алгоритм четно-нечетной сортировки слиянием (odd-even mergesort) был разработан Бэтчером в 1968 году. Алгоритм не слишком популярный и не слишком известный. Однако он достаточно легко параллелится и его реализация не слишком сложна. Лично я узнал о нем когда разбирался с MPI и увидел тестовое задание на coursera: написать сортировку Бэтчера.
Читать дальше →
Total votes 15: ↑12 and ↓3 +9
Comments 4

Введение в функциональное программирование на Python

Reading time 10 min
Views 152K
Рассуждая о функциональном программировании, люди часто начинают выдавать кучу «функциональных» характеристик. Неизменяемые данные, функции первого класса и оптимизация хвостовой рекурсии. Это свойства языка, помогающие писать функциональные программы. Они упоминают мапирование, каррирование и использование функций высшего порядка. Это приёмы программирования, использующиеся для написания функционального кода. Они упоминают распараллеливание, ленивые вычисления и детерменизм. Это преимущества функциональных программ.

Забейте. Функциональный код отличается одним свойством: отсутствием побочных эффектов. Он не полагается на данные вне текущей функции, и не меняет данные, находящиеся вне функции. Все остальные «свойства» можно вывести из этого.

Нефункциональная функция:

a = 0
def increment1():
    global a
    a += 1


Функциональная функция:

def increment2(a):
    return a + 1


Вместо проходов по списку используйте map и reduce
Читать дальше →
Total votes 33: ↑30 and ↓3 +27
Comments 51

QIWI терминалы. Тёмная сторона Луны

Reading time 15 min
Views 211K
Шёл 2013-й год. Я тихо занимался ремонтом компьютеров в сельской местности. Гоняя чаи и закусывая сезоном очередного сериала. Как-то раз мой начальник предложил заняться платёжными терминалами. Ему их практически даром отдавал знакомый предприниматель, плюс предлагал устанавливать в его же магазинах на безвозмездной основе. Они, кстати, там же и стояли, просто их хозяину надоело с ними возиться.

Вначале я был против них, нужно будет мотаться, попу отрывать от теплого кресла. Да и вообще, я считал возни будет много, а прибыли ноль. Так как они выгодны только владельцам магазинов для привлечения клиентов. А шеф грезил о миллионах, он уже несколько раз видел, как из них достают толстенные пачки денег. Сказал, что внутри там то же железо, что и на обычных компах, и тот же Windows.
— Ты же можешь это делать.
— Ну да.
— Ну и всё тогда, зарплату отдельно будешь получать.

Возразить было нечего, к тому же у меня уже был опыт поддержки подобной системы Windows XP, VPN, файло-помойка, плюс один удаленный клиент на wi-fi, где было важно, чтобы компьютер всегда был включен и доступен.
Читать дальше →
Total votes 196: ↑143 and ↓53 +90
Comments 177

9 фактов, которые знают программисты, и не знают все остальные

Reading time 3 min
Views 190K
image

Факт 1


Под капотом самых критичных программ, которые вы используете на ежедневной основе (Mac OS X или Facebook) содержится ужасное количество хаков и костылей, которые с трудом уживаются друг с другом. Это как если бы вы разобрали боинг 747 и увидели, что топливопровод держится вешалкой для одежды, а шасси смотаны изолентой.

Бен Черри
Читать дальше →
Total votes 237: ↑164 and ↓73 +91
Comments 88

Information

Rating
Does not participate
Location
Россия
Registered
Activity