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

Offline Arthes

  • Użytkownik
    • Gromaniak

# Lipiec 27, 2014, 15:24:54
Cześć wszystkim.
Do tego wątku zainspirował mnie Xirdus swoim projektem w języku Rust.
Co wy na to, by wspólnymi siłami stworzyć listę tych mniej popularnych języków programowania? Trochę tego jest, a niektóre są co najmniej warte uwagi. Już nie chodzi nawet o takie potworki jak Brainfuck, tylko o bardziej normalne rzeczy - dobrym przykładem może być googlowski Dart, albo Go.
Taka lista mogłaby być fajną rzeczą - a nuż ktoś się niespodziewanie zakocha w jakimś języku :)


Offline Mr. Spam

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

Offline wonderboy

  • Użytkownik

# Lipiec 27, 2014, 16:43:04

Offline timus

  • Użytkownik

# Lipiec 27, 2014, 17:33:11
JSX
eero
Fantom
Object Oriented C
ooc
PolishC

Puki co tyle mi przychodzi do głowy.

Offline .:NOXY:.

  • Użytkownik
    • Profil

  • +3
# Lipiec 27, 2014, 18:18:32

Offline Xion

  • Moderator
    • xion.log

  • +3
# Lipiec 27, 2014, 21:25:37
Rzecz jest względna. Wewnątrz warsztatowej bańki wszystkie języki poza C++'em, C#'em i być może Javą czy PHP są "mniej znane". Gdzie indziej Go jest popularne, a C++ z własnej woli by nikt nie dotknął. Ba, w niektórych kręgach -- tych wokół wież z kości słoniowych -- największą popularnością cieszą się Haskell i Lispy.

Zamiast więc definiować własną bańkę poprzez wykluczanie, proponuję raczej spróbować wyjść z niej (i sprawdzić te inne :)).

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Lipiec 28, 2014, 00:05:04
Cytuj
Wewnątrz warsztatowej bańki wszystkie języki poza C++'em, C#'em i być może Javą czy PHP są "mniej znane".
Zapomniałeś o Pythonie i JavaScripcie, ale generalnie taka specyfika gamedevu.

Cytuj
Zamiast więc definiować własną bańkę poprzez wykluczanie, proponuję raczej spróbować wyjść z niej (i sprawdzić te inne :)).
O czym w założeniu ten wątek właśnie miał być. :)


Od siebie mogę zasugerować poznanie AWK. Co prawda gry w tym nie napiszesz, ale do przetwarzania plików tekstowych jest jak znalazł (a nawet bitmap, po konwersji do formatu PPM przez command line za pomocą ImageMagick).

Offline Xirdus

  • Redaktor

# Lipiec 28, 2014, 00:22:07
Od siebie dodam Nimrod - język nastawiony na to, by jak najwięcej obliczeń było robionych w compile-time, i jak najmniej w runtime, by jak najbardziej wyżyłować wydajność. Kompilowany do C. Podobnie jak Rust, jest to wczesna wersja testowa - jednak w odróżnieniu od wyżej wspomnianego, nie ma za sobą żadnej wielkiej organizacji, więc wróżę los podobny do D - fajny język, ale wybitnie niszowy.

Offline Xender

  • Użytkownik

# Lipiec 28, 2014, 17:01:47
Od siebie mogę zasugerować poznanie AWK.
Pełniejszy "zestaw UNIX" to byłby sh, sed, awk i perl (perl -p -e).

A jak już przy shellu jesteśmy, to zsh ciekawie się prezentuje do skryptowania, ze względu na m.in. normalniejszą semantykę ekspansji zmiennych, niż ma bash (brak domyślnego rozdzielania zwykłej ekspansji zmiennej na argumenty po znakach białych, rozwijanie tablic jako kolejnych wartości w kolejnych argumentach zamiast tylko pierwszego argumentu i olania reszty). Jakoś bardziej intuicyjnie.

Offline Xion

  • Moderator
    • xion.log

  • +1
# Lipiec 28, 2014, 20:24:27
Cytuj
Pełniejszy "zestaw UNIX" to byłby sh, sed, awk i perl (perl -p -e).
Too mainstream! 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).

Ogólnie jest to język do instrumentowania interakcji z programami terminalowymi, na zasadzie poczekaj-na-prompt/odpowiedź -> wyślij-input -> repeat. Jak dotąd użyłem tego cuda tylko raz, do oskryptowania interakcji z serwerem memcache który dostępny był tylko przez telnet. Ponieważ telnet to cały zdalny terminal, a nie tylko połączenie TCP przez które przepycha się dane, tradycyjny uniksowy pipe (tj. | ) nie zdawał egzaminu. `expect` za to sprawdził się całkiem dobrze:
#!/usr/bin/expect --

# Purge local memcache, flushing all the keys & values
# Usage: purge_memcache <host> <port>

