Piękny język programowania

Piękny język programowania
0

Mowa oczywiście o Erlangu - języku programowania rozproszonego.
http://www.erlang.org/

Właśnie czytam sobie książkę: "Programming Erlang - Software for Conncurent World" - Joe Armstrong
Dosyć ciekawy język i trochę inny niż wszystkie...

np. takie coś:
X = 3453593. - to jest zmienna
X * X * X. - to zadziała
ale
X = 84539453 - to już nie zadziała bo w Erlangu zmienna może mieć przypisaną wartość tylko raz!!!
a sam operator "=" to nie przypisanie jak w większości języków tylko "pattern matching operator"

Piękny język!.

Endrju
Cool story, bro.
no_solution_found
a co w tym pięknego?
xeo545x39
True story.. aha.
02
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 8 lat
  • Postów:1176
0

Erlanga trzeba będzie się kiedyś nauczyć. A z mniej standardowych Matlab jest fajny, chociaż tylko do specyficznych zastosowań.

0

piękne jest właśnie to że zmiennej możesz przypisać wartość tylko jeden raz a operator "=" to w rzeczywistości "pattern matching". Chyba nie muszę nikomu tłumaczyć w jaki sposób takie coś wpływa na wyłapywanie błędów w programie.
W Erlangu nie można zrobić czegoś takiego(zwiększenie X o jeden):

X = X + 1
tylko trzeba tak:
X1 = X + 1 - za każdym razem nowa zmienna.

Zasiadając do lektury tej książki myślałem sobie "o znowu jakiś głupi language z pętlami if-ami"....a tu takie coś. Jestem pozytywnie zaskoczony. Erlang to język przyszłości. Jedni będą używać OpenMPI a drudzy Erlanga.

no_solution_found
mnie jakoś do piękności tego języka nie przekonujesz:) a kto Cię zmusza, żeby w C++ albo php albo delphi itp zapisywać do zmiennej wiele razy? A od czego są stałe? :)
msm
Nie jest to domena erlanga :P. Haskell/Prolog/Scala/F# itd - wszędzie tylko jedno przypisanie na zmienną
0

no w sumie jest jeszcze Scala która może konkurować z Erlangiem.

msm
nie tylko scala
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Wrocław
0
alpenos23 napisał(a)

piękne jest właśnie to że zmiennej możesz przypisać wartość tylko jeden raz a operator "=" to w rzeczywistości "pattern matching".

W takim razie nie jest to zmienna, tylko wartość. I jest to coś normalnego w językach funkcyjnych. Pattern matching to też standardowy mechanizm w nich występujący.
Więc o co chodzi?

0

Oba języki są piekę - Scala jest może trochę nawet lepsza bo może korzystać z bibliotek Javy i obsługuje OOP.
Polecam książki:
"Programming in Scala" - Martin Odersky,
"Programming Erlang Software for Concurrent World" - Joe Armstrong

Oba języki są piękne!!!

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:dzień
0

Erlang jest dynamicznie typowany => Erlang jest be.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
0

@somekind

Chodzi o to że są to języki do pisania programów na komputery wieloprocesorowe, rozproszone.

Oto cytat z książki o scali:

"The Java platform comes with a built-in threading model........
.....
Unfortunately, programmers have found it very difficult to reliably build
robust multi-threaded applications using the shared data and locks model,
especially as applications grow in size and complexity........

"Scala’s actors library does address the fundamental problem by providing
an alternative, share-nothing, message-passing model that programmers tend
to find much easier to reason about. Actors are a good first tool of choice
when designing concurrent software, because they can help you avoid the
deadlocks and race conditions that are easy to fall into when using the shared
data and locks model."

0

Niesamowite.

0

user image

aurel
Moderator
  • Rejestracja:prawie 15 lat
  • Ostatnio:4 minuty
0

Czy zmienna, której wartość można przypisać tylko raz, wciąż jest zmienną? o.O

02
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 8 lat
  • Postów:1176
0

W zasadzie to nie jest zmienna tylko predykat. Sam Erlang był pierwotnie w Prologu napisany, więc pewnie się inspirowali.

edytowany 1x, ostatnio: 0x200x20
Kerai
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:London
0

[CIACH!]... na nazwę wystarczy spojrzeć: zmienna... ZMIENNA - od zmiany, jak zmienna może być niezmienna?

0

w c++ mogę wymusić takie zachowanie na stałych więc ten mechanizm nie czyni tego szczególnie zajebistym. Podaj bardziej przekonywujące argumenty.

KR
Może i możesz, ale w C++ akurat taki mechanizm jest niemal bezużyteczny, bo nie ma GC i paru innych fajnych rzeczy. A jak nie ma GC, to nie da się sensownie zaimplementować persystentnych struktur danych. A jak nie ma persystentnych struktur danych, to praktycznie nie ma programowania funkcyjnego (i ostatnie dodanie do języka lambd nic tu nie zmienia). I nie ma się czym jarać :D
0

