Ewolucja języków - JS, TS, CoffeeScript, Go, GoPlus, Java, Scala, Kotlin

Ewolucja języków - JS, TS, CoffeeScript, Go, GoPlus, Java, Scala, Kotlin

Kolejny odcinek z serii GitHub Trending Repos. Punktem zapalnym naszej dyskusji jest repozytorium języka GoPlus. GoPlus to dialekt Go, który ma umożliwić inżynierom łatwiejsze wejście i działanie w świecie programowania. Nowy dialekt Go to tylko początek dyskusji na temat ewolucji języków programowania. Rozmawiamy na temat zmian w świecie JS patrząc na CoffeeScript & TypeScript. Mocno filozoficzne rozważania na początek tygodnia. Zapraszamy do wysłuchania odcinka.

Transkrypt:

Marek Piechut

Witam, panie Bartku.

Bartek Witczak

Witam, panie Marku.

Marek Piechut

Jak tam? Słyszałem, że ty dzisiaj przygotowałeś jakiś temat. Temat chyba nie jest bardzo JS’owy, ale dobrze jest sięgnąć do jakichś innych dziedzin, posłuchać o czymś ciekawym.

Bartek Witczak

Odcinek dzisiejszy będzie troszkę kontynuacją tego cyklu Github trending repos, więc przygotowałem temat, który oparłem na mojej bardzo dogłębnej analizie repozytoriów, które były mocno hype’owane w ostatnim miesiącu. Jedno repozytorium szczególnie wydało mi się ciekawe i chciałbym porozmawiać jakby bardzo mocno na temat całego obrazu. Mianowicie chciałbym rozmawiać o nowym języku. Akurat w świecie Go. Repozytorium to jest po prostu repozytorium języka Go +.

Marek Piechut

Ale nie jest Go++?

Bartek Witczak

Nie, na razie jest Go+. Ja nie wiem, co tam wiesz, co w trawie piszczy i co tam się zmieni. Natomiast na razie to jest Go+. Dlaczego w ogóle powstał ten język? To jest taka, nie wiem czy można powiedzieć, nakładka. W każdym razie jest to język, który jest kompatybilny z Go, natomiast powstał dla inżynierów, dla data scientist’ów i jego celem jest to, że ma być prostszy, bardziej elegancki i bardziej przypominający naturalny język po to, aby inżynierowie, ludzie pracujący z data science, z danymi mogli się trochę łatwiej wyrażać. I wydaje mi się, że aby próg wejścia dla nich był dużo mniejszy.

Marek Piechut

Robimy, robimy Go, które przypomina pythona. Z tego co rozumiem.

Bartek Witczak

Wiesz co? Tego, tego tak dokładnie niewiem. Ale w ogóle dlaczego zainteresował mnie ten temat? Trochę właśnie tutaj chciałem nawiązać do sytuacji z językami w JS’ie, gdzie powstają różne wariacje na temat JS’a, czyli właśnie wszystkie Typescripty, Clojurescripty i Scalascripty, tematy w stylu Dart, takie akcje. I tutaj wydało mi się to trochę znajome i zacząłem się zastanawiać w ogóle nad takim właśnie większym obrazem, taką większą filozofią dotyczącą budowania nowych języków, tworzenia nowych języków, czy to w ogóle, czy to w ogóle ma sens?

Marek Piechut

Znaczy wiesz, patrząc na szerszy obraz tego wszystkiego. Moim zdaniem z tych wszystkich rzeczy, które po drodze wydarzały się gdzieś tam w świecie JavaScript, bardzo niewiele ich przetrwało w jakiejś tam sensowniejszej formie.

Bartek Witczak

Dokładnie.

Marek Piechut

Co świadczy o tym, że zresztą w innych krainach jest dosyć podobnie, tak, no bo to było też, dużo podejść, wykluczenia C, dużo podejść wykluczenia C++, dużo podejść wykluczenia Javy. Zrobimy lepszą Javę. I tego było dosyć dużo i nigdy to się do końca nie udawało. Także moim zdaniem źródłem sukcesu tych języków i najważniejszą rzeczą w tym, żeby język był popularny i żeby przetrwał dużo czasu, wcale nie jest jego jakaś tam wyimaginowana lepszość.

Bartek Witczak

No dobra, ale to właśnie tak mówisz, że wiele razy już to było grane. Tak, w naszej, powiedzmy, drugiej znajomej krainie, czyli w krainie Javy, też jakby Kotlin scala kiedyś Groovy, Clojure, takie tematy tam.

