Autor Wątek: Mniej popularne, ale ciekawe języki programowania  (Przeczytany 17058 razy)

Offline ArekBal

  • Użytkownik

# Lipiec 29, 2014, 18:01:15
F# (nie na dłuższą metę, ale jedno z wygodniejszych wprowadzeń do programowania funkcyjnego)
Scala (jw. nowe życie dla JVM)
TypeScript o korz
Swift (speckę warto przejrzeć)
Haxe (uroczy kundel)





Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xender

  • Użytkownik

# Lipiec 29, 2014, 18:07:33
Actually
* Właściwie.

Przeczytaj to zdanie jeszcze raz :) Scrape'owanie HTML-a jest "złe" (*), bo próbujesz odtworzyć logiczną strukturę dokumentu używając jego wersji prezentacyjnej; selektory CSS są właśnie po to, żeby opisywać wygląd, a nie strukturę (**). Do tego dochodzi też ZUO przez duże Z, czyli fakt, że strona nie ma żadnego obowiązku wspierania twojego kodu -- który jest niczym innym jak reverse-engineeringiem -- i że pierwszy lepszy redesign sprawi, że nie będzie on już działał.
O nie, to STRASZNE, że nie korzystam ze strony w Jedyny Słuszny sposób, jaki przewidział jej autor.

Spłoniesz w piekle -- ale tylko z powodu......tych regexów.
Sugerujesz, że nie znam tego klasyka. Wróć do tamtego posta i doczytaj, że to nie mój kod. :P

W którym miejscu stwierdziłem, że nie znam? W przypadku SH moje "otarcie się na studiach" wyglądało tak, że na koniec napisałem w skryptach SH kompletnie działające forum (Apache CGI + pliki) - myślę, że takie "otarcie się" jest wystarczające do ogólnego poznania języka i wyrobienia osobistej opinii. ;)
Forum w shellu to właśnie piękny przykład, do czego shella używać nie należy.
Forum na Windowsowych plikach .bat raczej tak samo by nie wyszło.

To tak, jak pisać gry w arkuszu kalkulacyjnym. Da się, ale...

Nie twierdzę, że się nie da (patrz wyżej). Jednak sposób, w jaki to jest zaimplementowane (na co wskazują potworki typu "Cygwin\bin\[.exe") nie wygląda po prostu poważnie. :)
>Cygwin
Ekhm... Używanie protezy GNU pod Windowsem i obwinianie GNU/UNIX/POSIX za implementację tej protezy też nie wygląda poważnie.

Tu dygresja: Windows np. nie ma syscalla fork(), którego *nixowe narzędzia używają powszechnie. Workaroundy na to są 2:
- Podczas kompilacji takiego programu na Windows, kompilator szuka typowego wzorca fork+exec, który zastępuje natywnym Windowsowym wywołaniem do utworzenia nowego procesu. To pokrywa więksość zastosować fork.
- W pozostałych przypadkach - biblioteczna implementacja fork poprzez spawnowanie nowego procesu w stanie uśpionym, przepisywanie doń własnej pamięci i przestawienie mu licznika programu (w uproszczeniu). Niewydajne i błędogenne, ale inaczej się nie da.
http://www.cygwin.com/faq.html#faq.api.fork