"Erlang is far less efficient than C++. Erlang's big strength is scalability, not efficiency. It will linearly scale across multiple CPUs and, due to its programming and communications model, will very easily scale across machine clusters.

Just to be clear, Erlang won't scale more than C++; it just scales more easily than C++. A lot more easily. "

0

http://www.haskell.org/ - to jest piękny język. Mechanikę Erlanga da się zaimplementować w Haskellu lub Scali, w drugą stronę to nie działa. Erlang ma najbrzydszą (i najmniej elastyczną) składnię ze wszystkich głównych języków funkcyjny, to tyle w kwestii piękna.

hauleth
Ale ma chyba najprościej rozwiązane operacje równoległe i najbardziej się nadaje do oprogramowania serwerowego.
LN
Robię właśnie projekt w Haskellu. To nie jest piękny język. To znaczy... może jest, ale ma kijowe wsparcie jeśli chodzi o debugowanie, komunikaty błędów, itp. Jeszcze długa droga przed nim.
msm
@Curry, winterfresh - +1. [Losowa] - a pomyśl jakby się debugowało używając wszędzie pointless<sup>H</sup>H<sup>H</sup>free programming. Za to zaletą haskella jest to że rzadziej trzeba debugować. Ale racja, racja.
LN
Mówię np. o: parse error: no parse - i nawet nie wiesz, gdzie ;p Albo wywala Ci jakiś błąd, bo 20 linijek wyżej dałeś złe wcięcie... Ja przez brak porządnego debuggera bardzo zniechęciłem się do tego języka. Niestety.
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:3 minuty
  • Postów:6648
0

U mnie prowadzący z programowanie funkcjonalnego podnieca się SML'em, że w nim nie ma zmiennych... Więc coś w tym jest, że ktoś to zobaczy i nagle się podnieca, ale co to jest za zjawisko :D ? Czym tu się jarać? Chyba tylko tym, że w danym języku się topornie pisze :P I tak akurat SML to martwy język...


🕹️⌨️🖥️🖱️🎮
edytowany 2x, ostatnio: Spine
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Wrocław
0
Spine napisał(a)

U mnie prowadzący z programowanie funkcjonalnego podnieca się SML'em, że w nim nie ma zmiennych... Więc coś w tym jest, że ktoś to zobaczy i nagle się podnieca, ale co to jest za zjawisko :D ? Czym tu się jarać? Chyba tylko tym, że w danym języku się topornie pisze :P I tak akurat SML to martwy język...

Jak dla mnie koncepcja używania identyfikatorów/predykatów/czy jak to zwał zamiast zmiennych to nie jest jakaś wielka magia, dużo bardziej można się podniecać sposobem definiowania sekwencji albo np. unit of measure.

KA
  • Rejestracja:prawie 21 lat
  • Ostatnio:około 4 lata
  • Postów:1652
0

XSLT - to jest dopiero wspaniały język. Kazali nam pisać w nim programy :|

02
Jest Turing Complete? Jest. To co się nie podoba? :D
KA
To było z rok temu. Napisanie w tym funkcji jest tak idiotyczne, ze szkoda gadać... To chyba miało być tylko dla pokazania, że się da. Strata taka, że nie mieliśmy normalnego języka
aurel
U mnie w firmie poszukują programisty xslt. Wiecie jak trudno o takiego?
0

różnie to z tą wspaniałością bywa...:

Znajomy mójego ojca pojechał do Szewcji z kolegą. Poszedł sobie do sklepu - w Szwecji szynki wiszą na sznurkach i można sobie je
brać samemu - no więc sobie raz tak wziął szynkę na sznurku, zawiesił na kraku i pod kurtkę....
Objedał się i chwalił do znajomego - "Szwecja to wspaniały kraj...", do domu dzwonił to mówił "Szwecja to wspaniały kraj..."

Za drugim razem poszdł do sklepu i już mu się nie udało - policja go złapała i wsadziła za kraty i płakał....

Szwecja to wspaniały kraj....

02
ja [CIACH!] skąd wy bierzecie takie historie :D
MO
Jak widać Szwecja jest jak j. funkcyjny - szynkę do kupującego można przypisać tylko raz :D
msm
Raczej jak Media Markt...
LF
  • Rejestracja:około 13 lat
  • Ostatnio:około 11 lat
  • Postów:29
0

Erlanga osobiście pięknym językiem bym nie nazwał. Miałem przyjemność w nim pisać kilka niewielkich programików. Pierwsze kilka miesięcy było naprawdę tragiczne jak dla mnie. Składnia po prostu na samym początku powala. Albo linijki kończy się "." albo "," a czasem jeszcze "". Nim się do tego człowiek przyzwyczai kilka linijek trzeba skrobnąć.

0

a czy
private static final String = "zmienna" jest nadal zmienną ?

hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 15 godzin
0

A czy (w Ruby):

Kopiuj
LOL="abba"

