πŸ¦– Айти Вудэй πŸ¦₯
8.55K subscribers
14.9K photos
793 videos
18 files
2.01K links
Авторский Π±ΡƒΡ‚ΠΈΠΊ Π°ΠΉΡ‚ΠΈ ΠΌΠ΅ΠΌΠΎΠ² ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ
Всё самоС ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΠΏΠΎ тэгу #Π΄Π΅Π³Ρ€Π°Π΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠΏΡ€ΠΈΡˆΡ‘Π»

Π Π°Π·Π±Π°Π½ https://t.me/ithueti/18131

Π€ΡƒΡ‚Π±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΈ Ρ‡Π°Ρ‚ для своих http://ithueti.club

Π Π΅ΠΊΠ»Π°ΠΌΠ°: http://ithueti.club/ad / https://telega.in/c/ithueti
Download Telegram
Π’ соврСмСнном Π‘++ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ:
std::for_each(threads.begin(), threads.end(), std::mem_fun_ref(&std::thread::join));

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€ΡƒΡ‚ΠΎ, ΠΌΡ‹ пишСм Π² Π±Π»ΠΈΠ·ΠΊΠΎΠΌ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ стилС ΠΈ читаСтся это ΠΊΠ°ΠΊ настоящий язык: для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π²Ρ‹Π·ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎ ссылкС - ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΈ я ΠΏΠΈΡˆΡƒ свой ΠΊΠΎΠ΄ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅.

А ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ, ΠΌΠ΅Ρ€ΠΊΠΎ, ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎ, ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ:
for(auto& t: threads)
t.join();

Π’Π°ΠΊ я ΠΏΠΈΡˆΡƒ свой ΠΊΠΎΠ΄ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅ послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»ΠΈΠ» Ρ‚ΠΎΡ‚, Ρ‡Ρ‚ΠΎ написал сначала.
Воистину, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° php Π² 2019
Forwarded from Hermitage
RPCS3, эмулятор PlayStation 3 ΠΏΠΎΠ΄ PC (Windows/Linux), Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ развиваСтся β€” ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π°ΠΉΡ‚Π» Metal Gear Solid 4. Π˜Π³Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ состоянии, Π½ΠΎ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ графичСскиС Π±Π°Π³ΠΈ ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹. Π•ΡΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ΄Π°, Ρ‡Ρ‚ΠΎ это Ρ€Π΅ΡˆΠ°Π΅ΠΌΡ‹Π΅ Π±Π°Π³ΠΈ эмуляции GPU ΠΈ Π² блиТайшСС врСмя ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ устранСны. Π—Π°Π±Π°Π²Π½ΠΎ, Π½ΠΎ эмулятор ΡƒΠΆΠ΅ позволяСт ΡΠ½ΡΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π² 30fps ΠΈ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π½Π° 60fps.
https://twitter.com/ericniebler/status/1167172402184216576

Π­Ρ€ΠΈΠΊ НиблСр ΠΆΠ°Ρ€ΠΈΡ‚ Π²Π°Ρ‰Π΅ Π°Π΄ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π°ΠΆ врСмя компиляции отклСиваСтся.

Для этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° это 4.5 сСкунды с использованиСм clang.
Π― сСйчас Π² шокС, Π½ΠΎ ΡƒΠΆΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΡ‚ΠΎΡˆΠ΅Π».

Π’Ρ‹ΡΡΠ½ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ всС это врСмя Π² Π‘++ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ‚Π°ΠΊ
#include <iostream>
int main() {
size_t size;
std::cin >> size;
int array[size];
}

Π’.Π΅. ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ массив динамичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° стСкС! Π’ΠΎΡ‚ Ρ‚Π°ΠΊ просто! А я ΠΊ Π•Π“Π­ готовился ΠΈ new/delete осваивал, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ Π·Π°ΠΊΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ.

Π§ΡƒΡ‚ΡŒ Π»Π΅Π³Ρ‡Π΅ ΠΌΠ½Π΅ стало, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½Π΅ сказали, Ρ‡Ρ‚ΠΎ всС-Ρ‚Π°ΠΊΠΈ это Π½Π΅ ΠΏΠΎ стандарту.

