-
41. Data: 2020-07-11 23:26:21
Temat: Re: C is number one (znowu)
Od: Roman Tyczka <n...@b...no>
On Sat, 11 Jul 2020 12:32:03 +0200 (GMT+02:00), slawek wrote:
>> Nie jakiś tylko jakichś
>
> Coż, czyżbyś była młodą nauczycielką języka polskiego?
Nie, w jakiś sposób zdałem maturę...
--
pozdrawiam
Roman Tyczka
-
42. Data: 2020-07-12 16:11:25
Temat: Re: C is number one (znowu)
Od: Roman Tyczka <n...@b...no>
On Sun, 12 Jul 2020 16:08:53 +0200 (GMT+02:00), slawek wrote:
> Java wyparła Delphi. Skutecznie.
Tak, a TIRy, wyparły auta sportowe.
hint:
Delphi to desktop, Java to server side.
--
pozdrawiam
Roman Tyczka
-
43. Data: 2020-07-12 21:00:35
Temat: Re: C is number one (znowu)
Od: Maciej Sobczak <s...@g...com>
> Powoływanie się na "smart pointery" w dyskusji o wskaźnikach to trochę jak
rozważanie zakupu roweru stacjonarnego na wycieczki rowerowe albo do poruszania się
po mieście. Niby też rower, ale jednak nie do końca.
https://en.wikipedia.org/wiki/Pointer_(computer_prog
ramming)
"In computer science, a pointer is an object in many programming languages that
stores a memory address."
Wytłumacz mi teraz, dlaczego "smart pointer" to nie jest "pointer".
> Smart pointerom bliżej koncepcyjnie do referencji, niż do wskaźników.
To na czym polega różnica?
Niektóre języki nazywają wskaźniki referencjami dla zmylenia przeciwnika, żeby się
źle nie kojarzyło. Niektóre języki używają obydwu pojęć na różne rzeczy.
Ale jeśli mówimy o koncepcjach, to na czym polega różnica?
--
Maciej Sobczak * http://www.inspirel.com
-
44. Data: 2020-07-13 16:17:57
Temat: Re: C is number one (znowu)
Od: g...@g...com
W dniu niedziela, 12 lipca 2020 21:00:37 UTC+2 użytkownik Maciej Sobczak napisał:
> > Powoływanie się na "smart pointery" w dyskusji o wskaźnikach to trochę jak
rozważanie zakupu roweru stacjonarnego na wycieczki rowerowe albo do poruszania się
po mieście. Niby też rower, ale jednak nie do końca.
>
> https://en.wikipedia.org/wiki/Pointer_(computer_prog
ramming)
>
> "In computer science, a pointer is an object in many programming languages that
stores a memory address."
>
> Wytłumacz mi teraz, dlaczego "smart pointer" to nie jest "pointer".
Jeśli chcesz dyskutować o tym, czy rower stacjonarny to też rower,
albo czy motorower to też rower, albo czy hulajnoga to też rower,
albo czy hulajnoga elektryczna to motorower, to musisz znaleźć sobie
innego kompana do rozmowy, bo ja niestety nie mam na to czasu.
> > Smart pointerom bliżej koncepcyjnie do referencji, niż do wskaźników.
>
> To na czym polega różnica?
>
> Niektóre języki nazywają wskaźniki referencjami dla zmylenia przeciwnika, żeby się
źle nie kojarzyło. Niektóre języki używają obydwu pojęć na różne rzeczy.
>
> Ale jeśli mówimy o koncepcjach, to na czym polega różnica?
Jeżeli naprawdę Cię to interesuje, to na tej stronie, do której podlinkowałeś, jest
odpowiedź.
Na przykład, jak sobie zerkniesz sekcję dotyczącą Javy, to tam przeczytasz:
"Unlike C, C++, or Pascal, there is no explicit representation of pointers in Java.
Instead, more complex data structures like objects and arrays are implemented using
references. The language does not provide any explicit pointer manipulation
operators."
gdzie słowo "references" prowadzi do strony
https://en.wikipedia.org/wiki/Reference_(computer_sc
ience)
na której możesz wyczytać, m.in.
"[...] reference is often erroneously confused with a pointer or address, and is said
to "point to" the data. However, a reference may also be implemented in other ways
[...]"
-
45. Data: 2020-07-13 20:49:12
Temat: Re: C is number one (znowu)
Od: Maciej Sobczak <s...@g...com>
> > Wytłumacz mi teraz, dlaczego "smart pointer" to nie jest "pointer".
>
> Jeśli chcesz dyskutować o tym, czy rower stacjonarny to też rower,
[...]
To poszukam na grupie rowerowej.
Natomiast tutaj pytałem o to, dlaczego smart pointer nie jest pointerem, bo zdaje się
tak właśnie to określiłeś.
> "Unlike C, C++, or Pascal, there is no explicit representation of pointers in Java.
[...]
A coś o smart pointerach tam jest?
> "[...] reference is often erroneously confused with a pointer or address, and is
said to "point to" the data. However, a reference may also be implemented in other
ways [...]"
Świetnie. Ale na stronie o pointerach jest, że to taki obiekt, który *zawiera* (ang.
"stores") adres pamięci. Więc smart pointer, który *zawiera* adres, to według tej
definicji pointer.
Zgadzamy się?
I czy różnica pomiędzy wskażnikiem a referencją sprowadza się do tego, że "may be
implemented in other ways"? To słabo. Bo te pojęcia to są koncepty i nie powinno się
ich uzależniać od tego, jak są zaimplementowane. Bo jeden język może mieć różne
implementacje (łącznie z tak odległymi, jak interpreter vs. kompilator) i trochę
głupio by było twierdzić, że w jednej Javie jest referencja a w drugiej Javie jest
wskaźnik, podczas gdy dokładnie ten sam kod źródłowy robi to samo w obu Javach.
Więc jak to jest? Kiedy jest wskaźnik a kiedy referencja?
Aby wyjść do przodu z tą dyskusją, chętnie podrzucę, że to co w C++ jest nazywane
referencją, bardziej zasługuje na nazwę alias. Wtedy oczyścimy pole do bardziej
wyrafinowanego rozróżnienia pomiędzy wskaźnikiem a referencją. W szczególności
zarówno jedno jak i drugie można skopiować, zachować lub przekazać. Ale czym się
różnią?
--
Maciej Sobczak * http://www.inspirel.com
-
46. Data: 2020-07-13 22:02:56
Temat: Re: C is number one (znowu)
Od: g...@g...com
W dniu poniedziałek, 13 lipca 2020 20:49:14 UTC+2 użytkownik Maciej Sobczak napisał:
> > > Wytłumacz mi teraz, dlaczego "smart pointer" to nie jest "pointer".
> >
> > Jeśli chcesz dyskutować o tym, czy rower stacjonarny to też rower,
> [...]
>
> To poszukam na grupie rowerowej.
Jeszcze po drodze możesz zahaczyć o grupę języka polskiego, żeby wypytać, czym jest
analogia.
> Natomiast tutaj pytałem o to, dlaczego smart pointer nie jest pointerem, bo zdaje
się tak właśnie to określiłeś.
Z dokładnie tych samych powodów, dla których rower stacjonarny to nie rower.
Oczywiście jeżeli chcesz zająć stanowisko przeciwne, to masz do tego prawo.
Słowa mają taki sens, jaki im nadamy. Jeżeli masz powody, żeby uznać, że rower
stacjonarny to też rower, nie będę Ci stawał na przeszkodzie, bo mam lepsze rzeczy do
roboty.
> > "Unlike C, C++, or Pascal, there is no explicit representation of pointers in
Java.
> [...]
>
> A coś o smart pointerach tam jest?
>
> > "[...] reference is often erroneously confused with a pointer or address, and is
said to "point to" the data. However, a reference may also be implemented in other
ways [...]"
>
> Świetnie. Ale na stronie o pointerach jest, że to taki obiekt, który *zawiera*
(ang. "stores") adres pamięci. Więc smart pointer, który *zawiera* adres, to według
tej definicji pointer.
> Zgadzamy się?
Nie. Smart pointer to taki obiekt, który *zawiera* *wskaźnik*.
O rowerze czasem się mówi "dwa kółka". Ale to nie oznacza, że rower stanowi zbiór
dwóch kółek. Rower zawiera również inne istotne komponenty, bez których nie byłby
rowerem.
To zjawisko językowe nazywa się ogólnie metonimią, a nieco bardziej konkretnie -
synekdochą.
> I czy różnica pomiędzy wskażnikiem a referencją sprowadza się do tego, że "may be
implemented in other ways"? To słabo. Bo te pojęcia to są koncepty i nie powinno się
ich uzależniać od tego, jak są zaimplementowane.
Nie. Referencja jest ogólniejszym pojęciem. Wskaźnik jest bardzo konkretnym pojęciem
technicznym, silnie związanym z liniowością adresów na architekturze von Neumanna.
Można powiedzieć, że pamięć adresowana liniowo stanowi ramę pojęciową dla wskaźnika.
Bardziej zwariowany przykład referencji można znaleźć tutaj:
https://www.youtube.com/watch?v=gG7uCskUOrA
Aminokwasy niesione przez tRNA w cytoplazmie stanowią referencję odpowiednich
trypleów zakodowanych w łańcuchu DNA/mRNA.
Ale tutaj nie ma liniowych adresów. Rolę magistrali pełni cytoplazma, natomiast w
charakterze adresowania masz przyciągania jonów i tego rodzaju mechanizmy.
-
47. Data: 2020-07-14 12:01:52
Temat: Re: C is number one (znowu)
Od: g...@g...com
W dniu poniedziałek, 13 lipca 2020 20:49:14 UTC+2 użytkownik Maciej Sobczak napisał:
> [...]
>
> A coś o smart pointerach tam jest?
Wszystko tam jest. Wystarczy przeczytać.
Na podlinkowanej przez Ciebie stronie wiki.
Wskaźniki vs. referencje:
"A pointer is a simple, more concrete implementation of the more abstract reference
data type. Several languages, especially low-level languages, support some type of
pointer, although some have more restrictions on their use than others. While
"pointer" has been used to refer to references in general, it more properly applies
to data structures whose interface explicitly allows the pointer to be manipulated
(arithmetically via pointer arithmetic) as a memory address, as opposed to a magic
cookie or capability which does not allow such"
Wskaźniki vs. smart pointery:
"Since C++11, the C++ standard library also provides smart pointers (unique_ptr,
shared_ptr and weak_ptr) which can be used in some situations as a safer alternative
to primitive C pointers"
gdzie "smart pointers" przenosi nas do odrębnej strony na wiki, gdzie można
przeczytać:
"In computer science, a smart pointer is an abstract data type that simulates a
pointer while providing added features, such as automatic memory management or bounds
checking"
-
48. Data: 2020-07-14 20:59:59
Temat: Re: C is number one (znowu)
Od: Maciej Sobczak <s...@g...com>
> Nie. Smart pointer to taki obiekt, który *zawiera* *wskaźnik*.
Tego nie możemy zakładać, bo to szczegół implementacyjny. Smart pointer może sobie
zawierać adres w jakiejś innej postaci, niż wskaźnik. Nie musi wskaźnika zawierać.
To, co chciałem zaznaczyć odnosząc się do Twojej definicji, to fakt, że smart pointer
też jest pointerem. Bo spełnia jego funkcjonalną definicję.
Dlatego też analogia rowerowa była chybiona.
> Nie. Referencja jest ogólniejszym pojęciem.
Słusznie.
> Wskaźnik jest bardzo konkretnym pojęciem technicznym, silnie związanym z
liniowością adresów na architekturze von Neumanna. Można powiedzieć, że pamięć
adresowana liniowo stanowi ramę pojęciową dla wskaźnika.
Nie szedłbym tak daleko. W ogóle nie rozumiem, po co mieszasz tutaj architekturę von
Naumanna. Na harwardzkiej nie ma wskaźników? Są.
Liniowa pamięć też nie ma tutaj związku. W nieliniowej nie ma wskaźników? Są.
Cytujesz losowe pojęcia.
Rozróżnienie wskaźników od referencji jako ich bardziej niskopoziomowe wcielenie jest
użyteczne (np. referencje w Javie mogą odnosić się do zdalnych obiektów, nie tylko do
lokalnych i to sprawia, że referencje w Javie są konstruktem wyższego poziomu, niż
wskaźniki w C). Ale w tych abstrakcyjnych definicjach nie widzę sensu odmawiania
smart pointerom ich pointerowej "duszy" (nie żebym coś tam nawiązywał :-D ).
Inaczej, krócej: jeżeli podzielimy te wszystkie obiekty na pointery i referencje, to
smart pointery są w tej pierwszej grupie.
--
Maciej Sobczak * http://www.inspirel.com
-
49. Data: 2020-10-05 12:36:10
Temat: Re: C is number one (znowu)
Od: Sushi Master <s...@s...master>
Sat, 11 Jul 2020 11:45:19 -0700 (PDT)
Maciej Sobczak <s...@g...com> napisał(a):
> Ja nie kojarzę obecnie żadnego sensownego programu w Javie, który nazwałbym
"aplikacją"
> w sensie aplikacji desktop. Eclipse, choć się narzuca jako kandydat, to raczej
przykład
> na to, że Javie nie udało się tego zrobić.
Z tej samej działki aplikacje JetBrains typu PHPStorm?
SushiMaster