set escapechar !;  # easier to send than default ^]

set host [lindex $argv 1];
if { ![string length $host] } {
    set host "localhost";
}
set port [lindex $argv 2];
if { ![string length $port] } {
    set port "11211";
}

spawn telnet -e $escapechar "$host" $port;
expect "Connected to $host";
send "flush_all\n";

send $escapechar;
expect "telnet>";
send "quit\n";
Takie hacki są oczywiście na poziomie scrape'owania HTML-a ze strony, która nie ma API, ale cóż, czasem trzeba :)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +1
# Lipiec 28, 2014, 20:52:48
Cytuj
Pełniejszy "zestaw UNIX" to byłby sh, sed, awk i perl (perl -p -e).
Kto co lubi. Osobiście używam "zestawu Windows", czyli BAT, Awk i czasem coś na szybko w C++ (chociaż fakt, że "koszerny" "zestaw Windows" to by był BAT+VBS+HTA). I proszę bez narzekań na windowsowe BATy, bo za ich pomocą już zdarzało mi się nawet rzeczy wielowątkowe robić. ;)

O Unixowe SH swego czasu otarłem się na studiach i nie planuję do niego wracać - zbyt dzika "składnia" i za dużo pamiętania gdzie spacja ma być, a gdzie nie. :)

Cytuj
A jak już przy shellu jesteśmy, to zsh ciekawie się prezentuje do skryptowania, ze względu na m.in. normalniejszą semantykę ekspansji zmiennych, niż ma bash (brak domyślnego rozdzielania zwykłej ekspansji zmiennej na argumenty po znakach białych, rozwijanie tablic jako kolejnych wartości w kolejnych argumentach zamiast tylko pierwszego argumentu i olania reszty). Jakoś bardziej intuicyjnie.
Jak już się trzeba brać za co większe rzeczy niż wywołanie poleceń po kolei, to moim zdaniem najwyższy czas przejść na jakiś interpretowany język zamiast opierać się na skryptowaniu powłoki.

Offline Vault 11th

  • Użytkownik

# Lipiec 28, 2014, 22:04:54
Ada 2012 -- mój ulubiony imperatywny język programowania. Bardzo potężny i bardzo bezpieczny.
Erlang -- mój ulubiony nieimperatywny język. Prosta składnia, ogromne możliwości jeśli chodzi o programowanie rozproszone.

Offline Xender

  • Użytkownik

  • +1