Marek Piechut

Jeszcze było dużo innych, tam były Ceylony, były jakieś tam Beanscript i inne wynalazki. Było dużo tego.

Bartek Witczak

I teraz moje pytanie, jakby takie pierwsze jest: czy to jest naturalna kolej rzeczy, aby ten język bazowy, czyli powiedzmy JS, powiedzmy Go, powiedzmy Java, stały się lepsze, to takim mniejszym, jakby niższym progiem wejścia to nie jest zmiana samego języka, tylko jakby stworzenie jakiegoś nowego tworu, który coś ułatwia i dopiero potem adopcja to do tego core-u, tak? No bo zobacz, że powiedzmy, w JS’ie jak były te wszystkie elementy z Coffescriptem, który swego czasu był w miarę popularny, a był trochę podobny. Tak, ale nie był kompatybilny z tego, co pamiętam.

Marek Piechut

To znaczy Coffescript, z tego, co się orientuję, była taka próba chyba zrobienia z JavaScriptu Ruby-ego. Także to był ten problem, że ludzie chcieli pisać obiektowo, w JS nie bardzo się dawało tak łatwo pisać obiektowo, więc tam powstał opis, w którym były klasy itp. rzeczy, gdzie w JS tych rzeczy nie było. Nie wiem, czy to sprawiło, że w JS pojawiły się klasy. Nie wiem, czy osobiście jestem szczęśliwy z tego powodu, ale tak mi się wydaje, że głównym driverem było właśnie to, żeby żeby móc programować tak obiektowo, w stylu Ruby-ego, w stylu klas i tak dalej.

Bartek Witczak

Tylko wydaje mi się, że akurat z Coffescript’u kilka jakichś innych, takich pomniejszych rzeczy zostało wciągniętych właśnie do ES6, bo to były te czasy wcześniej przez przed ES6. I mnie się wydaje, że to jest takie, wiesz, niższy próg wejścia, no nie. Jak ty masz przekonać cały świat, że słuchajcie, chodźcie w tym JS, zmienimy to i to i to. To jest jakby bardzo trudno, masz to całe community.

Marek Piechut

Znaczy bo JS jest takim ciekawym przykładem, bo np. w Javie to faktycznie zaszło tak jak ty mówisz, że, tak mi się wydaje, że to zaszło w ten sposób, że była sobie Java i nikt tam nic nie robił od stu lat i ten język wyglądał jak wyglądał, nie zmienił się przez 10 lat. Tam nałożyły się na to problemy finansowe Sun-a i tak dalej. To nie jest takie proste, żeby mówić, że on się nie rozwijał tylko dlatego, że nie było bodźców do jego rozwoju. No tylko tam też nie było kasy po prostu, prawdopodobnie. I pojawienie się tych rzeczy, wtedy był taki masowy ruch w sumie to było tam lat temu, nie wiem z 5 czy 6, czy ileś, był taki masowy ruch powstawania tych nowych języków na JVMie, tam była Scala. No tam Groomy to był bardzo długo, ale to nikt się nim mocno nie interesował, ale właśnie powstała skala Kotlin, Cejlon, wtedy tam ileś tych takich języków, które trochę sięgały do tych funkcyjnych paradygmatów i próbowały montować je do Javy. I to się stało dosyć popularne i też pewnie w jakiś sposób przez to w Javie powstały takie rzeczy. Wiesz, jak te wyrażenia lambda i tym podobne konstrukcje, jak wskaźniki do funkcji i takie rzeczy. Także tam faktycznie to tak zaszło moim zdaniem, ale w JS nie jestem do końca pewny. Wiesz, bo JS jest dużo bardziej otwarty w tym momencie, że jak ty chcesz, to zgłaszasz te swoje propozycje, do komisji standaryzującej. I tam jest dosyć dużo dyskusji, dosyć dużo rzeczy nowych wchodzi i ludzie nad tym pracują. Mnie się wydaje taki proces bardzo otwarty jest tego JS, i jakby oczywiście, że tam Microsoft z Google wszystko robi. Po pierwsze kładą kasę i po drugie większość ludzi, która tam coś robi, to są ludzie opłaceni przez Microsoft, Google itd. Ale mi się wydaje, że tam jest łatwiej trochę o rozwój języka taki zewnętrzny. Nie?

Bartek Witczak

