- 1
Грядет конец PHP
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 116
−1
Грядет конец PHP
В общем вот:
https://www.linux.org.ru/forum/talks/14542930
Компания Rogue Wave, финансовая основа разработки PHP, решила забить на развитие PHP, сосредоточившись на одном конкретном продукте на его основе - Zend Server. Два года назад из нее ушел первый сооснователь Zend. Теперь же... Ядро команды, включая второго сооснователя Zend, уходит из компании. Они заранее написали в своих бложиках обращение с просьбой взять их под свое крыло для разработки ядра PHP 8.
Как-то это мрачновато звучит. Похоже, похапэ-капец настал.
Подробности по-русски на Хабре: https://habr.com/post/426809/
+3
[ '\uD83D\uDC14', '\uD83E\uDD5A' ].sort()
Unicode порешал
https://twitter.com/aBagorn/status/1051286652663025664
Оригинал не влез, ибо:
Application was halted by an exception.
Debug-mode is off.
−1
#include <new>
template <typename Lhs, typename Rhs>
auto replace(Lhs *lhs, Rhs) {
return *new (reinterpret_cast<void*>(lhs)) Rhs{};
}
int main() {
auto f1 = &add;
auto f2 = replace(add, [](int a, int b) { return a - b; });
f1(4, 2);
f2(4, 2);
}
Компилируется, не падает при запуске.
+1
std::size_t fib(const std::size_t index) {
if (index < 3)
return !!index;
std::size_t f2 = 1; // f(n - 2)
std::size_t f1 = 1; // f(n - 1)
std::size_t result = 0;
for (std::size_t i = 2; i < index; ++i)
{
result = f1 + f2;
f1 = f2;
f2 = result;
}
return result;
}
Что Clang вытворяет с несчастной функцией Фибоначчи?
https://godbolt.org/z/2SFUm0
+1
#! /usr/bin/perl
use strict;
use warnings;
my %h1 = (one => 1, two => 2);
my %h2 = (three =>3 , four => 4);
sub h_uno { \%h1 }
sub h_multi {
my %all = (%h1, %h2);
\%all;
}
while (my ($k, $v) = each %{h_uno()}) {
print "k=$k, v=$v\n";
}
# следующий цикл не завершится никогда
#while (my ($k, $v) = each %{h_multi()}) {
# print "k=$k, $v=$v\n";
#}
Один из традиционных подколов собеседований на Perl вакансию.
https://www.linux.org.ru/forum/job/14518840
−9
BOOL ShaderElement::equal(ShaderElement* S)
{
if (nullptr == S && nullptr == this)
return TRUE;
if (nullptr == S || nullptr == this)
return FALSE;
return equal(*S);
}
https://www.linux.org.ru/forum/development/14512625
+2
struct A {
virtual int transmogrify();
};
struct B : A {
int transmogrify() override { new(this) A; return 2; }
};
int A::transmogrify() { new(this) B; return 1; }
static_assert(sizeof(B) == sizeof(A));
int main() {
A i;
int n = i.transmogrify();
// int m = i.transmogrify(); // undefined behavior
int m = std::launder(&i)->transmogrify(); // OK
assert(m + n == 3);
}
Yo dawg, we heard you like kostyli, so we put our kostyli into your kostyli, so that you can use kostyli to support our kostyli!
https://en.cppreference.com/w/cpp/utility/launder
А если серьезно, мне еще не удалось соорудить пример, чтоб код с std::launder и без него работали по разному.
+1
/* Get LDAC handle */
LDACBT_API HANDLE_LDAC_BT ldacBT_get_handle( void )
/* Free LDAC handle */
LDACBT_API void ldacBT_free_handle( HANDLE_LDAC_BT hLdacBT )
/* Close LDAC handle */
LDACBT_API void ldacBT_close_handle( HANDLE_LDAC_BT hLdacBT )
/* Get ERROR CODE */
LDACBT_API int ldacBT_get_error_code( HANDLE_LDAC_BT hLdacBT )
/* Get Configured Sampling frequency */
LDACBT_API int ldacBT_get_sampling_freq( HANDLE_LDAC_BT hLdacBT )
СОНЭ умеет в комментарии.
https://android.googlesource.com/platform/external/libldac/+/master/src/ldacBT_api.c
+1
class TaxStorage {
public:
using TaxCode = Code<3>; // Code<int N, typename Storage = uint32_t> тип для маленьких строк
using TaxType = Code<3>;
using TaxId = std::tuple<TaxCode, TaxType>;
using TaxMap = std::map<TaxId, int>
using CityId = int;
using TaxPointMap = std::unordered_map<CityId, TaxMap>;
TaxMap forCityOrOther(const TaxPointMap& map, const CityId cityId) const {
const auto found = map.find(cityId);
return found == map.cend() ? map.at(OTHER_CITY) : *found; // должно быть found->second
}
}
Dev: Ok GCC, tell me what is wrong.
GCC: /home/whatever/project/TaxStorage.h:102: error: incompatible operand types ('const std::unordered_map<int, std::map<std::tuple<Code<3, unsigned int>, Code<3, unsigned int> >, std::vector<unsigned long, std::allocator<unsigned long> >, std::less<std::tuple<Code<3, unsigned int>, Code<3, unsigned int> > >, std::allocator<std::pair<const std::tuple<Code<3, unsigned int>, Code<3, unsigned int> >, std::vector<unsigned long, std::allocator<unsigned long> > > > >, std::hash<int>, std::equal_to<int>, std::allocator<std::pair<const int, std::map<std::tuple<Code<3, unsigned int>, Code<3, unsigned int> >, std::vector<unsigned long, std::allocator<unsigned long> >, std::less<std::tuple<Code<3, unsigned int>, Code<3, unsigned int> > >, std::allocator<std::pair<const std::tuple<Code<3, unsigned int>, Code<3, unsigned int> >, std::vector<unsigned long, std::allocator<unsigned long> > > > > > > >::mapped_type' (aka 'const std::map<std::tuple<Code<3, unsigned int>, Code<3, unsigned int> >, std::vector<unsigned long, std::allocator<unsigned long> >, std::less<std::tuple<Code<3, unsigned int>, Code<3, unsigned int> > >, std::allocator<std::pair<const std::tuple<Code<3, unsigned int>, Code<3, unsigned int> >, std::vector<unsigned long, std::allocator<unsigned long> > > > >') and 'const std::pair<const int, std::map<std::tuple<Code<3, unsigned int>, Code<3, unsigned int> >, std::vector<unsigned long, std::allocator<unsigned long> >, std::less<std::tuple<Code<3, unsigned int>, Code<3, unsigned int> > >, std::allocator<std::pair<const std::tuple<Code<3, unsigned int>, Code<3, unsigned int> >, std::vector<unsigned long, std::allocator<unsigned long> > > > > >')
ДОКОЛЕ?!!
+3
Чего такого умеют кресты, что не умеет Си?
Шаблоны - никто не пользует.
Перегрузка операторов - вообще дурь какая-то: не понятно чего ожидать от полюса или минуса.
Очевидный ответ - объекты , а так уж они нужны? Ну вот есть объект - библиотека работы с сокетами. Создал экземпляр, заполнил поля с адресом и портом, выполнил метод connect. Попользовался, освободил память. И чем оно лучше, чем если бы я запилил структуру и набор функций для работы с ней?
За скобки вынесем области применения, где преимущества объектного подхода очевидны: игры, ГУЙ и прочее. Поговорим об остальном.
Псто не мое.
Заходите на "огонек": https://www.linux.org.ru/forum/development/14396202