Autor Wątek: [Rozkminka] Jakim językiem programowania powinno się traktować początkujących.  (Przeczytany 20392 razy)

Offline Dab

  • Redaktor
    • blog

# Marzec 30, 2015, 14:07:10
Skoro i tak mamy już parę poziomów offtopu,to:
Jeszcze niżej. Mam na myśli plus, minus i mnożenie. Czyli kompletne podstawy. Tym bardziej dziwi, że nie udało mi się dotąd znaleźć języka skryptowego, który by to wspierał.

W 99% da się to zrobić w Lua. I jest o tyle fajnie, że da się zrobić nie tylko operatory i funkcje globalne (dot, cross itp) ale również swizzlowanie (i to bez ręcznego rozpisywania - metaprogramowanie ftw :)).

Jedyne czego nie da się zrobić to partial write. Tzn. obiekt.wektor.x = 6.0. Wynika to rzecz jasna z tego że w Lua podobnie jak w większości innych języków nie ma user-defined value types. I o ile sam zapis rzecz jasna da się zaimplementować, to wartość nie byłaby kopiowana i trzeba by pamiętać o dodawaniu .dup/.clone wszędzie - co rzecz jasna jest słabe.

Ale prawda jest taka że nawet języki które mają UDVT (C#, Objective-C) nie radzą sobie z tą sytuacją.
C#: Cannot modify a value type return value of `Klasa.wektor'. Consider storing the value in a temporary variable.
ObjC: lvalue required as left operand of assignment

Tutaj C++ jako jedyny dzięki swojej magii rvalues, lvalues, xvalues, glvalues i prvalues obsługuje taki dostęp do danych - ale mam wątpliwości czy efekt jest wart ceny. :)

Offline Mr. Spam

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

Offline BrunonDEV

  • Użytkownik
    • Construgia -- RPG

# Marzec 30, 2015, 17:34:47
Cytuj
Tutaj C++ jako jedyny dzięki swojej magii rvalues, lvalues, xvalues, glvalues i prvalues obsługuje taki dostęp do danych - ale mam wątpliwości czy efekt jest wart ceny. :)

Wow, serio w innych językach tak się nie da? :D Ja bym tak nie dał rady...

Dlatego (no oczywiście nie tylko dlatego) piszę w C++ i uważam że to najlepszy język (programowania :P) pod słońcem i dalej. :)

-BD.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Marzec 30, 2015, 18:56:05
Cytuj
W 99% da się to zrobić w Lua.
Bym powiedział, że na 100%. Właśnie sobie koduje co takiego do Squirrela, który do Lua jest koncepcyjnie dość podobny i śmiga to aż miło. Walczę jeszcze z funkcjami globalnymi, bo nie koduje się tego tak prosto - trzeba robić "przeciążanie" funkcji drabinką ifów.

Cytuj
również swizzlowanie (i to bez ręcznego rozpisywania - metaprogramowanie ftw :)).
Swizzle sobie akurat rozpisałem z powodów wydajnościowych (a przynajmniej tak myślę). Jeden switch po wszystkich możliwych swizzlach powinien chodzić szybciej niż jakiekolwiek ręczne składanie.

Cytuj
Jedyne czego nie da się zrobić to partial write.
Tez do tego doszedłem, ale myślę, że strata niewielka. Generalnie jak się przyjmie założenie, że wektory są immutable, to reszta staje się prosta.

Cytuj
Tutaj C++ jako jedyny dzięki swojej magii rvalues, lvalues, xvalues, glvalues i prvalues obsługuje taki dostęp do danych - ale mam wątpliwości czy efekt jest wart ceny. :)
Zależy od punktu siedzenia. Jak się siedzi pół prawie życia w C/C++, to dużo prościej pisać cokolwiek w tym co się zna, niż uczyć się nowego języka nawet jeśli miało by to być w nim trywialne.

Offline Dab

  • Redaktor
    • blog

# Marzec 30, 2015, 19:52:16
Cytuj
Walczę jeszcze z funkcjami globalnymi, bo nie koduje się tego tak prosto - trzeba robić "przeciążanie" funkcji drabinką ifów.

Ja sobie z tym poradziłem trochę inaczej - mam funkcje normalize + normalize3, cross + cross3 itd. Nie muszę dzięki temu co chwilę swizzlować na .xyz.
Ale jeżeli już przeciążać, to czemu nie metatabelą zamiast drabinki ifów?

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Marzec 30, 2015, 20:25:12
Cytuj
Ale jeżeli już przeciążać, to czemu nie metatabelą zamiast drabinki ifów?
Rozwiniesz temat?

