Är det värt att komplettera lite grundläggande OOP i C, istället för att lära sig C++?

Permalänk
Datavetare
Skrivet av heretic16:

Självklart är C++ bättre vid OOP än C. Men jag tänkte bara kolla om det finns ett behov utav funktionspekare i strukturer. Bara för att få till en liten enkel OOP-funktion som man gjorde förr på DOOM och Quake spelen.

Ah, då har du bättre syn än mig. Peka gärna ut i Doom koden var de någonstans använder indirekta hopp (funktionspekare). För en sak spel spelprogrammerare och definitivt embedded-programmerare försökte undvika så mycket det bara gick med CPUer från 1990-2000 talens HW var indirekta hopp. Än idag finns det i extrema fall en klar kostnad med indirekta hopp, var det jag belyste med C vs C++ fallet.

Sättet C++ är designat gör att man långt oftare kan undvika indirekta hopp fast ändå ha hög grad av generalism i koden. Det kommer specifikt av någon C++ (och även Rust) har, men C saknar: stöd för generisk programmering där kompilatorn kraftigt utnyttjar den informationen vid optimering (tar man fallet Java saknas i praktiken dessa optimeringsmöjligheter trots språkstödet).

Skrivet av heretic16:

Jag tror fortfarande att Rust är inte framtiden. Varför?
Rust är säkert ett jätte bra språk. Men dessa fina och goda språk dyker upp hela tiden. Det är bara en tidsfråga innan t.ex. Facebook uppfinner ett nytt språk som anses vara bättre än Rust och då minskar Rust's användare där.
Kvar blir C++ som uppdaterar sitt språk under tystnad.

Fast hur kommer du runt en av dina absolut viktigaste käpphästar, "brett industristöd"? C++ ISO-kommittén är väl medveten om fördelar i Rust, inom ramen för att vara bakåtkompatibel har de senaste versionerna fått rejäla förbättringar på flera områden. Ställd mot t.ex. Java och C# tycker i alla fall jag att man egentligen tätat de relevanta fördelarna som tidigare fanns, t.ex. LINQ brukar lyftas fram som "riktigt coolt" vilket C++20 rätt mycket har fått med "ranges" + sättet C++ kan optimera saker vid kompilering gör att det har potential att bli rejält effektivt.

Men en sak varken C++, C#, Java eller något annat språk kan fixa med mindre än att helt bryta bakåtkompatiblitet är detta

use std::thread; fn main() { let v = vec![1, 2, 3]; let handle = thread::spawn(|| { println!("Accessing 'v' here without explicit synchronization is a data-race, it won't compile in Rust! {:?}", v); }); handle.join().unwrap(); }

use std::thread; fn main() { let v = vec![1, 2, 3]; let handle = thread::spawn(move || { println!("Can access 'v' as ownership is explicitly transfered to this thread {:?}", v); }); println!("Accessing 'v' here is now a data-race as ownership of 'v' moved to a different thread, won't compile in Rust {:?}", v); handle.join().unwrap(); }

Jämför det med C++, och fungerar på exakt samma sätt i C11, C#, Java, Python, Go, etc (men inte JS då stöd för trådar saknas där!!!)

#include <fmt/ranges.h> #include <thread> #include <vector> int main() { std::vector<int> v{1, 2, 3}; std::thread handle{ [&v] () { fmt::print("Compiles just fine with race... {}\n", v); } }; fmt::print("Compiles just fine with race... {}\n", v); handle.join(); }

D.v.s. detta är, än så länge, en unik finess i Rust. Finns språk som har andra lösningar på problemet, t.ex. tror jag Erlang inte heller kan ha race men de löser det på ett betydligt mer ineffektivt sätt.

Och framförallt: C, C++ och Rust är unika i att vara designade som systemspråk, d.v.s. de kan köras helt utan "runtime" vilket är ett krav för att göra OS (och "OS" inkluderar att använda dem direkt på metallen i mikrokontrollers) med dem. Sedan finns varianter av andra språk, finns t.ex. Java med manuell minneshantering samt MicroPython. Men dessa är inte längre standardversioner av resp. språk, de råkar påminna om Java resp. Python. C, C++ och Rust har en "free-standing" variant som del av deras specifikation, är den man kör med för OS etc.

Språk som inte hanterat detta från start har två val: leva med problemet, som är en av de absolut mest kostsamma problem vi har i dagens multi-core värld, eller göra en fork av språket där problemet fixas i en ny och bakåtinkompatibel version. Historien har visat att den typen av fork kan vara förödande, det dödade i praktiken Perl och det tog Python över ett decennium att i någon mån bli av med föregående version.

Vore i praktiken otänkbart för de "stora" språken, d.v.s. C++, C# och Java (JS har som sagt inte just detta problem) att göra en sådan fork. D.v.s. problemet är olösbart där!

Skrivet av heretic16:

Det är inte troligt att förlita sig på några enkla algoritmer för att jämföra C mot C++. Ungefär som fysiker endast befinner sig i linjära dynamiska (matematik) tillstånd för att beräkna på sina formler, utan att ta hänsyn till verkligheten. Jag har kört program gjorda i C och C++ och i praktiken så är dessa program som är gjorda i C, mycket snabbare än program som är gjorda i C++. Jag tycker detta kriteriet räknas.