Π― ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Π» ΠΊΡƒΡ‡Ρƒ компиляторов ΠΈ вСрсий языка - ΠΌΠΎΠΆΠ½ΠΎ! Волько clang 3.2 сдался, Π° g++ Π½ΠΈΠΆΠ΅ 4.1.2 Π½Π΅ нашСл.

А ΠΏΠΎΡ‚ΠΎΠΌ я добрался Π΄ΠΎ msvc ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Π» Π·Π°Π²Π΅Ρ‚Π½ΠΎΠ΅
error C2131: expression did not evaluate to a constant

Π― Π΄ΠΎ 2018 Π³ΠΎΠ΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ msvc пользовался ΠΈ Π·Π½Π°Ρ‚ΡŒ Π½Π΅ Π·Π½Π°Π» какая ΠΆΡƒΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ. МнС Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΈΡ‚ΡŒ.
БСгодня Π·Π°Π΄Π°Ρ‡ΠΊΠ° ΠΏΠΎ Π‘++, вопрос простой - Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ? Если хочСтся ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ сначала ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄, Π²Ρ‹ΡΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π² коммСнтариях, Π° ΠΏΠΎΡ‚ΠΎΠΌ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ дальшС.
#include <iostream>
#include <memory>
#include <thread>

class Base{
public:
virtual ~Base() {
thread.join();
}

void proc() {
thread = std::thread(&Base::foo, this);
}

virtual void foo() {
std::cout << bar() << std::endl;
}

virtual std::string bar() = 0;

std::thread thread;
};

class Child : public Base
{
public:
std::string bar() override { return "Child"; }
};

class Derived : public Base
{
public:
std::string bar() override { return "Derived"; }
};

int main()
{
auto c = std::make_unique<Child>();
auto d = std::make_unique<Derived>();
c->proc();
d->proc();
}

Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ g++ -O3 -pthread main.cpp ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° Π²Ρ‹Π·ΠΎΠ²Π΅ чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Наша рСдакция ΠΏΡ€ΠΈΠ±Π΅Π³Π»Π° ΠΊ ΠΏΠΎΠΌΠΎΡ‰ΠΈ спСциалистов ΠΈ ΠΏΡƒΡ‚Π΅ΠΌ Π½Π΅Ρ…ΠΈΡ‚Ρ€Ρ‹Ρ… манипуляций внСсла измСнСния Π² ΠΊΠΎΠ΄
virtual std::string bar() { return "Base"; };

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π²ΠΎΠ΄, казалось Π±Ρ‹, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½, Π½ΠΎ Π½Π΅Ρ‚:
Derived
Base

ΠŸΠ΅Ρ€Π΅Π±Ρ€Π°Π² нСсколько компиляторов ΠΈ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ, всС Ρ‚Π°ΠΊΠΈ стало понятно, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚
Base
Base


И я ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡΡŒ: "Π“Π΄Π΅ ΠΌΠΎΠ΅ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ связываниС, ̢Л̢С̢б̢о̢в̢с̢к̢и̢ ?"
На Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ Ρ€Π΅Π·ΠΎΠ½Π½ΠΎΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Ρ… спСциалистов ΠΈΠ· ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ: "А, собствСнно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ? Π’Ρ‹ Π² дСструкторС ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΡˆΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, наслСдник ΡƒΠΆΠ΅ ΠΌΠ΅Ρ€Ρ‚Π² Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚".

class Base{
public:
virtual ~Base() = default;
void wait() { thread.join(); }
...
};

class Child : public Base
{
public:
~Child() { wait(); }
std::string bar() override { return "Child"; }
};

class Derived : public Base
{
public:
~Derived() { wait(); }
std::string bar() override { return "Derived"; }
};

Π’.Π΅. ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ€Π°Π·Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² мСнялись Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ… Π²Π΅Π·Π»ΠΎ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π΅ Π²Π΅Π·Π»ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π°.

Π’ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΎΡ‚ способ Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ сСбС Π² Π½ΠΎΠ³Ρƒ с Π΄Π²ΡƒΡ… ΜΆΡ€ΜΆΡƒΜΆΠΊΜΆ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².