Wracając: generalnie `[' to cukier składniowy na `test', który ma wszelkie podstawy być standalone programem.
Ale ale, z tego powodu bash i zsh mają składnię [[, która generalnie jest preferowana w stosunku do [, bo podlega parsowaniu przez shell (co pozwala czasem uniknąć kilku programów z ekspansją zmiennych do argumentów ).
Przy okazji, shell może sobie zdefiniować własne, wbudowane test/[, czy echo, czy inna komendę i przesłaniać nią wersje standalone z PATH. Co nie zmienia faktu, że standard (POSIX? UNIX? jakiś inny? dunno) nadal wymaga, żeby istniały wersje standalone tych narzędzi. Więc istnieją.

I nie czepiaj się tego, jak te standardy są zbudowane, bo jak zaczniemy szukać głupotek (albo rzeczy wyglądających jak głupotki dla niewprawionego) w Windowsie, to mniej ich nie znajdziemy.
Oczywiście na pewno są dobre systemy operacyjne bez głupotek - Plan 9, Haiku OS... Hmm... Nie, skoro mało kto ich używa, to chyba jednak takowych nie ma.

Łatwiejszego raczej nie znajdziesz, ale jest cała masa języków, w którym to wywoływanie jest na tym samym, lub porównywalnym poziomie (BAT, Awk, make, itp).
No .BAT jest takie przenośne, chodzi na wszystkich wersjach MS DOS i Windowsa... <3
Awk to język do przetwarzania tekstu, nie do skryptowania.
Make to język specyficzny dla dziedziny, jaką jest budowanie inkrementalne.

Żadne z nich nie może pretendować do miana alternatywy dla Shella.

OK - chodziło mi tutaj o język nie tylko interpretowany, ale również posiadający klasyczny parser.
To znaczy? Zdefiniuj klasyczny parser.

Przypominam, że AFAIK parsery C++ przeważnie trzeba w peßli sprzężenia zwrotnego karmić danymi o tym, czym jest dany symbol (nazwa klasy/funkcji/zmiennej), bo bez tego nie dałoby się przeparsować statement takiego jak "a * b;". (Deklaracja wskaźnika? A może możenie dwóch zmiennych i ignorowanie wyniku? Skąd "klasyczny" parser miałby wiedzieć?)

To zależy wyłącznie od tego, czy chcesz dzisiaj mieć coś, co działa, czy uniwersalny system za rok. Ja osobiście wybieram pierwszą opcję, ale nie zabraniam Tobie wybrać tej drugiej. ;)
Za rok, albo nigdy, bo strona, którą chcemy scrapować nigdy nie będzie miała API nawet w planach.

Zresztą i tak w tym temacie moim mistrzem jest Dab, który na jednym compo na WGK napisał nam "parser" do SVG... używając wyłącznie fscanf. :D Nota bene, parser działał (dla naszego dokumentu, oczywiście), compo wygraliśmy. ;)
^ ^
« Ostatnia zmiana: Lipiec 29, 2014, 18:14:49 wysłana przez Xender »

Offline Xender

  • Użytkownik

# Lipiec 29, 2014, 18:09:34
Osobny post, jakby ktoś stwierdził, że powyższy TL;DR (i w sumie trochę offtop).

Erlang jest ciekawy (wiem, był już wspomniany).
Funkcyjny, z [podobno bardzo szybką] maszyną wirtualną i dynamicznym typowaniem (tak skutecznie dynamicznym, że do dziś nie udało się doń zrobić w pełni działającego analizatora statycznego ^^).

http://learnyousomeerlang.com/

Orgmode - język nie tyle programowania, co czysto tekstowy format zapisu hierarchicznych danych (coś jak Markdown), z trybem do Emacsa. Tylko, że...
...Można w nim robić arkusze kalkulacyjne wykonujące dowolnego Elispa (Emacs Lisp).
« Ostatnia zmiana: Lipiec 29, 2014, 18:13:57 wysłana przez Xender »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Lipiec 29, 2014, 19:22:43
Cytuj
Forum w shellu to właśnie piękny przykład, do czego shella używać nie należy.
Forum na Windowsowych plikach .bat raczej tak samo by nie wyszło.
Bez przesady. Nie twierdzę że w normalnych warunkach bym go do tego użył. Poza tym samo forum wyszło bardzo ładnie i na windowsowich plikach BAT też by wyszło. :)

Cytuj
No .BAT jest takie przenośne, chodzi na wszystkich wersjach MS DOS i Windowsa... <3
W tym miejscu bym wyjechał z argumentem, że SH nie jest przenośne bo nie działa pod Windowsem, ale że ten argument ma tak samo niewielki sens jak wyżej cytowany... ;)

Cytuj
To znaczy? Zdefiniuj klasyczny parser.
Taki, który przeparsuje cały symbol (nieterminalny) zanim podejmie ostateczną decyzję, że to jest właśnie ten symbol.

Cytuj
Za rok, albo nigdy, bo strona, którą chcemy scrapować nigdy nie będzie miała API nawet w planach.
Chodziło mi tutaj o uniwersalny parser [X]HTML, system uniwersalnych szablonów określający co skąd i dokąd scrapować itp. Generalnie chodziło mi o spędzenie roku napisaniu narzędzia, dzięki któremu oszczędzimy może 2 godzinki - max 20, jeżeli założymy że strona w trakcie swojego istnienia drastycznie zmieni swój kod 10 razy.

Offline Paweł

  • Użytkownik

# Lipiec 29, 2014, 21:52:46
Obawiam się że Krzysiek pisze o sh a Xender o bashu. Wbrew pozorom to duża różnica. O ile sh można porównać to .bat to bash jest poprostu dużo lepszy.

Offline Xion

  • Moderator
    • xion.log

  • +1