Inte "Vilket språk gör sortering snabbast?". Detta är irrelevant.

Poängen är inte algoritmen i sig, poängen är att visa typexempel på hur man i vettig C resp. C++ löser den här typen av problem. Och sättet man löser det i C++ leder till att kompilatorn kan göra ett betydligt bättre optimeringsjobb.

Men vore skitkul att lära sig nya infallsvinklar här: då du har egen förstahandsinformation är det ju en smal sak att ge ett eller ett par konkreta exempel. Vill inte tala för andra, men gissar alla som följer tråden skulle uppskatta det

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Ah, då har du bättre syn än mig. Peka gärna ut i Doom koden var de någonstans använder indirekta hopp (funktionspekare). För en sak spel spelprogrammerare och definitivt embedded-programmerare försökte undvika så mycket det bara gick med CPUer från 1990-2000 talens HW var indirekta hopp. Än idag finns det i extrema fall en klar kostnad med indirekta hopp, var det jag belyste med C vs C++ fallet.

Sättet C++ är designat gör att man långt oftare kan undvika indirekta hopp fast ändå ha hög grad av generalism i koden. Det kommer specifikt av någon C++ (och även Rust) har, men C saknar: stöd för generisk programmering där kompilatorn kraftigt utnyttjar den informationen vid optimering (tar man fallet Java saknas i praktiken dessa optimeringsmöjligheter trots språkstödet).
[/qoute]
Jag har för mig att jag har läst på Quora att de som utvecklade DOOM använde sig flitigt utav OOP i C.

[qoute]
Fast hur kommer du runt en av dina absolut viktigaste käpphästar, "brett industristöd"? C++ ISO-kommittén är väl medveten om fördelar i Rust, inom ramen för att vara bakåtkompatibel har de senaste versionerna fått rejäla förbättringar på flera områden. Ställd mot t.ex. Java och C# tycker i alla fall jag att man egentligen tätat de relevanta fördelarna som tidigare fanns, t.ex. LINQ brukar lyftas fram som "riktigt coolt" vilket C++20 rätt mycket har fått med "ranges" + sättet C++ kan optimera saker vid kompilering gör att det har potential att bli rejält effektivt.

Ja. Brett industristöd vinner alltid. Trots att om Rust är bättre än C++, men köparen säger att C++ är bättre. Då är C++ bättre för det är köparen som har pengarna.

Jag har dessutom tittat mer på QT och funderat på att använda detta. Jag tittade nämligen på Blocket Jobb och då faller min profil in på C/C++ utvecklare. Nu har jag inte kört C++ på flera år, så det kanske dags att börja. Nu vet jag att QT har en gratisversion, men jag undrar om jag kan ge någon min kompilerade applikation till någon och dom kan bara klicka på den och då körs den? Jag sökte till och med på Rust och ElectronJS. Inga jobbannonser. Rusta fanns dock

Citat:

D.v.s. detta är, än så länge, en unik finess i Rust. Finns språk som har andra lösningar på problemet, t.ex. tror jag Erlang inte heller kan ha race men de löser det på ett betydligt mer ineffektivt sätt.

Och framförallt: C, C++ och Rust är unika i att vara designade som systemspråk, d.v.s. de kan köras helt utan "runtime" vilket är ett krav för att göra OS (och "OS" inkluderar att använda dem direkt på metallen i mikrokontrollers) med dem. Sedan finns varianter av andra språk, finns t.ex. Java med manuell minneshantering samt MicroPython. Men dessa är inte längre standardversioner av resp. språk, de råkar påminna om Java resp. Python. C, C++ och Rust har en "free-standing" variant som del av deras specifikation, är den man kör med för OS etc.

Tänker du på Java Micro Edition? Den version av Java som är död? MicroPython är leksaker. Som Arduino.

Citat:

Språk som inte hanterat detta från start har två val: leva med problemet, som är en av de absolut mest kostsamma problem vi har i dagens multi-core värld, eller göra en fork av språket där problemet fixas i en ny och bakåtinkompatibel version. Historien har visat att den typen av fork kan vara förödande, det dödade i praktiken Perl och det tog Python över ett decennium att i någon mån bli av med föregående version.

Vore i praktiken otänkbart för de "stora" språken, d.v.s. C++, C# och Java (JS har som sagt inte just detta problem) att göra en sådan fork. D.v.s. problemet är olösbart där!

Poängen är inte algoritmen i sig, poängen är att visa typexempel på hur man i vettig C resp. C++ löser den här typen av problem. Och sättet man löser det i C++ leder till att kompilatorn kan göra ett betydligt bättre optimeringsjobb.

Men vore skitkul att lära sig nya infallsvinklar här: då du har egen förstahandsinformation är det ju en smal sak att ge ett eller ett par konkreta exempel. Vill inte tala för andra, men gissar alla som följer tråden skulle uppskatta det

Python ökar av två anledningar. 1. Maskinlärandet. 2. Universiteten har gått från Java till Python för att spara tid.
När jag var ung så körde alla universitet med Java för det var enklast att hålla på med då. Java Swing var häftigt.

Jag testade Eigen C++ och två for-satser i C för att göra matrixmultiplikation. Min for-loop var snabbare än Eigen's multiplikation.

Permalänk
Datavetare
Skrivet av heretic16:

