@LukEEE: odpowiedź to użycie biblioteki ncurses i przejęcie konsoli. Wiem że był tam jakiś problem ze sprawdzaniem czy wciśnięto ESC czy Alt ale może ci wystarczy.
Inna sprawa to po kiego wała? Aplikacje pod linuksem używają sygnałów do obierania komunikatów od systemu. Do zatrzymania aplikacji klawiszami CTRL-C służy SIGINT oraz SIGTERM gdy ktoś zamknie konsole wystarczy je obsłużyć ustawiając flagę że pętla logiki biznesowej miała się zatrzymać.
Taka aplikacja nie zawsze
@JakTamCoTam qt jest spoko póki nie trzeba skompilować projektu z inną wersją. Np w wersji 5.xx pojawiły się zmiany w interfejsie i jeżeli pisało się coś na <5.10 i próbuje przekompilować na >5.10 to jest dramat
via Wykop Mobilny (Android)
  • 1
@Czokowoko: na linkedinie można też zrobić ewaluację, czyli masz 15 różnych pytań abcd na które masz 1,5 minuty w których pytania są różnorodne i nieraz ze szczegółów. Jak zdobędziesz powyżej 70% to dostajesz odznakę na profil. Czy coś to daje? Nie wiadomo
Mam pytanko: jaki jest sens porównywania wydajności języków kompilowanych jak Rust czy C++ jeśli często korzystają z tego samego kompilatora? Skąd miałaby się brać różnica w wydajności?
Z tego co widzę to domyślny kompilator Rusta wykorzystuje LLVM, a do C++ przecież też jest Clang na LLVM. Więc dlaczego sam język miałby sprawiać że jeden czy drugi kod maszynowy będzie szybszy?
Czy chodzi o to że jakiś język w lepszy sposób wyraża pewne
Czy chodzi o to że jakiś język w lepszy sposób wyraża pewne założenia dla kompilatora i ten może poczynić więcej optymalizacji?


@Passer93: tak. Np. w Ruscie nie masz problemów z aliasowaniem, przez co kompilator może czasem poczynić optymalizacje niemożliwe w innym wypadku. W innych wypadkach frontend może wypluć kod lepszej jakości, który będzie łatwiej przełknąć w backendzie. Ogólnie w takich językach starasz się porównać wydajność idiomatycznego kodu, bo to taki chcesz
@Passer93:

1. brandzlowanie się do minimalnych różnic wydajności między językami i kompilatorami kiedy przepisanie kodu z lepszymi strukturami danych i unikając cache miss często przyśpieszy go 1000-krotnie jest bez sensu. Jak chcesz mieć szybki kod to zastanów się jakie operacje będziesz wykonywał i jak zaprojektować struktury danych żeby te operacje nie ruszały dużych obszarów pamięci. A potem puści profiler i zoptymalizuj co większe hotspoty.

2. jeśli już wchodzimy w kwestie różnych
@kisiak ja mam taki luźny pomysł, nie wiem co tam programujesz w tym cpp ale proponuję przesiąść się na jakiś język skryptowy i po problemie. Nie będzie się wywalać podczas kompilacji. Nie musisz dziękować! ( ͡° ͜ʖ ͡°)
@kisiak: Uzyj GetModuleHandleA lub wide stringa. Btw co to za #!$%@? bzdurny warning? Problem z grubsza sprowadza sie do rozmiaru pojedynczego znaku w typie stringa, zadna z sugestii (reinterpret_cast, C style cast ani function cast) tam nie zadziala...
@0d27c4e9064f628adbc99e547a23306e: Tak o ile zdefiniujesz poprawny operator przenoszenia (move assigment). Zazwyczaj to domyślny operator przenoszenia korzysta z konstruktora przenoszącego.
Ale generalnie jest bardzo głupie, po za tym nie inicjalizujesz pól a wywołujesz clear(); co prawdopodobnie jest błędem.
Jezeli natomiast korzystasz z std::unique_ptr to one są zawsze poprawnie zainicjalizowane, a i domyśny move constructor zrobi to co będziesz chciał.
Dlaczego się wszędzie mówi że argumenty funkcji sa przekazywane przez stos, skoro nie są?
Czytam sobie specyfikację SystemV ABI dla AMD64 i w części 3.2.3 jest napisane:

2. If the class is INTEGER, the next available register of the sequence %rdi,%rsi, %rdx, %rcx, %r8 and %r9 is used.
Hmm, napisałem więc prostą funkcję i sprawdzam w asm jej wywołanie:

mov edi, 23
call square(int)

a po stronie samej funkcji:

mov DWORD PTR
@Passer93: przenośne architektury będą miały raczej coś w stylu - staramy się przez rejestry póki są wolne rejestry, resztę argumentów przez stos. W ten sposób Linux na jednej platformie przekazuje x argumentów przez rejestry na drugiej y.
Jeżeli uważasz że nie ma funkcji która w normalnych zastosowaniach przyjmuje więcej argumentów niż cpu ma rejestrów to popatrz chociażby na printf.
@Passer93: o ile pamiętam to fastcall jest akurat przypadkiem specjalnym i jest skodyfikowany w windowsowym abi. obiekty mają też zapewne flagę mówiącą że dany symbol jest fastcallem coś jak far pointery w niektórych architekturach embedded (tam ustawiany jest najstarszy bit adresu i to magicznie czyni wartość specjalną).
Mam napisany taki aktualizator plików w cpp. Program łączy się z serwerem, porównuje listę plików lokalnych z tymi na serwerze, jeśli jakieś sie różnią to pobiera nowe z serwera.

Od jakiegoś czasu jak skompiluje exeka to defender wykrywa to jako wirus, muszę pisać do MS że to false-positive po czym oni każą zaktualizować defendera i już nic nie wykrywa, mimo to za każdym razem tak robić po kompilacji jest to uciążliwe. Idzie
Witam, mam taką rozkminę.
1. Na ile przydatny jest cache procesora (L1, L2, L3) skoro na jednym rdzeniu działają setki procesów? Przecież poza docelowym programem działa też również sam system który spawnuje mnóstwo procesów. Na ile instrukcji wystarcza jeden slot czasowy na CPU zanim zostanie przełączony na inny proces? 10? 100? 1000? 10000? Czy jak nastąpi przełączenie i się dzieje context switching to wszystkie cache lecą do kosza? Co z TLB ?