Offline Dab

  • Redaktor
    • blog

# Marzec 30, 2015, 21:34:38
Coś w tych klimatach (zakładając że obsługujemy błędy dla niepasujących typów):

function is_compatible(a, b)
return getmetatable(a) == getmetatable(b)
end

function cross(a, b)
if not is_compatible(a, b) then error("incompatible types") end
return a.cross(b)
end

(cały przykład: http://ideone.com/WGGoqz)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Marzec 30, 2015, 23:13:17
Cytuj
Coś w tych klimatach (zakładając że obsługujemy błędy dla niepasujących typów)
No, jeżeli chcesz polegać na memberku "cross", no to można i nawet w środku schować. Ja to u siebie wszystko wyflaczyłem do funkcji globalnej "cross", żeby dodatkowo żadnych wołań już nie robiła, a przy sprawdzeniach gdzie mogę to polegam na "instanceof" (to Squirrel, w Lua może być nieco inaczej).

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

  • +6
# Marzec 31, 2015, 00:21:14
Przeglądałem ostatnio tweety, które mam w Favorites. Na temat wysokopoziomowości C/C++ znalazłem:

Cytuj
Computer Science: "In low-level languages like C"
Computer Engineering: "In high-level languages like C"

Natomiast na temat języków funkcyjnych:

Cytuj
I love functional programming. it takes smart people who would otherwise be competing with me and turns them into unemployable crazies.

:)

Offline Xender

  • Użytkownik

# Marzec 31, 2015, 10:25:19
Cytuj
I love functional programming. it takes smart people who would otherwise be competing with me and turns them into unemployable crazies.
> Erlang
> Telekomy na tym stoją
> unemployable

LOLWUT?

Offline Kos

  • Użytkownik
    • kos.gd

# Marzec 31, 2015, 10:29:04
No jest nisza, ale nawet w niszy się czasem spotka perełki. (Ocaml, anyone?)

Offline BrunonDEV

  • Użytkownik
    • Construgia -- RPG

# Marzec 31, 2015, 17:41:15
Hm... I tak wolę programowanie obiektowe. :D

-BD.

Offline Xender

  • Użytkownik

# Marzec 31, 2015, 19:07:52
Hm... I tak wolę programowanie obiektowe. :D
A ja lubię placki. :P

Ja wiedziałem od samego początku, że ten wątek albo nie zbierze żadnej odpowiedzi, albo wykolei się od razu.
Ale naprawdę, ten Twój post nie wniósł absolutnie nic.

Weź się trochę ogarnij, nie postujemy tu specjalnie dla Ciebie, by obchodziły nas Twoje ogólne preferencje.
« Ostatnia zmiana: Marzec 31, 2015, 19:09:31 wysłana przez Xender »

Offline BrunonDEV

  • Użytkownik
    • Construgia -- RPG

# Marzec 31, 2015, 19:17:19
Więc przepraszam, nie wiedziałem że to kogoś zdenerwuje.

A żeby post nie był nic nie wnoszącym postem, dodam że C++ jest bardzo wydajny, a to może również zachęcić początkujących do rozpoczęcia nauki programowania od właśnie tego języka.

Pozdrawiam.

-BD.

Offline Gimer

  • Użytkownik
    • Portfolio

  • +1
# Marzec 31, 2015, 19:25:01
Pytanie jest niewłaściwie postawione.

Język dla początkującego powinien pozwalać na stworzenie bardzo łatwego i zarazem ciekawego programu w mniej niż godzinę. Żadne "Hello Word" (chyba, że ktoś mentalnie jest w latach 80).

Offline BrunonDEV

  • Użytkownik
    • Construgia -- RPG

# Marzec 31, 2015, 21:31:05
@up: Wniosek: Zaczynać od programów okienkowych. :)

Możliwe, ja sam nie zaczynałem od konsoli, tak naprawdę pominąłem w ogóle ten etap nauki programowania. ;)

Cytuj
Język dla początkującego powinien pozwalać na stworzenie bardzo łatwego i zarazem ciekawego programu w mniej niż godzinę.

Ja umiałem takie tworzyć w Basic 256, http://www.basic256.org/. :)

Naprawdę fajne na początek, tylko szkoda że się kompilować nie da. ;)

-BD.
« Ostatnia zmiana: Marzec 31, 2015, 21:52:44 wysłana przez BrunonDEV »