Ja. Brett industristöd vinner alltid. Trots att om Rust är bättre än C++, men köparen säger att C++ är bättre. Då är C++ bättre för det är köparen som har pengarna.

Fast om du läser just vad Microsoft skriver inser man de ekonomiska värdena i att ha något som Rust. Microsoft sitter på en av världens största C++ kodbaser, så de borde ha lite koll på läget.

Skrivet av heretic16:

Jag har dessutom tittat mer på QT och funderat på att använda detta. Jag tittade nämligen på Blocket Jobb och då faller min profil in på C/C++ utvecklare. Nu har jag inte kört C++ på flera år, så det kanske dags att börja. Nu vet jag att QT har en gratisversion, men jag undrar om jag kan ge någon min kompilerade applikation till någon och dom kan bara klicka på den och då körs den? Jag sökte till och med på Rust och ElectronJS. Inga jobbannonser. Rusta fanns dock

Av ren nyfikenhet: vad är din utbildning och professionella erfarenhet av programmering?

Gällande Rust, min första Google-sökning på jobb där Rust endera används eller kunskap om språket ses som mediterande fick 39 träffar även om man begränsar det till till Stockholmsområdet (och Sverige har en rätt udda profil, inbyggda system är relativt ovanligt här samtidigt som vi har brutal övervikt på .NET jämfört med t.ex. Silicon valley).

Skrivet av heretic16:

Tänker du på Java Micro Edition? Den version av Java som är död? MicroPython är leksaker. Som Arduino.

Python ökar av två anledningar. 1. Maskinlärandet. 2. Universiteten har gått från Java till Python för att spara tid.
När jag var ung så körde alla universitet med Java för det var enklast att hålla på med då. Java Swing var häftigt.

Python används till långt mer än så. Python ersätter idag många former av automatisering som tidigare använde t.ex. Perl, TCL eller BASH (även om jag själv tycker BASH och Python fyller rätt olika nischer).

Givet att ett så stort företag som Facebook utvecklat en större den av en sökmotor i Python (den som de nu skrivit om i Rust) pekar också på att Python används i "back-end".

Inte Java ME, men konceptuellt rätt lika fanns ett tag i VxWorks. Men togs bort, visade sig vara rätt poänglöst. Däremot stöds Python 3, inte micro-versionen utan den "riktiga". Kan inte användas för saker som kräver hård realtid, utan finns precis som i andra fall som klister och för att kunna köra OpenCV, NumPy, TensorFlow etc.

MicroPython är inte en leksak, det finns "riktiga" industriella tillämpningar där det används. Då i microkontrollers som saknar OS, i det läget är microPython miljön "OS".

Beror på vad man menar med Arduino. Menar man HW som Arduino UNO så är det en "leksak", den är ju designad för att man ska labba och lära sig. Menar man Wiring (API:et som används) finns det rätt många produkter på marknaden som använder det. Finns t.ex. rätt många ESP32 baserad IoT prylar som kör Wiring och använder FreeRTOS som OS, jag har flera sådan i sommarstugan. Har byggt flera egna saker med ESP32, men blev lite brydd när jag såg ~20 talet ESP32 baserade enheter på nätet. Visade sig att alla mina "smarta lampor" också kör ESP32.

Skrivet av heretic16:

Jag testade Eigen C++ och två for-satser i C för att göra matrixmultiplikation. Min for-loop var snabbare än Eigen's multiplikation.

Du får nog testa igen... Eigen C++ vs naiv C implementation med for-loopar är inte så mycket C++ mot C, det är handoptimerad SIMD mot C och om resultatet blir att C versionen är snabbare i det läget är något väldigt fel.

Känner till Eigen men har aldrig använt det, så tänkte att det kunde vara kul att se exakt hur mycket snabbare ett välskrivet SIMD-bibliotek är jämfört med skolboksvarianten i C.

Varierar rätt kraftigt mellan olika CPUer, men är inte ens relevant att mäta procent utan man får mäta heltalsfaktorer. För 4x4 (där kompilatorn trots allt har rätt goda möjligheter att göra ett bra jobb i C versionen) är blev det mellan 2-5 gånger snabbare. Med 1000x1000 matriser var blev det mellan 10-20 gånger snabbare.

Och notera, jag har ingen CPU med AVX-512 och Eigen stödjer det. Borde ge i storleksordningen ~1,5 gånger högre prestandafördel för Eigen på en sådan dator. Även på RPi4 stöds SIMD (NEON), var där 1000x1000 gav strax över 20 gånger bättre prestanda i Eigen.

Men kanske missat något, du får gärna posta en konkret variant av ditt test. Mitt finns på github för den som vill se vad som gjordes.

Insett för länge sedan att du inte på något sätt kan övertygas om egentligen något alls. Men hoppas andra finner tråden underhållande, jag råkade för ovanlighetens skull ha gott om tid denna helg och är alltid kul att testa saker lite mer hands-on även om det är väldigt små och udda exempel.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Hedersmedlem
Skrivet av heretic16:

Nu vet jag att QT har en gratisversion, men jag undrar om jag kan ge någon min kompilerade applikation till någon och dom kan bara klicka på den och då körs den?