# Lipiec 29, 2014, 22:25:18
Cytuj
O nie, to STRASZNE, że nie korzystam ze strony w Jedyny Słuszny sposób, jaki przewidział jej autor.
...Czyli TO jest wniosek, który wyciągnąłeś z mojej odpowiedzi? Naprawdę? Serio? Really? Uważasz, że chciałem ci zabronić scrape'owania jakiejś losowej strony twoim skryptem, który zakodziłeś dzisiaj i prawdopodobnie wyrzucisz jutro? A może raczej miałem na myśli to, żeby nigdy nie opierać niczego poważniejszego -- np. wystawionego Przeciętnym Userom (tm) -- o zewnętrzne "API", które ma zerową stabilność? Co jest bardziej prawdopodobne?

Cytuj
Sugerujesz, że nie znam tego klasyka. Wróć do tamtego posta i doczytaj, że to nie mój kod. :P
Nieważne, czyj to kod. Stwierdzałem jedynie, że zasadniczo nie ma w nim nic złego, bo wydawałeś się sugerować, że 7-etapowy pipeline jest czymś, czego należy unikać.

Cytuj
To tak, jak pisać gry w arkuszu kalkulacyjnym. Da się, ale...
Eee, jeszcze trochę i powiesz, że nie powinno się używać arkuszy do trackowania bugów ;)

Cytuj
Obawiam się że Krzysiek pisze o sh a Xender o bashu. Wbrew pozorom to duża różnica. O ile sh można porównać to .bat to bash jest poprostu dużo lepszy
bash, zsh, albo ksh nie mają kilku quirków oryginalnego sh (i zamiast tego dodają przydatne feature'y), ale fundamenty mają dokładnie takie same. Wciąż mamy zastępowanie zmiennych wewnątrz ", albo traktowanie każdej "instrukcji" jako wywołania zewnętrznej komend. To są esencje uniksowego shella, które często są problematyczne, ale w każdym kompatybilnym *sh jedynym możliwym podejściem do nich jest zwyczajne deal with it.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +1
# Lipiec 29, 2014, 23:36:15
Cytuj
Obawiam się że Krzysiek pisze o sh a Xender o bashu.
Pisałem o bashu, ale nie ręczę, że rzeczywiście skorzystałem z jakiś featurów stricte bashowych.

Cytuj
A może raczej miałem na myśli to, żeby nigdy nie opierać niczego poważniejszego -- np. wystawionego Przeciętnym Userom (tm) -- o zewnętrzne "API", które ma zerową stabilność?
Jeżeli przy okazji zaimplementujesz wykrywanie, czy "API" się zmieniło i sensownie na takie przypadki zareagujesz (np. zewnętrznemu klientowi napiszesz, że dane są niedostępne), a w odpowiednim czasie do nowego "API" się dostosujesz - to czemu nie. Swego czasu byłem na praktykach w firmie, której cała działalność się na tym  opierała - i to były dość poważne dane ekonomiczne, tyle że rozsiane po necie właśnie bez żadnego "API".

Offline Xender

  • Użytkownik

# Sierpień 01, 2014, 11:54:56
Eee, jeszcze trochę i powiesz, że nie powinno się używać arkuszy do trackowania bugów ;)
No ja bym użył formatu tekstowego, np. Tab-Separated Values.
Profit - działające diff i merge.