# Lipiec 29, 2014, 00:28:34
Ponieważ telnet to cały zdalny terminal, a nie tylko połączenie TCP przez które przepycha się dane, tradycyjny uniksowy pipe (tj. | ) nie zdawał egzaminu. `expect` za to sprawdził się całkiem dobrze:
AFAIK Telnet to prawie surowe TCP (ma escape code'y). Czy stary dobry netcat nie sprawdziłby się równie dobrze? (Uwaga - jest GNU netcat i BSD netcat, chyba nieco się różnią).

Takie hacki są oczywiście na poziomie scrape'owania HTML-a ze strony, która nie ma API, ale cóż, czasem trzeba :)
Hej, scrapowanie HTML nie jest złe, a można to zrobić nawet elegancko.
Python + Requests + BeutifulSoup, od jakiegoś czasu można w zupie dobierac się do elementów po selektorach CSS.

Oczywiście scrapować można też tak (scraper do Bugmenot.com, nie mój):
Kod: (bash) [Zaznacz]
#!/bin/bash
count=30
[[ $# == 2 ]] && {
        x=$2
        count=$[ x * 3 ]
}
curl -s "http://bugmenot.com/view/$1" | sed 's/article>/article>\n/g' | grep -iv other |  grep -Po '<kbd>.*?</kbd>' | sed 's/<kbd>//;s/<\/kbd>//' | while read login; do echo "Login: $login"; read password; echo " Pass: $password"; echo ""; done | head -n$count
Mamy tu 7-stopniowy potok, Wzorzec Shellowy (;->) Pipemill (while read zalisany z pipe) i parsowanie HTML regexami. Cóż jeszcze można by o tym powiedzieć?...

Działa.

Kto co lubi. Osobiście używam "zestawu Windows", czyli BAT, Awk i czasem coś na szybko w C++
Tykanie C++ żeby coś oskryptować brzmi skrajnie nieefektywnie. Czemu nie Perl lub Python?

O Unixowe SH swego czasu otarłem się na studiach i nie planuję do niego wracać - zbyt dzika "składnia" i za dużo pamiętania gdzie spacja ma być, a gdzie nie. :)
Jak już się trzeba brać za co większe rzeczy niż wywołanie poleceń po kolei, to moim zdaniem najwyższy czas przejść na jakiś interpretowany język zamiast opierać się na skryptowaniu powłoki.
Proszę, nie oceniaj czegoś, o czym sam powiedziałeś w poprzednim zdaniu, że go nie znasz.

Zapewniam Cię, że w shellu da się z powodzeniem używać wszelakiej kontroli przepływu. Do tego ciężko by było znaleźć język, z którego wywoływanie zewnętrznych procesów jest łatwiejsze, niż z shella.

No i jakby na to nie patrzeć, to shell jest językiem interpretowanym. Więc polecam wyjście ze swojej bańki również, jeśli chodzi w klasyfikację języków.

Offline Xion

  • Moderator
    • xion.log

  • +2
# Lipiec 29, 2014, 00:54:43
Cytuj
AFAIK Telnet to prawie surowe TCP (ma escape code'y). Czy stary dobry netcat nie sprawdziłby się równie dobrze? (Uwaga - jest GNU netcat i BSD netcat, chyba nieco się różnią).
Actually, masz rację. Teraz przypominam sobie, że prawdziwym problemem był po prostu fakt, że jeśli tuż po połączeniu zbombardowałeś serwer memcache komendami, to "biedaczek" nie był na to przygotowany (kiepska maszyna stanów, najwyraźniej). Trzeba było więc odczekać na komunikat o gotowości.

Cytuj
Hej, scrapowanie HTML nie jest złe, a można to zrobić nawet elegancko.
Python + Requests + BeutifulSoup, od jakiegoś czasu można w zupie dobierac się do elementów po selektorach CSS.
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ł.

(*) mniej więcej w takim samym stopniu jak "złe" jest is/instanceof/dynamic_cast
(**) z poprawką na to, że o ile nie używamy czegoś w stylu Angular, konieczne jest czasami dodawanie sztucznych klas celem późniejszego dobierania się do DOM w JS

Cytuj
Oczywiście scrapować można też tak
Spłoniesz w piekle -- ale tylko z powodu...
Cytuj
Mamy tu 7-stopniowy potok, Wzorzec Shellowy (;->) Pipemill (while read zalisany z pipe) i parsowanie HTML regexami.
...tych regexów. Cała reszta jest ok, dodałbym tylko więcej \n.

Cytuj
Tykanie C++ żeby coś oskryptować brzmi skrajnie nieefektywnie. Czemu nie Perl lub Python?
*mruczy coś na temat młotka i gwoździ*

Cytuj
Zapewniam Cię, że w shellu da się z powodzeniem używać wszelakiej kontroli przepływu. Do tego ciężko by było znaleźć język, z którego wywoływanie zewnętrznych procesów jest łatwiejsze, niż z shella.
Brak zrozumienia, do czego służy shell, zazwyczaj bierze się z traktowania go tam samo, jak języków programowania. To błędne podejście, o czym <shameless-plug> pisałem swego czasu </shameless-plug>.

Offline Haxy.M

  • Użytkownik

# Lipiec 29, 2014, 14:54:50
Może nie jest to język pełną gębą, ale bison + flex  do tworzenia parserów :)
Ostatnio bison uratował mi 4 litery jak musiałem prasować stary, na wpół zapomniany protokół, który jest dość szalony i w prostszy sposób niż wytoczyć kolubrynę nie dawało rady :P

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +1
# Lipiec 29, 2014, 16:07:09
Cytuj
Tykanie C++ żeby coś oskryptować brzmi skrajnie nieefektywnie. Czemu nie Perl lub Python?
Żadnego z wymienionych języków nie używałem wystarczająco dużo, żeby czuć się w nich swobodnie. W przypadku Pythona dochodzi jeszcze osobista niechęć do języków w których białe znaki pełnią nietypowe funkcje.

Z drugiej strony do C++ mam wszystkie swoje przydatne funkcje upakowane w libki i pisze mi się w tym naprawdę efektywnie.

Cytuj
Proszę, nie oceniaj czegoś, o czym sam powiedziałeś w poprzednim zdaniu, że go nie znasz.
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. ;)

Cytuj
Zapewniam Cię, że w shellu da się z powodzeniem używać wszelakiej kontroli przepływu.
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. :)

Cytuj
Do tego ciężko by było znaleźć język, z którego wywoływanie zewnętrznych procesów jest łatwiejsze, niż z shella.
Ł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).

Cytuj
No i jakby na to nie patrzeć, to shell jest językiem interpretowanym. Więc polecam wyjście ze swojej bańki również, jeśli chodzi w klasyfikację języków.
OK - chodziło mi tutaj o język nie tylko interpretowany, ale również posiadający klasyczny parser.

Cytuj
Scrape'owanie HTML-a jest "złe" (*), bo próbujesz odtworzyć logiczną strukturę dokumentu używając jego wersji prezentacyjnej;
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. ;)

Cytuj
Spłoniesz w piekle -- ale tylko z powodu... ...tych regexów. Cała reszta jest ok, dodałbym tylko więcej \n.
Jak wyżej.

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. ;)