Jest stałą?
Trzeba rozróżniać immutable variables od stałych.


0

wszystko zależy od upodobań programisty. Najładniejszą składnie ma chyba Python i gdyby był tak szybki jak ANSI C to mógłby być językiem numer 1.

hauleth
Polemizował bym, osobiście nie lubię jego składni i o niebo bardziej wolę Ruby.
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:dzień
0

Gdyby babka miała wąsy, to by była dziadkiem.

Z dynamicznym typowaniem ciężko uzyskać zadowalającą wydajność i/ lub zajętość pamięci.

Poza tym co chwilę zmieniasz upodobania. Może potrzebujesz pomocy lekarza?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
Spine
Ty za to caly czas wierny jednemu jezkowi... czy to zasluguje na uznanie? I jeszcze jak sie podniecasz tym statycznym typowaniem... Przy wspolczesnym sprzecie nie kazdy potrzebuje mega wydajnosci ze strony jezyka, moj kolega przepisal Galiba z Javy do PHP i dziala duzo szybciej niz ten Javowy :) zlozonosc obliczeniowa algorytmu ma znaczenie, narzedzie jest na drugim miejscu...
Wibowit
Na pewno zasługuje na uznanie to, że mam własne zdanie, które nie jest wynikiem mody czy ograniczenia umysłowego. Nie podniecam się zdaniem żadnego z guru, bo generalnie nie mam guru. No i doskonale wiem, że bubble sort w Javie będzie dużo wolniejszy na dużych tablicach niż heapsort w PHP. Chciałeś mnie tym zagiąć czy co? A dynamiczne typowanie to wg mnie nieporozumienie. Liczy się właśnie np (umiarkowana) oszczędność zasobów i dogłębne testowanie na jak najwcześniejszym etapie, a nie to, że kodu będzie 10% mniej i że typy (a raczej ich brak) nie odstraszą noobów.
0

nie zmieniam upodobań. Chciałem tylko powiedzieć że Python ma ładną składnie.

msm
O, popatrz, a mi się niespecjalnie podoba. To tyle jeśli chodzi o upodobanie dotyczące ładnej składni.
hauleth
Mi też się nie podoba, wolę Ruby.
rafal-prog
Czepiacie się. Ja np. mam takie dni, że mój algorytm wydaje mi się szczytem inteligencji i też chciałbym się nim pochwalić przed całym światem :)
Spine
@winerfresh: jak w temacie o wyrazeniu regularnym w pythonie pokazales przyklad w rubym, to jakos nie przemawialo to za czytelnoscia kodu ruby'ego :D
hauleth
Bo mam zły nawyk pisania krótkich kodów, mogę pisać dłuższe i czytelniejsze :P I nie mogę znaleźć o który Ci przykład chodzi.
0

znam i lubię programować w wielu językach - nie mam jednego ulubionego. Każdy ma w sobie coś pięknego. Ostatnio uczę się Object-Pascala w Lazarusie. Niemniej jednak gdy siadam do Javy, C#,Pythona które są dosyć fajne to czuję pewien niedosyt. Zaczynam sobie wtedy myśleć że te języki są takie fajne ale nie dają takiej wydajności jak C i mam wtedy ochotę porzucić je i pisać w ANSI C.

KR
Nie dają takiej wydajności jak C? No, mnie tam w Javie się szybciej pisze niż w C. :) A jeśli chodzi o wydajność działania kodu, to jest parę takich sytuacji, kiedy kod w Javie/C# wykonuje się szybciej niż równoważny, ładnie napisany (tzn. bez zaciemniających optymalizacji) kod w C.
0

@Krolik

Poczytaj sobie to:
http://www.jelovic.com/articles/why_java_is_slow.htm

"Java, with the current language features, will never be as fast as C++. This pretty much means that it's not a sensible choice for high-performance software and the highly competitive COTS arena. But its small learning curve, its forgiveness, and its large standard library make it a good choice for some small and medium-sized in-house and custom-built software."

wystarczy sobie zobaczyć jak działają niektóre programy w Javie. Teraz może tego tak nie czuć ale jeszcze parę lat temu odpalając program do modelowanie UML - Argo UML działał strasznie wolno.

02
a ja ci mogę dać linka gdzie pisze, ze Java zawsze będzie szybsza od C++. Jaki jest sens przerzucania się takimi linkami?
0

@0x200x20

ja też znam takie linki gdzie piszą że java jest równie szybka albo nawet tak samo szybka jak C. Może jest to prawda w przypadku programów które wykonują obliczenia matematyczne- tutaj java może być równie szybka. Ale autor podany w linku powyżej chyba jasno wytłumaczył że java nie może być szybka na równi z C.

0

Benchamrk:
http://bruscy.republika.pl/pages/przemek/java_not_really_faster_than_cpp_160-430.html

Total execution time for C++: 41.95 seconds

Total execution time for Java Server VM: 88.10 seconds

Total execution time for Java Client VM: 85.37 seconds

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)