Ja, men det gäller att alla beroenden som krävs antingen finns på datorn, skickas med (som dll-filer till exempel) eller byggs in i applikationen (statistik länkning). Just statisk länkning av qt-biblioteken är som sagt lite snårigt med lgpl-versionen av Qt, men det finns verktyg som kan paketera alla filer till en enda körbar fil (särskilt för Linux).

Permalänk
Skrivet av Yoshman:

Fast om du läser just vad Microsoft skriver inser man de ekonomiska värdena i att ha något som Rust. Microsoft sitter på en av världens största C++ kodbaser, så de borde ha lite koll på läget.

De borde implementera Rust i .net 6 då.

Citat:

Av ren nyfikenhet: vad är din utbildning och professionella erfarenhet av programmering?

Uppväxt på en bonngård, jobbar som hydralmontör (typ "rörmockare" på industrin) där jag får programmera styrsystemen för hydrauliken. Här är det gammal kod som används. Jag önskar att man kunde modernisera när skapar nytt, men det vill inte dom där 8-bits fanatikerna. Dom orkar inte lära sig något nytt. De blir också förbannade när man pratar om moderna verktyg som underlättar. "Fusk!" Säger dom.

Citat:

Gällande Rust, min första Google-sökning på jobb där Rust endera används eller kunskap om språket ses som mediterande fick 39 träffar även om man begränsar det till till Stockholmsområdet (och Sverige har en rätt udda profil, inbyggda system är relativt ovanligt här samtidigt som vi har brutal övervikt på .NET jämfört med t.ex. Silicon valley).

Man måste också komma ihåg att Silicon valley är enormt progressivt och ändrar sig från år till år.

Citat:

MicroPython är inte en leksak, det finns "riktiga" industriella tillämpningar där det används. Då i microkontrollers som saknar OS, i det läget är microPython miljön "OS".

Jo. MicroPython är en leksak.
Bara kolla deras hemsida så är det anpassat för 14 åringar. Den ger sitt stöd för ESP32 också. Bara det säger deras "mål".
Om MicroPython kunde se stöd till PIC, AVR, NPX, Infineon och STM32 samt att det skulle vara enklare att programmera i Python än i C och samtidigt som man har koll på hur många klockcykler processorn gör för varje periferial. Då kommer MicroPython vara värd att investera sina resurser i.

Citat:

Beror på vad man menar med Arduino. Menar man HW som Arduino UNO så är det en "leksak", den är ju designad för att man ska labba och lära sig. Menar man Wiring (API:et som används) finns det rätt många produkter på marknaden som använder det. Finns t.ex. rätt många ESP32 baserad IoT prylar som kör Wiring och använder FreeRTOS som OS, jag har flera sådan i sommarstugan. Har byggt flera egna saker med ESP32, men blev lite brydd när jag såg ~20 talet ESP32 baserade enheter på nätet. Visade sig att alla mina "smarta lampor" också kör ESP32.

Wiring är också en leksak. Bara se på deras hemsida.
http://wiring.org.co/
Vad är det på bild? Vad är detta för filur med rött hår? Varför håller han (eller hon?) i ett kretskort som det vore en baseboll?
Bara detta säger att wiring är inget att investera sina resurser i.

ESP32 är en billig leksak av osäkerhet. Dessutom inhemskt Kinesiskt. Aja baja!
Man bygger PCB kort från grunden och använder tillförlitliga processorer som kan produceras i över 15-20 år utan problem.

Citat:

Du får nog testa igen... Eigen C++ vs naiv C implementation med for-loopar är inte så mycket C++ mot C, det är handoptimerad SIMD mot C och om resultatet blir att C versionen är snabbare i det läget är något väldigt fel.

Känner till Eigen men har aldrig använt det, så tänkte att det kunde vara kul att se exakt hur mycket snabbare ett välskrivet SIMD-bibliotek är jämfört med skolboksvarianten i C.

Varierar rätt kraftigt mellan olika CPUer, men är inte ens relevant att mäta procent utan man får mäta heltalsfaktorer. För 4x4 (där kompilatorn trots allt har rätt goda möjligheter att göra ett bra jobb i C versionen) är blev det mellan 2-5 gånger snabbare. Med 1000x1000 matriser var blev det mellan 10-20 gånger snabbare.

Och notera, jag har ingen CPU med AVX-512 och Eigen stödjer det. Borde ge i storleksordningen ~1,5 gånger högre prestandafördel för Eigen på en sådan dator. Även på RPi4 stöds SIMD (NEON), var där 1000x1000 gav strax över 20 gånger bättre prestanda i Eigen.

Men kanske missat något, du får gärna posta en konkret variant av ditt test. Mitt finns på github för den som vill se vad som gjordes.

I detta fall var det 15*15 matriser. Jag vet inte vad man ska använda 1000x1000 till. Jag har hållit på med numeriska metoder på fritiden och skrivit C-kod för att lösa linjära system med QR-faktorisering med roterande Householder och det enda jag har använt detta till är för att lösa matriser som är ca 10-30 i storlek.

Citat:

Insett för länge sedan att du inte på något sätt kan övertygas om egentligen något alls. Men hoppas andra finner tråden underhållande, jag råkade för ovanlighetens skull ha gott om tid denna helg och är alltid kul att testa saker lite mer hands-on även om det är väldigt små och udda exempel.