Nie wiem też coś, co do końca było tym bodźcem na te duże zmiany, bo tak naprawdę to ta sytuacja, o której mówisz, że tam jest prawdopodobnie łatwiej coś zgłosić, łatwiej coś nowego przeforsować i dołożyć do języka. To są jakieś tam ostatnie parę lat. Mocna stagnacja. I nie wiem, co było takim, powiedzmy sobie, punktem zapalnym, ale też nie wydaje mi się do końca, żeby to był coffe script, bo on też tam już dosyć trochę istniał.

Marek Piechut

Dosyć długo istniał. I wiesz, mi się wydaje, że to troszkę jest taka kwestia, że wcześniej driverem rozwoju JavaScriptu były przeglądarki jako takie, czyli rzeczy pojawiały się w przeglądarkach i potem to było wchłaniane przez standard. I to było straszne, po prostu miałeś przeglądarki, które coś tam obsługiwały, jedne to drugie tamto. I wiesz, do tej pory jak się patrzy po dokumentacji Firefoxa, to widać rzeczy w stylu “tego lepiej nie używać, bo to nie jest standardowe.”, “Tamtego lepiej używać, bo nie jest standardowe”, i to są rzeczy, które tam kiedyś weszły, a potem gdzieś tam w standardzie to powstało pod inną nazwą czy tam z trochę innym API. A teraz wydaje mi się, że ten driver jest w drugą stronę, czyli to standard JavaScriptu, pcha do przodu przeglądarki, że najpierw powstają te nowe rzeczy, powstaje tam ES 2029 itd. I potem przeglądarki to implementują, i to się troszkę odwróciło teraz. Nie wiem czy dużo większy wpływ na to nie miał Babel niż to, że był coffe script itd. Że po prostu wychodziły te nowe nowe propozycje do standardów, w Babelu one się pojawiały, ludzie zaczynali korzystać i wtedy już nie było wyjścia, że jakby przeglądarki musiały gonić to.

Bartek Witczak

Mogło tak być. To rzeczywiście może być ten driver tych zmian.

Marek Piechut

Teraz mi się jeszcze wydaje, że TypeScript jest takim dużym driverem zmian, ale to też jest jakby ze względu na kasę. Mnie się wydaje, że tam prostu Microsoft zaczął pchać dużo kasy w rozwój tych standardów.

Bartek Witczak

To jest takie, powiedzmy, moje drugie pytanie, które sobie zadawałem i nad tym się zastanawiałem. Czy tutaj drugim driverem i tą adopcją to będzie kasa czy masa.

Marek Piechut

Ja nie wiem czy to jest rozbieżne do końca.

Bartek Witczak

Znaczy, to znowu pewnie nie jest rozbieżne, tylko znowu gdzieś jest ten punkt zapalny. I punktem zapalnym z definicji pewnie nie może być masa, bo byłoby trudno dosyć, ale jak by dołożyć tam pieniądze, to może będzie rosnąć szybciej.

Marek Piechut

Żeby była masa, to mnie się wydaje, że musi być bardzo silne parcie, bardzo silny bodziec motywujący dla ludzi. Przeciętni ludzie, normalni tacy developerzy to przychodzą do pracy, mają swoje problemy do rozwiązania i obchodzą ten język, gdzie tam im przeszkadza, czy te standardy, bo oni muszą coś tam dostarczyć. A właśnie duże firmy stać na to, żeby mieć ludzi dedykowanych do tego, że oni faktycznie zajmują się rozwijaniem standardu.

Bartek Witczak

Bo te problemy już dla nich są tak kłujące, że łatwiej jest rozwiązać problem stworzenia nowego narzędzia, języka czy framework, niż za każdym razem obchodzić to.

Marek Piechut

Google ma bardzo dużą wartość z tego, że przeglądarki implementują rzeczy, których oni chcą używać. Więc oni płacą kasę na to, żeby, po pierwsze, sponsorować rozwój standardu, a po drugie, dawać ludzi, którzy będą nad tym pracować. A mniejsze jakieś tam community, to tam jest jakaś tam mała część, która tam coś potarmosi w lewo, w prawo. Ale wydaje mi się, że w tym momencie to właśnie Google z Microsoftem, pewnie Apple trochę są głównymi takimi driverami tych zmian

Bartek Witczak

No dobra, no to kolejna rzecz idąca z tymi nowymi językami, z tymi nowymi podejściami czy jakimś tam mikro zmianami. To jest taka: czy wydaje ci się, że raczej to będą zmiany w tych głównych językach, czy jakby jest taka szansa, że ten nowy język przejmie?