A `git notes' znasz?

Wciąż mamy zastępowanie zmiennych wewnątrz ", albo traktowanie każdej "instrukcji" jako wywołania zewnętrznej komend. To są esencje uniksowego shella, które często są problematyczne, ale w każdym kompatybilnym *sh jedynym możliwym podejściem do nich jest zwyczajne deal with it.
It's not a bug, it's a feature. ;)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +2
# Sierpień 01, 2014, 13:12:18
Cytuj
It's not a bug, it's a feature. ;)
Teraz rozumiem skąd wzięła się opinia, że w Windowsach jest więcej bugów niż w Linuxie - tam to po prostu nazywa się featurami. ;)

Offline Xender

  • Użytkownik

  • +1
# Sierpień 07, 2014, 18:47:04
Teraz rozumiem skąd wzięła się opinia, że w Windowsach jest więcej bugów niż w Linuxie - tam to po prostu nazywa się featurami. ;)
A teraz przeczytaj jeszcze raz, co dokładnie jest funkcjonalnością (a nie bugiem, jak się Xionowi wydaje) w *sh.

Zastępowanie zmiennych w "" to ułatwienie, żeby nie trzeba było zamykać i otwierać "" ponownie. Nie chcesz - użyj ''.
Kod: (bash) [Zaznacz]
echo "Coords and size: $x,$y ${width}x$height."
echo 'Coords and size: '$x','$y' '$width'x'$height'.'
Które lepsze? Ja w drugim zgubiłem się nieco w '' jak je pisałem.

Traktowanie prawie każdego (poza kontrolą przepływu) polecenia jako wywołania zewnętrznego programu to absolutnie podstawowe założenie shella. Po to powstał.

Oczywiście doszły aliasy i funkcje shellowe, ale bez nich shell nadal spełniałby swoje podstawowe zadanie, tylko bardzo biednie.
Gdyby za to wywalić domyślne traktowanie każdej linii jako potencjalnego wywołania zewnętrznego programu, wtedy nie moglibyśmy mówić o shellu. Ta funkcjonalność *definiuje* shella w najbardziej podstawowej formie.

To nie żadne "deal with it" ani "bugi", to "esencja" jak to Xion powiedział i założenia projektowe.
To naturalne, że shell ma inną składnię i semantykę niż większość języków programowania (zwłaszcza tych opartych na i inspirowanych rodem C). Narzekanie na niego z tego powodu to jak narzekanie, że SQL nie jest imperatywny, XML wykonywalny, a angielski parsowalny maszynowo.

Więc przestań wyrywać pojedyncze zdania z kontekstu i je komentować, bo to godne podrzędnego trolla. Po moderatorze spodziewałbym się poziomu dyskusji wyższego niż "mój OS jest lepszy niż Twój, a wy nazywacie bugi featurami".
« Ostatnia zmiana: Sierpień 07, 2014, 18:52:46 wysłana przez Xender »

Offline koirat

  • Użytkownik

# Sierpień 07, 2014, 19:22:40
Kod: (bash) [Zaznacz]
echo "Coords and size: $x,$y ${width}x$height."
echo 'Coords and size: '$x','$y' '$width'x'$height'.'
Które lepsze? Ja w drugim zgubiłem się nieco w '' jak je pisałem.

Szczerze ? Wole to drugie. Przynajmniej jestem w stanie znaleźć swoje zmienne.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Sierpień 07, 2014, 19:25:41
Cytuj
A teraz przeczytaj jeszcze raz, co dokładnie jest funkcjonalnością (a nie bugiem, jak się Xionowi wydaje) w *sh.
Czytałem. Polecam też dokładnie przyjrzeć się dwóm ostatnim znakom mojego poprzedniego posta.

Cytuj
To nie żadne "deal with it" ani "bugi", to "esencja" jak to Xion powiedział i założenia projektowe.
Nie do końca tu się zgodzę. Jako przykład masz chociażby "while", po którym musi być spacja, bo napisanie "while[" już będzie traktowane jako próba wywołania czegoś innego. Jest to efekt założenia projektowego (pierwszy wyraz jest nazwą polecenia), ale przekłada się na pewną niedogodność w tym przypadku na którą jedyną odpowiedzią jest tylko właśnie "deal with it".

Cytuj
Po moderatorze spodziewałbym się poziomu dyskusji wyższego niż "mój OS jest lepszy niż Twój, a wy nazywacie bugi featurami".
Nigdzie nie napisałem który OS jest mój, ani tym bardziej który jest lepszy.

Offline bies

  • Użytkownik

# Sierpień 07, 2014, 20:06:10
Po większy hardkor, polecam rzucić okiem na /usr/bin/expect (`sudo apt-get install expect` jeśli system nie ma go domyślnie zainstalowanego).
Expect to nie jest język tylko pakiet języka Tcl. Skądinąd Tcl to bardzo ciekawy język i stosunkowo mało znany.

Offline Karol

  • Użytkownik

# Sierpień 07, 2014, 20:25:52
Czytałem. Polecam też dokładnie przyjrzeć się dwóm ostatnim znakom mojego poprzedniego posta.
(...)
Nigdzie nie napisałem który OS jest mój, ani tym bardziej który jest lepszy.
Niestety Xenderowi brakuje dystansu do niektórych żartów i jakikolwiek naskok na *nix'a traktuje jako personalną obrazę :U Nie pierwszy wątek gdzie to widać.

Co do tematu to bardzo ciekawy, a mało znany jest Delphi/Objective Pascal, którego wersję trial można obejrzeć pod postacią Lazarus/FPC.

Offline Xirdus

  • Redaktor

# Sierpień 07, 2014, 20:42:53
Co do tematu to bardzo ciekawy, a mało znany jest Delphi/Objective Pascal, którego wersję trial można obejrzeć pod postacią Lazarus/FPC.
FPC i Lazarus to nie są żadne triale, tylko klony wypuszczone na GPL.