Du har rätt, men du måste förstå att marknaden styr intresset också.
Finns det inget intresse för Microchip att programmera Rust på deras processorer, så betyder det att ingen finner någon vinst där.
Rust är säkert ett bättre språk än C++ och mer noggrant utformat. Det tror jag. Speciellt när C++ har "smarta pekare" som liknar misslyckad struktur. Då har Rust säkert löst sådant på bättre sätt.

Men det kvarstår fortfarande. Konservativa 8-bits fanatiker, paragrafriddare samt ISO-folk styr vad vi ska skriva. En orsak varför Java Server Faces överlever.

Permalänk
Skrivet av Elgot:

Ja, men det gäller att alla beroenden som krävs antingen finns på datorn, skickas med (som dll-filer till exempel) eller byggs in i applikationen (statistik länkning). Just statisk länkning av qt-biblioteken är som sagt lite snårigt med lgpl-versionen av Qt, men det finns verktyg som kan paketera alla filer till en enda körbar fil (särskilt för Linux).

För Linux är alla bibliotek enkla att installera.
Orsaken varför jag valde QT är för att jag sökte information om just skrivbordsapplikationer och då var det många som sa att C# används mest som backend och QT lägger fokus på applikationer för skrivbord och plattor.

Då tänkte jag att då får jag komplettera med C++ istället för lära mig C + lite OOP.

Permalänk
Medlem

Några tips för framtiden @heretic16: Om du vill ha och förväntar dig hjälp så kan det vara en god idé att faktiskt lyssna på och ta in vad betydligt mer erfarna utvecklare än dig själv skriver här. Det är ganska uppenbart vid det här laget att du saknar erfarenhet och kompetens i området (åtminstone relativt andra i tråden som lägger ner tid för att försöka hjälpa dig). Jag har väldigt lite erfarenhet av hydralsystem, så det hade varit lika olämpligt av mig att försöka förklara för dig hur hydralsystem fungerar.

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Skrivet av Dimman:

Några tips för framtiden @heretic16: Om du vill ha och förväntar dig hjälp så kan det vara en god idé att faktiskt lyssna på och ta in vad betydligt mer erfarna utvecklare än dig själv skriver här. Det är ganska uppenbart vid det här laget att du saknar erfarenhet och kompetens i området (åtminstone relativt andra i tråden som lägger ner tid för att försöka hjälpa dig). Jag har väldigt lite erfarenhet av hydralsystem, så det hade varit lika olämpligt av mig att försöka förklara för dig hur hydralsystem fungerar.

Jag kan säga dig att när jag argumenterar emot andra så säger dom exakt samma sak "Du måste lyssna på mig! Jag är mer erfaren än dig". Så det spelar ingen roll vad man än säger. Alla är så envisa idag.

ESP32, MicroPython, Wiring sägs vara inga leksaker som ovan har sagt. Men frågar man andra som håller på med inbyggda system så säger dom att det är leksaker. Så vem har rätt om alla sitter med händerna i kors och säger "Jag har rätt".
Jag tycker arbetsmarknaden får bestämma.

Permalänk
Medlem
Skrivet av heretic16:

Jag kan säga dig att när jag argumenterar emot andra så säger dom exakt samma sak "Du måste lyssna på mig! Jag är mer erfaren än dig". Så det spelar ingen roll vad man än säger. Alla är så envisa idag.

Nu är det ju helt off topic men i detta scenario måste du väl inse när människor runt omkring dig besitter mer kunskap än dig själv? Yoshman är ju dessutom en erkänt duktig ingenjör/utvecklare och sannolikt Sweclockers mest pedagogiska herre.

Skrivet av heretic16:

ESP32, MicroPython, Wiring sägs vara inga leksaker som ovan har sagt. Men frågar man andra som håller på med inbyggda system så säger dom att det är leksaker. Så vem har rätt om alla sitter med händerna i kors och säger "Jag har rätt".
Jag tycker arbetsmarknaden får bestämma.

Det är precis vad du fått serverat i tråden, av människor med mångårig erfarenhet i området.

Nedan är citat från dina egna inlägg i frågan där du berättar för oss vad som är rätt och fel.

Skrivet av heretic16:

Jo. MicroPython är en leksak.
...
Wiring är också en leksak.

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Skrivet av Dimman:

Nu är det ju helt off topic men i detta scenario måste du väl inse när människor runt omkring dig besitter mer kunskap än dig själv? Yoshman är ju dessutom en erkänt duktig ingenjör/utvecklare och sannolikt Sweclockers mest pedagogiska herre.
Det är precis vad du fått serverat i tråden, av människor med mångårig erfarenhet i området.

Nedan är citat från dina egna inlägg i frågan där du berättar för oss vad som är rätt och fel.

Och vem har rätt?
Jag ser inte att Bosch, Siemens, Schneider, Beijer använder dessa moduler i sina produkter.

Permalänk
Hedersmedlem
Skrivet av heretic16:

Jag ser inte att Bosch, Siemens, Schneider, Beijer använder dessa moduler i sina produkter.

Sådant kan ju dock bero på väldigt många andra saker. Inte sällan är man väl till exempel för inlåst i gamla system för att kunna byta även om alternativen är bättre på många sätt.

Permalänk
Datavetare
Skrivet av heretic16:

ESP32, MicroPython, Wiring sägs vara inga leksaker som ovan har sagt. Men frågar man andra som håller på med inbyggda system så säger dom att det är leksaker. Så vem har rätt om alla sitter med händerna i kors och säger "Jag har rätt".
Jag tycker arbetsmarknaden får bestämma.

Ska svara då jag

Har du verkligen torrt på fötterna runt det du skriver om vare sig ESP32 (är egentligen EspressIf)? De må vara ett kinesiskt bolag, men hur är det relevant när "alla" ändå bygger all programvara själv + använder öppen kod som typiskt inte kommer från EspressIf?

ESP32 bygger, beroende på variant, på Xtensa (som ägs av ett Silicon Valley företag) eller RISC-V (som är utvecklat av UC Berkeley).

EspressIf är ett ISO 9001:2015 certifierat företag med bl.a. CE och FCC certifiering för sina produkter. Något som är ett krav då ESP32 används i PLC-lösningar. Det ESP8266/ESP32 revolutionerat är att de gjort WiFi tillgängligt på en helt ny prisnivå och är just tillgång på WiFi som utnyttjas, typiskt för övervakning medan de kritiska funktionerna kör mot GPIO. Några exempel på företag som bygger industriprodukter på med ESP32

Angående Wiring skrev jag specifikt att API:et används. Det APIet använd av många som en form av standardbibliotek för mikrokontrollers då både C och framförallt C++ standardbibliotek är för svulstiga för en MCU (och de innehåller rätt mycket som i praktiken är irrelevant för en MCU).

C, C++ och Rust har alla specifikt stöd för användning av språket utan deras respektive standardbibliotek, free-standing varianten. Måste vara så då vissa delar av standardbiblioteket i praktiken kräver en "runtime" och när man bygger ett OS eller kör "direkt på metallen" (som man ibland gör på MCU:er) är det rätt mycket en "runtime" ens egen program utgör och blir då lite cirkelberoende utan "free-standing".

Wiring API:et används professionellt. Det av småspelare som Bosch, Volkswagen group, Boeing, Airbus, Virgin...

Man verkar till och med till viss del använda "Ardiuno" korten som utbildning/utvecklingsplattformar, men den "riktiga" produkterna använder bara Wiring APIet ihop med custom-designad HW.

MicroPython har 256 kB FLASH/ROM och 16 kB RAM som minikrav, det utesluter de flesta 8 bitars MCU:er, men dessa börjar i allt större grad bli irrelevanta då priset för Arm Cortex M0-4/STM32 och ännu mer de riktigt enkla RISC-V baserade MCU:erna är idag så lågt att det inte riktigt finns någon poäng att gå lägre. Referensdesignen för MicroPython är Cortex M4 baserad, men finns stöd för en lång rad MCUer (typiskt 32-bitars). För att sätt saker i kontext: det har sålts ~x15 fler 32/64-bitars Arm-kretsar (ca 180 miljarder st) genom åren än det sålts alla former av PICs.

MicroPython är i detta kontext extremt nytt, så vore helt orealistiskt att tro de skulle fått någon större spridning i "industrin". Men det projektet har i alla fall hamnat på European Space Agency:s radar så pass att de bidrar med finansiering.

Denna video nämner några av de få fall där MicroPython trots allt används

Jag kanske ändå fått allt om bakfoten, har aldrig jobbat med mikrokontrollerns och PLC:er i någon professionell form utan bara med RTOS och större former av inbyggda-system (där 32-bit är en självklarhet sedan länge och man idag rätt mycket gått över till 64-bit). Men säg inte bara: det är fel, ge explicita exempel med länkar så man kan lära sig mer!

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Jag kanske ändå fått allt om bakfoten, har aldrig jobbat med mikrokontrollerns och PLC:er i någon professionell form utan bara med RTOS och större former av inbyggda-system (där 32-bit är en självklarhet sedan länge och man idag rätt mycket gått över till 64-bit). Men säg inte bara: det är fel, ge explicita exempel med länkar så man kan lära sig mer!

Ja. Du har fått det lite i bakfoten.
Det spelar ingen roll om det är CE-märkt, ISO-märkt osv eller om det är helt enkelt utklassar gamla produkter.
ESP32 i detta fall gör bara korta serier och deras företagssupport är av tveksam kvalité.

Samma sak med Controllino. Kan jag köpa denna efter 15 år? Nix, tror inte det.

Citat:

MicroPython har 256 kB FLASH/ROM och 16 kB RAM som minikrav

För mycket. En sådan processor som har dessa kapaciteter kostar 50 kr styck. Detta är rätt dyrt.
Jag kan säga att Java Micro Edition hade liknande minikrav, om inte mindre. Men det räckte inte heller. Java ME har i praktiken dött ut på grund utav Google's Android välsignade Java SE.

Om du vill hitta en ESP32-liknande produkt som du kan investera din kunskap i och dessutom kan garantera dina..kunder?...om att du kommer alltid kunna leverera denna produkt så kan du kolla på STM32WB. ST garanterar en support på sina produkter i minst 10 år. ST har utvecklingsverktyg som maskingenererar kod, vilket gör så att alla användare programmerar likadant.

Eventuellt kan du titta på TTcontrol. En sådan liten box kan kosta runt 1000 kr. Enkel att programmera och du kan garantera dig själv att en TTController kommer du alltid kunna köpa.
https://www.ttcontrol.com/