Marek Piechut

To znaczy, Go jest takim, mi się wydaje, specyficznym przykładem. To jest ciekawe i mi się to podoba, że wybrałeś Go właśnie na to.mnie się właśnie nie nie wydaje, że jest specyficznym przykładem. Mnie się wydaje, że jak tak sobie patrzę, najbardziej jesteśmy w tym świecie JS’owym i Jawa’owym, to wydaje mi się, że tam jest w miarę podobnie.

Marek Piechut

Wiesz, bardziej mi chodzi o ten aspekt, że ktoś sobie stworzył dialekt Go. Prawdopodobnie on za długo nie pożyje, bo tak to już jest z tymi rzeczami, że jeżeli nie ma za tym, wiesz… Andular jedynka, tak jak Google przestał płacić pieniądze na Angulara jedynkę, to przepadł Angular. Tak, nikt tego nie pchał dalej. I jeżeli to nie ma porządnego wsparcia takiego finansowego, to ja myślę, że on tam za długo nie przetrwa. A dlatego mówię, że Go jest specyficzny, bo Go jest językiem, który mam bardzo w założeniach i w ideach, są takie założenia, że on ma być bardzo kompatybilny wstecz. Że nie będą wprowadzać zmian, które mogłyby w jakikolwiek sposób sprawić, że twój kod przestanie się kompilować itd. Że to jest bardzo silne założenie go.

Bartek Witczak

Ale wiesz co to powiem ci właśnie, że tutaj wydaje mi się znowu, że to jest podobne w sensie Go+, Go do sytuacji TypeScript, JS, że to też są właśnie takie kompatybilne wzory.

Marek Piechut

To jest tylko Extension. I to jest spoko. Chociaż patrząc na to, że dodawanie generyków do Go zajęło ładnych parę lat, to może to trochę potrwać zanim tam Go wchłonie te rzeczy. Zgodzę się, że jeżeli ludzie zaczną z tego korzystać to będzie tak jak z Babelem trochę, czyli ludzie zaczną korzystać, zaczna mówić, że “czemu nie ma tego w Go i muszę tutaj korzystać z tego.” itd. itd. Więc jest to dobry driver do tego, żeby język się rozwijał w pewnym sensie. Jeżeli jakaś tam adopcja będzie.

Bartek Witczak

Tutaj ta adopcja, no to rzeczywiście może być w związku z tym, że to jest dosyć wyraźnie targetowane na daną grupę, bo to jest jakby rzeczywiście taki wiesz, w tym kontekście, że ktoś jest inżynierem, a nie skończył Politechnikę.

Marek Piechut

Tak, to nie jest równoznaczne.

Bartek Witczak

To nie jest równoznaczne. Dokładnie. I jeżeli to jest właśnie takie w miarę wycelowane i ten use case jest taki sensowny i on rzeczywiście będzie jakby wypełniał te warunki, no to tutaj ta adopcja po prostu w tej wąskiej grupie, ale może być. Do tego nałożysz sobie, że jest kompatybilne z Go. Więc ty jakby wiesz, możesz dostać coś, co przeżyje dłużej niż tam 10 gwiazdek na githab.

Marek Piechut

No zobaczymy, zobaczymy, bo to jest taka brutalna forma, trochę wywierania presji na community języka. Ale jest w sumie lepsza niż stagnacja. Bo jeżeli ten nowy język zacznie przejmować rynek Go, to Go będzie musiało gonić. I pewnie skończy się to jakby z korzyścią dla wszystkich, może poza tymi, którzy tam będą musieli bardzo ciężko pracować i żyć w stresie. Ale zobaczymy, w sensie ja jeszcze nie widziałem takich dużych sukcesów, jeżeli one nie były poparte jakimś naprawdę mocnym finansowaniem, albo mocnym use case’m, który jest bardzo popularny w postaci kotlina czy czegoś takiego.

Bartek Witczak

No właśnie, bo tutaj też kotlin jest takim ciekawym przykładem tej strony, powiedzmy, że finansowej i tego przetrwania z jeszcze innego powodu niż TypeScript czy takie rzeczy.

Marek Piechut

No właśnie, jeżeli popatrzymy na te rzeczy, no to okazuje się, że te języki takie, wiesz, forki języków, no to one przeżywały głównie z powodów innych niż z tego, że faktycznie łatwiej się pracuje, tylko właśnie dlatego, że jest na Androidzie, że stał się głównym językiem implementacji Androida. Ja podejrzewam, że Swift by nic nie zrobił na na iOS’ie, gdyby nie to, że ma zastąpić Objective C, i to jest błogosławione przez przez Apple’a.

