GCC (GNU Compiler Collection) este un software de linie de comandă open source proiectat să funcționeze ca un compilator pentru sistemele de operare GNU / Linux și BSD. Acesta include front-end-uri pentru numeroase limbi de programare, inclusiv obiectivele C, Go, C ++, Java, C, Ada și Fortran.
Caracteristici dintr-o privire
Cu GCC aveți posibilitatea să configurați, să compilați și să instalați aplicații GNU / Linux în sisteme de operare Linux sau BSD folosind doar arhiva sursă a programului respectiv. Cu toate acestea, utilizatorii nu trebuie să interacționeze cu compilatorul, deoarece acest lucru se face automat prin configurarea și crearea de scripturi.
Proiectul include, de asemenea, biblioteci pentru diverse limbi de programare, cum ar fi libstdc și libgcj, și ca majoritatea software-ului GNU, acesta trebuie configurat înainte de a putea fi construit și instalat pe computerul dvs.
De asemenea, poate afișa calea completă la o anumită bibliotecă, folderele din calea de căutare a compilatorului, calea completă la o componentă specifică, directorul bibliotecilor țintă, sufixul sysroot folosit pentru a găsi anteturile și tripletul GNU normalizat al țintă. p>
În plus, există alte opțiuni pentru trecerea anumitor opțiuni și argumente separate de virgule pe asamblare, preprocesor și linker, compilarea și asamblarea fără conectare, crearea unei biblioteci partajate și multe altele.
Proiectat pentru sistemul de operare GNU
Fiind inițial scris ca principalul compilator pentru sistemul de operare GNU, GCC (GNU Compiler Collection) a fost dezvoltat ca software gratuit de 100% și este instalat implicit pe orice distribuție Linux.
Software-ul este, de asemenea, folosit de către dezvoltatorii Open Source pentru a-și compila programele. Linia de comandă vine cu mai multe opțiuni, printre care putem menționa capacitatea de a afișa procesorul țintă al compilatorului, precum și calea relativă către bibliotecile OS.
Linia de fund
Toate acestea, GCC este una dintre componentele esențiale ale oricărui sistem de operare GNU / Linux. Nu numai că nu putem imagina o lume fără ea, dar GCC este principalul motiv al întregului ecosistem Open Source.
Ce este nou în această versiune:
- GCC 7.3 este o versiune a bug-ului de la ramura GCC 7 care conține corecții importante pentru regresii și bug-uri grave în GCC 7.2 cu mai mult de 99 bug-uri fixate de la lansarea anterioară.
- Această versiune include opțiuni de generare de coduri pentru a atenua Spectre Variant 2 (CVE 2017-5715) pentru țintele x86 și powerpc.
Ce este nou în versiunea 8.1.0:
- GCC 7.3 GCC 7, care conține corecții importante pentru regresii și bug-uri serioase în GCC 7.2, cu mai mult de 99 bug-uri fixate de la lansarea anterioară.
- Această versiune include opțiuni de generare de coduri pentru a atenua Spectre Variant 2 (CVE 2017-5715) pentru țintele x86 și powerpc.
Ce este nou în versiune:
- GCC 7.1 este o versiune majoră care conține funcții noi substanțiale care nu sunt disponibile în GCC 6.x sau în versiunile GCC anterioare. Interfața C ++ are acum suport experimental pentru toate proiectele curente C ++ 17, cu opțiunile -std = c ++ 1z și -std = gnu ++ 1z, iar biblioteca libstdc ++ are cea mai mare parte a versiunii C ++ 17 funcțiile bibliotecii implementate. Aceste versiuni oferă diferite îmbunătățiri ale diagnosticării emise, inclusiv locații îmbunătățite, intervale de locație, sugestii pentru identificatori erori, nume de opțiuni, sugestii de remediere și diverse avertismente noi. Optimizatorii au fost imbunatatiti, cu imbunatatiri aparute in toate optimizarile intra-si inter-procedurale, optimizarile de timp ale link-urilor si diferite backend-uri de tinta, incluzand, dar nu limitat la, adaugarea pass pass merging, optimizarea codurilor de ridicare, splitting loop-ului si psihiatru îmbunătățiri de ambalare. Adresa Sanitizer poate raporta acum utilizările variabilelor după ce au părăsit domeniul de aplicare. Acum GCC poate fi configurat pentru descărcarea OpenMP 4.5 la NVPia PTX GPGPUs.
Ce este nou în versiunea 6.3.0:
- GCC 6.3 este o versiune bug-fix de la ramura GCC 6 care conține corecții importante pentru regresii și bug-uri serioase în GCC 6.2 cu mai mult de 79 bug-uri fixate de la lansarea precedentă.
Ce este nou în versiunea 6.2.0:
- Această versiune este o versiune bug-fix, care conține corecții pentru regresii în GCC 5.2 față de versiunile anterioare ale GCC.
Ce este nou în versiunea 6.1.0:
- Această versiune este o versiune bug-fix, care conține corecții pentru regresii în GCC 5.2 față de versiunile anterioare ale GCC.
Ce este nou în versiunea 5.3.0:
- Această versiune este o versiune bug-fix, care conține corecții pentru regresii în GCC 5.2 față de versiunile anterioare ale GCC.
Ce este nou în versiunea 5.2.0:
- Această versiune este o versiune bug-fix, care conține corecții pentru regresii în GCC 5.1 față de versiunile anterioare ale GCC.
Ce este nou în versiunea 5.1.0:
- Front-end-ul C ++ are acum suport C ++ 14 complet, iar Biblioteca Standard C ++ are suport complet C ++ 11 și suport C + + 14 experimental complet. Suportul complet C ++ 11 a fost posibil prin adoptarea Dual ABI, pentru mai multe detalii, consultați https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html.
- Front-end-ul C este acum implicit în modul C11 cu extensii GNU, ceea ce afectează semantica cuvântului inline și aduce alte modificări vizibile ale altor utilizatori, vezi https://gcc.gnu.org/gcc-5/porting_to.html pentru mai multe detalii.
- GCC 5.1 conține diferite îmbunătățiri de optimizare interprocedurală, de ex. un nou cod IPA identic și o îmbunătățire diferită a LTO, de ex. ODL bazată pe fuzionarea tipurilor de tip C ++, pentru mai multe detalii, consultați http://hubicka.blogspot.cz/2015/04/GCC5-IPA-LTO-news.html.
- GCC 5.1 Local alocator de registru conține acum un sub-pas de rematerializare, pe i? 86 / x86-64 este capabil să reutilizeze registrul hard PIC pentru a îmbunătăți performanța codului independent de poziție, există o simplă permisă interprocedurală RA și diverse alte registre au fost adăugate îmbunătățiri de alocare.
- GCC 5.1 adaugă suport parțial pentru standardul OpenACC, suport pentru descărcarea OpenMP 4.0 la viitoarele acceleratoare Xeon Phi ale Intel și suport pentru descărcarea OpenACC la PTX. Sanitizatorul de nedefinire a comportamentului în GCC a fost extins prin adăugarea de diverse verificări noi de rulare. O bibliotecă experimentală GCC JIT a fost adăugată în GCC 5.1.
Ce este nou în versiunea 4.8.4:
- Îmbunătățiri ale optimizatorului general:
- AddressSanitizer, un detector rapid de eroare de memorie, este acum disponibil pe ARM.
- UndefinedBehaviorSanitizer (ubsan), un detector rapid de comportament nedefinit, a fost adăugat și poate fi activat prin intermediul -fsanitize = undefined. Diferite calcule vor fi instruite pentru a detecta comportamentul nedefinit în timpul rulării. UndefinedBehaviorSanitizer este disponibil în prezent pentru limbile C și C ++.
- Îmbunătățiri privind optimizarea legăturilor (LTO):
- Tipul de fuziune a fost rescris. Noua implementare este semnificativ mai rapidă și utilizează mai puțină memorie.
- Un algoritm de partiționare mai bun, rezultând o mai mică streaming în timpul conexiunii.
- Îndepărtarea timpurie a metodelor virtuale reduce dimensiunea fișierelor obiect și îmbunătățește utilizarea memoriei timpului de legătură și timpul de compilare.
- Organele de funcții sunt acum încărcate la cerere și lansate devreme pentru îmbunătățirea utilizării totale a memoriei la timpul de conectare.
- Metodele ascunse C ++ pot fi acum optimizate.
- Atunci când se utilizează un plugin linker, compilarea cu opțiunea -flto generează acum fișiere oblice subțiri (.o) care conțin numai reprezentare a limbajului intermediar pentru LTO. Utilizați -ffat-lto-objects pentru a crea fișiere care conțin în plus codul obiect. Pentru a genera biblioteci statice potrivite pentru procesarea LTO, utilizați gcc-ar și gcc-ranlib; pentru a afișa simbolurile dintr-un fișier obiect subțire, utilizați gcc-nm. (Aceasta cere ca ar, ranlib și nm să fi fost compilate cu ajutorul pluginului.)
- Utilizarea memoriei clădire Firefox cu debug activat a fost redus de la 15GB la 3.5GB; timpul de conectare de la 1700 secunde la 350 de secunde.
- Imbunatatiri de optimizare inter-procedurale:
- Modul nou de analiză a moștenirii de tip care îmbunătățește devirtualizarea. Devirtualizarea ia în considerare acum spațiile anonime de nume și ultimul cuvânt cheie C ++ 11.
- Noua devirtualizare speculativă trece (controlată de -fdevirtualize-speculatively.
- Apelurile care au fost făcute în mod speculativ sunt direcționate către indirect, unde apelul direct nu este mai ieftin.
- Sunt introduse pseudonime locale pentru simbolurile despre care se știe că sunt echivalente semantic în cadrul bibliotecilor partajate, îmbunătățind timpii de legătură dinamici.
- Îmbunătățiri de optimizare direcționate spre feedback:
- Profilarea programelor care utilizează funcțiile C ++ inline este acum mai sigură.
- Profilul de timp nou determină ordinea tipică în care sunt executate funcțiile.
- O funcție nouă de reordonare a funcțiilor (controlată de funcțiile -frecordare) reduce semnificativ timpul de pornire al aplicațiilor mari. Până când asistența binutils nu este finalizată, aceasta este eficientă numai cu optimizarea timpului de legătură.
- Îndepărtarea apelurilor indirecte și devirtualizarea, gestionate prin feedback, gestionează apelurile cross-modul atunci când este activată optimizarea timpului de legătură.
- Îmbunătățiri specifice limbilor și limbilor noi:
- Versiunea 4.0 a specificației OpenMP este acum acceptată în compilatoarele C și C ++ și pornind de la versiunea 4.9.1, de asemenea, în compilatorul Fortran. Noua opțiune -fopenmp-simd poate fi utilizată pentru a activa directivele OpenDM SIMD, în timp ce ignoră alte directive OpenMP. Noua opțiune -fsimd-cost-model = permite ajustarea modelului de cost vectorizare pentru bucle adnotate cu directivele OpenMP și Cilk Plus simd; -Wopenmp-simd avertizează când modelul costului curent înlocuiește direcțiile simd stabilite de utilizator.
- A fost adăugată opțiunea -Wed-time pentru compilatoarele C, C ++ și Fortran, care avertizează atunci când se utilizează macrocomenzile __DATE__, __TIME__ sau __TIMESTAMP__. Aceste macrocomenzi ar putea împiedica compilațiile reproductibile identice cu biții.
- Ada:
- GNAT a fost schimbat în Ada 2012 în loc de Ada 2005 în mod implicit.
- Familia C:
- A fost adăugat suport pentru diagnosticarea colorizării emise de GCC. -Fdiagnostics-color = auto îl va activa la ieșirea la terminale, -fdiagnostics-color = întotdeauna necondiționat. Variabila de mediu GCC_COLORS poate fi utilizată pentru personalizarea culorilor sau dezactivarea colorării. Dacă variabila GCC_COLORS este prezentă în mediul înconjurător, implicit este -fdiagnostics-color = auto, altfel -fdiagnostics-color = niciodată.
- Ieșire de diagnosticare a probelor:
- $ g ++ -fdiagnostics-color = întotdeauna -S -Wall test.C
- test.C: În funcție "int foo () ':
- test.C: 1: 14: avertisment: nici o declarație de returnare în funcție returnând non-void [-Wreturn-type]
- int foo () {}
- test.C: 2: 46: eroare: adâncimea de instantare a șablonului depășește maxim 900 (folosiți -ftemplate-depth = pentru a crește maximul) instanțierea structurii X "
- structura șablonului X {const const valoare int valoarea = X :: valoare; }; template struct X;
- test.C: 2: 46: solicitat recursiv de la & quot; const int X :: valoare '
- test.C: 2: 46: cerut de la & quot; const int X :: value '
- test.C: 2: 88: cerut de aici
- test.C: 2: 46: eroare: tip incomplet & lsquo; X 'utilizat în specificatorul de nume imbricate
- Cu noul ivdep #pragma CCG, utilizatorul poate afirma că nu există dependențe realizate buclă care ar împiedica execuție concurentă de iteratii consecutive folosind SIMD (singur instrucțiuni multiple de date) instrucțiuni.
- Suportul pentru Cilk Plus a fost adăugat și poate fi activat cu opțiunea -fcilkplus. Cilk Plus este o extensie a limbajelor C și C ++ pentru a sprijini paralelismul de date și sarcini. Prezenta implementare urmează ABI versiunea 1.2; toate funcțiile, dar _Cilk_for au fost implementate.
- Atomicele ISO C11 (specificatorul și calificatorul de tip _Atomic și antetul) sunt acum acceptate.
- Sunt acceptate selecțiile generice ISO C11 (_Generic keyword).
- Spațiul de stocare local cu filet ISO C11 (_Thread_local, similar cu GNU C __thread) este acum acceptat.
- Suportul ISO C11 se află acum la un nivel similar de completare față de suportul ISO C99: bug-uri în mod substanțial complete, identificatori extinși (cu excepția cazurilor de colț atunci când se utilizează identificatori simplificați), probleme în virgulă mobilă referitoare la caracteristicile opționale C99 din anexele F și G) și anexele opționale K (interfețe de verificare a legăturilor) și L (analizabilitate).
- O extensie C nouă __auto_type oferă un subset al funcționalității C ++ 11 auto în GNU C.
- C ++:
- Implementarea G ++ a deducerea tipului de returnare C ++ 1y pentru funcțiile normale a fost actualizată pentru a se conforma cu N3638, propunerea acceptată în lucrarea de lucru. Mai ales, adaugă decltype (auto) pentru obținerea semanticii decltype, mai degrabă decât semantica deducerea argumentului șablonului automatului simplu:
- int & amp; f ();
- automat i1 = f (); // int
- decltype (auto) i2 = f (); // int & amp;
- G ++ acceptă inițialele C ++ 1y lambda capture:
- [x = 42] {...};
- De fapt, ele au fost acceptate încă de la GCC 4.5, dar acum compilatorul nu avertizează despre ele cu -std = c ++ 1y și susține și inițialele închise parantezate și închise.
- G ++ suporta matrice de lungime variabila C ++ 1y. G ++ a suportat VLA-uri în stil GNU / C99 pentru o lungă perioadă de timp, dar acum acceptă și inițialele și captarea lambda prin referință. În modul C ++ 1y, G ++ se va plânge de utilizările VLA care nu sunt permise de proiectul standard, cum ar fi formarea unui pointer la tipul VLA sau aplicarea dimensiunii unei variabile VLA. Rețineți că acum se pare că VLA nu vor face parte din C ++ 14, ci vor face parte dintr-un document separat și apoi C ++ 17.
- void f (int n) {
- int a [n] = {1, 2, 3}; // aruncă std :: bad_array_length dacă n < 3
- [& amp;] {pentru (int i: a) {cout
Ce este nou în versiunea 4.9.1:
- GCC 4.9.1 este o versiune bug-fix din ramura GCC 4.9 care conține corecții importante pentru regresii și bug-uri serioase în GCC 4.9.0 cu peste 88 bug-uri fixate de la lansarea anterioară. În plus, versiunea GCC 4.9.1 acceptă OpenMP 4.0 și în Fortran, mai degrabă decât în C și C ++.
Ce este nou în versiunea 4.9.0:
- Îmbunătățiri ale optimizatorului general:
- AddressSanitizer, un detector rapid de eroare de memorie, este acum disponibil pe ARM.
- UndefinedBehaviorSanitizer (ubsan), un detector rapid de comportament nedefinit, a fost adăugat și poate fi activat prin intermediul -fsanitize = undefined. Diferite calcule vor fi instruite pentru a detecta comportamentul nedefinit în timpul rulării. UndefinedBehaviorSanitizer este disponibil în prezent pentru limbile C și C ++.
- Îmbunătățiri privind optimizarea legăturilor (LTO):
- Tipul de fuziune a fost rescris. Noua implementare este semnificativ mai rapidă și utilizează mai puțină memorie.
- Un algoritm de partiționare mai bun, rezultând o mai mică streaming în timpul conexiunii.
- Îndepărtarea timpurie a metodelor virtuale reduce dimensiunea fișierelor obiect și îmbunătățește utilizarea memoriei timpului de legătură și timpul de compilare.
- Organele de funcții sunt acum încărcate la cerere și lansate devreme pentru îmbunătățirea utilizării totale a memoriei la timpul de conectare.
- Metodele ascunse C ++ pot fi acum optimizate.
- Atunci când se utilizează un plugin linker, compilarea cu opțiunea -flto generează acum fișiere de obiecte subțiri (.o) care conțin doar reprezentări de limbaj intermediar pentru LTO. Utilizați -ffat-lto-objects pentru a crea fișiere care conțin în plus codul obiect. Pentru a genera biblioteci statice potrivite pentru procesarea LTO, utilizați gcc-ar și gcc-ranlib; pentru a afișa simbolurile dintr-un fișier obiect subțire, utilizați gcc-nm. (Necesită ca ar, ranlib și nm să fi fost compilate cu ajutorul pluginului)
- Utilizarea memoriei clădire Firefox cu debug activat a fost redus de la 15GB la 3.5GB; timpul de conectare de la 1700 secunde la 350 de secunde.
- Imbunatatiri de optimizare inter-procedurale:
- Modul nou de analiză a moștenirii de tip care îmbunătățește devirtualizarea. Devirtualizarea ia în considerare acum spațiile anonime de nume și ultimul cuvânt cheie C ++ 11.
- Noua devirtualizare speculativă trece (controlată de -fdevirtualize-speculatively.
- Apelurile care au fost făcute în mod speculativ sunt direcționate către indirect, unde apelul direct nu este mai ieftin.
- Sunt introduse pseudonime locale pentru simbolurile despre care se știe că sunt echivalente semantic în cadrul bibliotecilor partajate, îmbunătățind timpii de legătură dinamici.
- Îmbunătățiri de optimizare direcționate spre feedback:
- Profilarea programelor care utilizează funcțiile C ++ inline este acum mai sigură.
- Profilul de timp nou determină ordinea tipică în care sunt executate funcțiile.
- O funcție nouă de reordonare a funcțiilor (controlată de funcțiile -frecordare) reduce semnificativ timpul de pornire al aplicațiilor mari. Până când asistența binutils nu este finalizată, aceasta este eficientă numai cu optimizarea timpului de legătură.
- Îndepărtarea apelurilor indirecte și devirtualizarea, gestionate prin feedback, gestionează apelurile cross-modul atunci când este activată optimizarea timpului de legătură.
- Îmbunătățiri specifice limbilor și limbilor noi:
- Versiunea 4.0 a specificației OpenMP este acum acceptată pentru compilatoarele C și C ++. Noua opțiune -fopenmp-simd poate fi utilizată pentru a activa directivele OpenDM SIMD, în timp ce ignoră alte directive OpenMP. Noua opțiune -fsimd-cost-model = permite ajustarea modelului de cost vectorizare pentru bucle adnotate cu directivele OpenMP și Cilk Plus simd; -Wopenmp-simd avertizează atunci când modelul de cost curent suprascrie directivele simd stabilite de utilizator.
- A fost adăugată opțiunea -Wed-time pentru compilatoarele C, C ++ și Fortran, care avertizează atunci când se utilizează macrocomenzile __DATE__, __TIME__ sau __TIMESTAMP__. Aceste macrocomenzi ar putea împiedica compilațiile reproductibile identice cu biții.
- Ada:
- GNAT a fost schimbat în Ada 2012 în loc de Ada 2005 în mod implicit.
- Familia C:
- A fost adăugat suport pentru diagnosticarea colorizării emise de GCC. -Fdiagnostics-color = auto îl va activa la ieșirea la terminale, -fdiagnostics-color = întotdeauna necondiționat. Variabila de mediu GCC_COLORS poate fi utilizată pentru personalizarea culorilor sau dezactivarea colorării. Dacă variabila GCC_COLORS este prezentă în mediul înconjurător, implicit este -fdiagnostics-color = auto, altfel -fdiagnostics-color = niciodată.
- Ieșire de diagnosticare a probelor:
- $ g ++ -fdiagnostics-color = întotdeauna -S -Wall test.C
- test.C: În funcție "int foo () ':
- test.C: 1: 14: avertisment: nici o declarație de returnare în funcție returnând non-void [-Wreturn-type]
- int foo () {}
- test.C: 2: 46: eroare: adâncimea de instantare a șablonului depășește maxim 900 (folosiți -ftemplate-depth = pentru a crește maximul) instanțierea structurii X "
- structura șablonului X {const const valoare int valoarea = X :: valoare; }; template struct X;
- test.C: 2: 46: solicitat recursiv de la & quot; const int X :: valoare '
- test.C: 2: 46: cerut de la & quot; const int X :: value '
- test.C: 2: 88: cerut de aici
- test.C: 2: 46: eroare: tip incomplet & lsquo; X 'utilizat în specificatorul de nume imbricate
- Cu noul ivdep #pragma CCG, utilizatorul poate afirma că nu există dependențe realizate buclă care ar împiedica execuție concurentă de iteratii consecutive folosind SIMD (singur instrucțiuni multiple de date) instrucțiuni.
- Suportul pentru Cilk Plus a fost adăugat și poate fi activat cu opțiunea -fcilkplus. Cilk Plus este o extensie a limbajelor C și C ++ pentru a sprijini paralelismul de date și sarcini. Prezenta implementare urmează ABI versiunea 1.2; toate funcțiile, dar _Cilk_for au fost implementate.
- Atomicele ISO C11 (specificatorul și calificatorul de tip _Atomic și antetul) sunt acum acceptate.
- Sunt acceptate selecțiile generice ISO C11 (_Generic keyword).
- Spațiul de stocare local cu filet ISO C11 (_Thread_local, similar cu GNU C __thread) este acum acceptat.
- Suportul ISO C11 se află acum la un nivel similar de completare față de suportul ISO C99: bug-uri în mod substanțial complete, identificatori extinși (cu excepția cazurilor de colț atunci când se utilizează identificatori simplificați), probleme în virgulă mobilă referitoare la caracteristicile opționale C99 din anexele F și G) și anexele opționale K (interfețe de verificare a legăturilor) și L (analizabilitate).
- O extensie C nouă __auto_type oferă un subset al funcționalității C ++ 11 auto în GNU C.
- C ++:
- Implementarea G ++ a deducerea tipului de returnare C ++ 1y pentru funcțiile normale a fost actualizată pentru a se conforma cu N3638, propunerea acceptată în lucrarea de lucru. Mai ales, adaugă decltype (auto) pentru obținerea semanticii decltype, mai degrabă decât semantica deducerea argumentului șablonului automatului simplu:
- int & amp; f ();
- automat i1 = f (); // int
- decltype (auto) i2 = f (); // int & amp;
- G ++ acceptă inițialele C ++ 1y lambda capture:
- [x = 42] {...};
- De fapt, ele au fost acceptate încă de la GCC 4.5, dar acum compilatorul nu avertizează despre ele cu -std = c ++ 1y și susține și inițialele închise parantezate și închise.
- G ++ suporta matrice de lungime variabila C ++ 1y. G ++ a suportat VLA-uri în stil GNU / C99 pentru o lungă perioadă de timp, dar acum acceptă și inițialele și captarea lambda prin referință. În modul C ++ 1y, G ++ se va plânge de utilizările VLA care nu sunt permise de proiectul standard, cum ar fi formarea unui pointer la tipul VLA sau aplicarea dimensiunii unei variabile VLA. Rețineți că acum se pare că VLA nu vor face parte din C ++ 14, ci vor face parte dintr-un document separat și apoi C ++ 17.
- void f (int n) {
- int a [n] = {1, 2, 3}; // aruncă std :: bad_array_length dacă n < 3
- [& amp;] {pentru (int i: a) {cout
1 Comentarii
http://www.eduwizzonlinetrainings.com 29 Dec 17
EduwizzOnlineTraining is one of the Best Online Training Institute in Hyderabad, Bangalore. Eduwizz provide courses like Hybris Development, WebSphere Commerce Server,Blockchain Training,Hyperledger Fabric Development ,Ethereum Development ,Commvault Training, Devops , Netapps , Mulesoft ESB ,Machine Learning,Data Science , Internet of Things , Hybris ,Angular JS , Node JS , Express JS , Business Analyst, Selenium testing with webdriver, Guidewire ,Adobe, RPA ,TSM, EMC...etc