Jag säger inte att MicroPython, Wiring och ESP32 eller Controllino är dåligt. Dom är säkert i väldigt långt fram i framkant när det kommer till användarvänlighet och funktion. Men att arbetarmarknaden ska välsigna dessa tekniker krävs mer än att vara "duktig & modern". Det krävs att dessa tekniker har hög tillförlitlighet. Vi vet inte hur länge dessa tekniker kommer finnas. Om 5 år så kommer dom säkert vara ute och någon annan teknik har kommit till våran värld. Jag kan minnas att Arduino körde långt med ATmega328 tills dom släppte det helt och gick över till ARM.

Permalänk
Datavetare
Skrivet av heretic16:

Ja. Du har fått det lite i bakfoten.
Det spelar ingen roll om det är CE-märkt, ISO-märkt osv eller om det är helt enkelt utklassar gamla produkter.
ESP32 i detta fall gör bara korta serier och deras företagssupport är av tveksam kvalité.

Samma sak med Controllino. Kan jag köpa denna efter 15 år? Nix, tror inte det.

För mycket. En sådan processor som har dessa kapaciteter kostar 50 kr styck. Detta är rätt dyrt.
Jag kan säga att Java Micro Edition hade liknande minikrav, om inte mindre. Men det räckte inte heller. Java ME har i praktiken dött ut på grund utav Google's Android välsignade Java SE.

Hur kommer det då sig att jag, som privatperson, kan köpa en enda ESP32 som har 192 kB + 128 kB SRAM (så två RAM bankar med > 16 kB RAM) och 4 MB flash?

Inte helt säker på vad en USD står i just nu, men det blir inte några 50 SEK. Det är om jag köper en enda från AliExpress, rimligen får man lite bättre pris i bulk...

Sökte lite snabbt på Cortex M0 baserade MCU:er (de verkar typiskt ha 4x 16 kB RAM-bankar) och de går att hitta för 10-20 SEK om man köper enstaka. Och då har jag sett flera nämna att Arm har ett problem då 32-bitars RISC-V baserade MCU:er finns för lägre pris då dessa slipper licenskostnad...

Svårt att säga hur RISC-V kommer stå sig framöver (men givet att Intel är beredd att betala 2 miljarder USD för SiFive är det nog ett rätt säker kort, Kina hårdsatsar på RISC-V då det gör dem fri från eventuella problem p.g.a. handelskrig). Man kan nog räkna med att Arm-kretsarna kommer överleva alla PIC och AVR (AVR har ingen lysande framtid givet att 8 bit är på väg ut och AVR32 är en rejäl flopp) i alla fall. Och vi kan nog ändå räkna med att PIC:ar kommer leva ett bra tag till.

Så exakt vad fick jag om bakfoten?

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Så exakt vad fick jag om bakfoten?

Du tänker för progressivt + att 8-bit är på väg ut. 8-bit kommer alltid vara hos oss, för alltid.
Självklart kan man få mycket billigt från Ali.
Men hur länge kan du köpa den där från Ali? Är det en stabil underleverantör?
För dig som privatperson så duger Ali riktigt bra. Är det tull på Ali fortfarande?

När jag handlar produkter(via företag) t.ex. verktyg osv så är det ALLTID Ahlsell. Ahlsell må vara dyrast, men jag kan bara uppge artikelnummer och sedan får jag produkten 1 dag senare. 2 dagar om jag har otur.

Permalänk
Datavetare
Skrivet av heretic16:

Du tänker för progressivt.
Självklart kan man få mycket billigt från Ali.
Men hur länge kan du köpa den där från Ali? Är det en stabil underleverantör?
För dig som privatperson så duger Ali riktigt bra. Är det tull på Ali fortfarande?

När jag handlar produkter(via företag) t.ex. verktyg osv så är det ALLTID Ahlsell. Ahlsell må vara dyrast, men jag kan bara uppge artikelnummer och sedan får jag produkten 1 dag senare. 2 dagar om jag har otur.

Så du hävdar att Ali Express håller lägre pris för enstaka enheter än vad företag betalar om de köper i bulk direkt från leverantören?

Och Cortex M0 var från Svenska leverantörer, de kanske också håller mycket lägre pris till privatpersoner som köper enstaka enheter?

ESP32 är en revolution därför att det lade prisnivån för MCU med Wifi på en helt ny nivå. "Utvecklingskort" brukar vara rejält mycket dyrare än kretsarna man behöver för att bygga egna PCB:er. Betalade strax under $20 för fem st sådana här

för tre år sedan när ESP32 var rätt ny (de lanserades 2016), de är rimligen billigare idag. För "riktiga" saker behövs ju bara den delen med metallskölden, resten finns ju där enbart för att göra utveckling enklare.

Har köpt en del saker via Farnell på jobbet, tvivlar på att de på något sätt är billiga men även där finns Cortex M0 med 256 kB flash och >16 kB RAM för ca två US-dollar förutsatt att man köper >100 st (vilket är jättemycket).