Bartek Witczak

To tutaj jeszcze ciekawie powiedzieliśmy o Kotlinie, który jest znowu, wydaje mi się, interesującym przykładem na to, że żyje sam z siebie w związku z tym, że jest na Androidzie, a jednocześnie wydaje mi się, że Java dużo tam podbiera elementów, które sprawdziły się w kotlinie i można je trochę tam wykorzystać.

Bartek Witczak

Ale nie wiem na ile ta skala nie ma tutaj większego wpływu na Jawę. Szczerze mówiąc.

Bartek Witczak

Chyba nie.

Marek Piechut

Nie, nie? Bo mam takie wrażenie, że Kotlin dopiero właśnie po tym, jak stał się językiem Androida, no to stał się taki bardziej znany.

Bartek Witczak

No może, może. No nie wiem, trudno powiedzieć. Ja akurat byłem w Scala team, w tym obozie, także jakby tam swego czasu byłem zadowolony.

Marek Piechut

Lubiłeś strzałki, ten scala Z.

Bartek Witczak

Jak lubiłem te znaczki, emotikonki i różne rzeczy. Natomiast no, wydaje mi się, że tutaj akurat to jest, wydaje mi się taki ciekawy przykład. Nie wyobrażam sobie, żeby w Javie powstały te rzeczy, gdyby nie te języki.

Marek Piechut

No właśnie, bo Java jest, Java jest takim specyficznym przykładem, że tam faktycznie był duży zastój i przez tą presję możliwe, że tam była ta też duża zmiana biznesowa. Ale było widać tam presję tych języków, które próbowały funkcyjne koncepcje pchać do Javy gdzieś tam z zewnątrz. I to sprawiło tę presję silną na standard, żeby jednak te rzeczy, wprowadzić.

Bartek Witczak

No dobra, także taka ciekawa rozmowa, mam nadzieję i wydaje mi się, że będą powstawały cały czas nowe języki też w tym naszym ekosystemie JS. Bardziej czuję to, że to będzie bardziej tak jak jest w Javie, czyli że po prostu będą nowe języki, które będą gdzieś tam inspirowały rzeczy, aby dodawać je do JS. Nie wierzę w teorie spiskowe, że JS zniknie, bo zastąpi go coś innego.

Marek Piechut

Nie no, wiesz do tej pory cały czas pisze się w C, więc dosyć dużo kodu, więc jakoś też w to nie wierzę szczerze mówiąc, ale ja w przeciwieństwie do Ciebie nie jestem aż takim entuzjastą nowych języków kompilujących się do JS.

Bartek Witczak

A ja tam sobie lubię jakiegoś ELMa zobaczyć, jakies takie tematy.

Marek Piechut

Szczerze mówiąc, bardziej mi się podoba ten ten aspekt Babel’owania i tego, że nowe rzeczy ze standardu wchodzą wcześniej i to wywiera presję na przeglądarki.

Bartek Witczak

To też jest taki całkiem ciekawy papierek lakmusowy, jak te nowe rzeczy nawet z Babel są potem wkładane.

Marek Piechut

I one są sprawdzone w boju i tak dalej, to też nie jest, nie jest wydumana koncepcja i ktoś to wprowadza, a potem dopiero patrzymy przez 3 lata, czy to było dobre, czy złe, tylko że one są gdzieś tam sprawdzone w boju i wiemy mniej więcej, jak będzie efekt na code base tych zmian.

Bartek Witczak

Dobra także taki tytułem “githab trending repose” przegląd.

Marek Piechut

Czekamy na Go+ +.

Bartek Witczak

To Go++ cały czas jest. Dosyć mocno w ogóle już, jeżeli chodzi o trending na githab i ilość gwiazdek, to mniej więcej jakby ono przez cały poprzedni miesiąc, było tam w topie. W ogóle, że zdobywało dużo gwiazdek.

Marek Piechut

Nie, ale czekamy na + +. No bo jest C+ + to musi być Go+ +

Bartek Witczak

Tutaj też jest analogia do objective w C++ też.

Marek Piechut

Też było.

Bartek Witczak

To akurat Facebook w tym pisał swoje aplikacje.

Marek Piechut

Jakby było za mało klas, że jest objective w C to jeszcze C++, czyli jeszcze można było C++ klasy pisać w objective C, także więcej różnych rodzajów klas.