Man kan inte dra allt för stora slutsatser baserad på vad man själv jobbar med. Skulle jag ha gjort det de senaste decenniet skulle slutsatsen vara

  • Alla skriver sin kod i C eller C++, med lite Python för scripting och JS/TS för UI

  • Linux är den allenarådande desktopmiljön (körde Linux som desktop-dator på jobbet i ~20 år, tvingad att byta till Windows nu då jag för tillfället jobbar med spelutveckling i C++)

  • Webbläsaren är i stort sett enda program som kräver UI, resten kör man ju ändå i text-läge i ett "skal"

Såg du t.ex. att företag som Bosch, Boeing m.fl. körde produkter baserade på Arduino (hade själv inte gissat det, vad gjorde folk innan Google...)? Att ditt företag inte gör det eller ens din avdelning om du jobbar på något i nivå med Bosch betyder inte att ingen använder tekniken. Det går inte att bevisa avsaknad av något, däremot räcker det ju egentligen med ett enda fall som visar existens X för att motbevisa just "ingen använder X".

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Så du hävdar att Ali Express håller lägre pris för enstaka enheter än vad företag betalar om de köper i bulk direkt från leverantören?

Klart Ali håller lägre pris än om jag skulle köpa från svenska underleverantörer. Men Ali tar lite längre tid på sig, och dessutom är det inte säkert att Ali kan leverera denna produkt. Materialbrist är något som många företag fruktar.

Citat:

ESP32 är en revolution därför att det lade prisnivån för MCU med Wifi på en helt ny nivå. "Utvecklingskort" brukar vara rejält mycket dyrare än kretsarna man behöver för att bygga egna PCB:er. Betalade strax under $20 för fem st sådana här
https://i.imgur.com/u0J8PJS.png för tre år sedan när ESP32 var rätt ny (de lanserades 2016), de är rimligen billigare idag.

Jag säger inte att ESP32 är en dålig produkt. Den är säkert jätte bra. Men stora företag väljer inte att implementera ESP32 i sina produkter av viktiga anledningar.

Citat:

Såg du t.ex. att företag som Bosch, Boeing m.fl. körde produkter baserade på Arduino (hade själv inte gissat det, vad gjorde folk innan Google...)? Att ditt företag inte gör det eller ens din avdelning om du jobbar på något i nivå med Bosch betyder inte att ingen använder tekniken. Det går inte att bevisa avsaknad av något, däremot räcker det ju egentligen med ett enda fall som visar existens X för att motbevisa just "ingen använder X".

Notera att det finns en väldigt unga och nyskolade ingenjörer som har svårt att förstå sig på industriella applikationer då dom industriella applikationerna har oftast licenskrav eller har en hög inlärningskurva. Då vinner verktyg så som Arduino eller Python. Men i längden så håller det inte.

Testa ladda ned STM32CubeIDE och programmera lite. Du kommer inse att det är enklare att komma igång med ett projekt på ST's verktyg än Arduino's verktyg, trots att man måste tänka lite mer med ST's verktyg från början.

Känner du till förresten att i ST så behöver du inte kolla hur många bytes som finns in din buffert innan du ska läsa den?
Sådant måste man göra i Arduino. Visste du att ST ger grafiskt stöd för FreeRTOS och FatFS, medan Arduino har något eget icke-standard där man måste skriva kod helt själv? ST garanterar sina produkter att dom gör rätt. Medan i Arduino får du vänta på att någon hobbyprogrammerare fixar buggen åt dig. Om inte du själv skickar in en pull-request på GitHub.

Slutsats: Du skriver mindre kod med ST's produkter än Arduino.
Lust och testa? Jag kan hjälpa dig.

Permalänk
Medlem
Skrivet av heretic16:


Slutsats: Du skriver mindre kod med ST's produkter än Arduino.

Äntligen något vi är överens om \o/

Med ST har man inte tid att koda, man letar buggar i deras drivrutiner eller drabbas av obskyra hw-problem gömd i en errata någonstans (Lite halvt ironisk, halvt seriös. TI är nog faktiskt värre ändå.)

Jag önskar dig lycka till.

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Skrivet av Dimman:

Äntligen något vi är överens om \o/

Med ST har man inte tid att koda, man letar buggar i deras drivrutiner eller drabbas av obskyra hw-problem gömd i en errata någonstans (Lite halvt ironisk, halvt seriös. TI är nog faktiskt värre ändå.)

Jag önskar dig lycka till.

Det var rätt mycket buggar förut. Men jag har inte upplevt något på 1 år nu.
Det är så pass många som rapporterar buggar och de har ett helt utvecklingsteam som granskar deras produkt dom lovar stora företag.

Med ST har man inte tid att koda. Helt rätt! Mindre kod är bättre kod.
Finns inget värre när man får tusen rader kod i en fil och koden är obegriplig, överavancerad och skaparen vill bara visa sig smart.

Utveckling ska vara enkel och stabil.
Själv gillar jag JavaFX på grund utav deras SceneBuilder verktyg. Påminner väldigt mycket om QT Creator. Nackdelen är att JavaFX är inte så attraktivt.

Permalänk
Medlem
Skrivet av heretic16:


Finns inget värre när man får tusen rader kod i en fil och koden är obegriplig, överavancerad och skaparen vill bara visa sig smart.

Utveckling ska vara enkel och stabil.

Jag håller med, dessa obegripliga utvecklare.

Visa signatur

Citera mig för svar.
Arch Linux