konto usunięte

Temat: Po co to całe typowanie?

Konrad Karpieszuk:

watek zaczalem bo sie chcialem po prostu dowiedziec, to co juz dowiedzialem sie o typach, dzieki. potem zapytalem o inzynierie, bo mimo wszystko - mimo programowania w php juz chyba z 7 lat - caly czas uwazam sie za kieskiego w tym. programy dzialaja, ale czuje, ze moglbym je pisac sprytniej (szybciej).

Ale po co, skoro i tak masz klientów?

kiedys mialem ksiazke o wzorcach projektowych w php, jednak wzialem sie za nia imo za wczesnie i nie przywiazalem do tego wiekszej uwagi. teraz kupilbym ja znowu, ale jak widac ostatnio odkrylem wideo-wyklady za free i szukam czy jest cos o tym na sieci :)

No tak.. internet.. zabójca profesjonalnego podejścia do nauki...

===

To co umiesz po tych 7 latach? Co to jest dwukierunkowa lista powiązana?
Konrad Karpieszuk

Konrad Karpieszuk WordPress Plugin
Compatibility
Assurance for WPML

Temat: Po co to całe typowanie?

Łukasz Karpuć:
Ale po co, skoro i tak masz klientów?

nie wiem. zeby miec ich jeszcze wiecej w tym samym czasie i wiecej zarobic? z nudow? obecnie gdy sie ktos do mnie zglasza ze zleceniem, zaczynam odpowiedz od informacji, ze najblizsze zlecenie moge przyjac w lutym. przyjalbym szybciej, gdybym obecnie zakolejkowane szybciej zrobil :)

ale bardziej z nudow, by jednak cos sie douczyc. calej javy juz sie nie naucze, a na pewno nie na tyle, by byc w niej przynajmniej dobrym
No tak.. internet.. zabójca profesjonalnego podejścia do nauki...

ksiazek juz sie naczytalem. cos sie tam dowiedzialem, czesci nie zrozumialem. zalozylem ze jesli nie rozumiem to z jednego (albo obu) powodow: albo jestem zwyczajnie glupi, albo brakuje mi wlasnie profesjonalnego podejscia do nauki. w sensie: nigdy nie studiowalem informatyki i jestem pewien, ze przez to wielu rzeczy nie wiem, a wielu probuje sie nauczyc od dupy strony. temu obecnie sobie siedze i przegladam filmy z wykladow na najlepszych uniwersytetach. ten wspomniany wyzej raczej podbudowuje mnie bo wszystko co w nim jest juz wiem i odetchnalem z ulga ze nie jest az tak zle ;)
To co umiesz po tych 7 latach? Co to jest dwukierunkowa lista powiązana?

i takich rzeczy wlasnie chcialbym sie douczyc :) teraz juz wiem co to bo sprawdzilem na wiki, jednak jeszcze chwile temu nawet nie znalem tej nazwy. i zastanawiam sie ile jeszcze jest takich rzeczy, ktorych nie tyle ze nie umiem, a nie wiem nawet ze istnieja.

konto usunięte

Temat: Po co to całe typowanie?

...i o 90% z nich się nie dowiesz pisząc w PHP. Twój wybór. Ale jak masz zapchane 2 miesiące wprzód, to nieźle..
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: Po co to całe typowanie?

Podejrzewam też, że pracując w PHP masz pewien określony profil klientów - zrób stronkę, zmodyfikuj Wordpressa, napisz jakieś extension (czu jak to się tam nazywa) do Joomli, itp. Do tego Java Ci nie będzie potrzebna. W Javie nie "robi się stronek", bo to się zwyczajnie nie opłaca - koszty stworzenia aplikacji a przede wszystkim infrastruktury i hostingu czyniłyby to przedsięwzięcie zupełnie nieopłacalnym.

Lista dwukierunkowa o której wspomniał Łukasz to absolutne podstawy z I semestru informatyki, podobnie jak inne struktury danych (np. drzewa), algorytmy sortowania, złożoność obliczeniowa. Tego nie poznasz przy okazji robienia stonek w PHP, ale i do niczego Ci się ta wiedza nie przyda.

Między Bogiem a prawdą w 90% nie przyda się również developerom aplikacji enterprise w Javie. Bo i po co, skoro niemal zawsze znajdą się jakieś commonsy które mają odpowiednią funkcjonalność już zaimplementowaną ;)

konto usunięte

Temat: Po co to całe typowanie?

Maciej Nowicki:
Między Bogiem a prawdą

Poprawnie: "Bogiem a prawdą" ;)

== "Po prawdzie" == "Naprawdę" == "Prawda jest taka, że"

Z moich domniemań i jakiejś tam znajomości polszczyzny wynika, że spójnik "a" był kiedyś wykorzystywany na równi ze spójnikiem "i" - obecnie rzadziej, ale znaczy to samo. Czyli wyrażenie to oznacza "Bogiem i prawdą jest, że w 90% nie przyda się (...)".
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: Po co to całe typowanie?

Maciej Nowicki:
Podejrzewam też, że pracując w PHP masz pewien określony profil klientów - zrób stronkę, zmodyfikuj Wordpressa, napisz jakieś extension (czu jak to się tam nazywa) do Joomli, itp. Do tego Java Ci nie będzie potrzebna. (cut)

Macieju, mylisz się zakładając, że PHP jest nastawione tylko na pisanie rozszerzeń do gotowych cmsów, czy też prostych stronek. Samemu zdarzało mi się pisać w tym języku rozproszone systemy.
Konrad Karpieszuk:
nie, nie :) ja nie chce sie uczyc javy. mi jest z php dobrze i bedzie dobrze dopoki bede mial klientow. podchodze do tego pragmatycznie :)

Java jeśli chodzi o rozwiązania z zakresu inżynierii oprogramowania jest zawsze o krok naprzód od PHP - ten zaś wiele z niej czerpie. Powinieneś chociaż dla samorealizacji coś porobić w innym języku, a horyzont i możliwości staną się większe.
Wg mnie PHP jest zbyt elastyczny, brakuje mu wyjątków, silnego typowania. Jeśli ktoś nie ma solidnych podstaw programowania, to będzie bazgrał w kodzie, do tego jeszcze wyłączy notice'y żeby nie musiał niczego deklarować.
Łukasz Karpuć:
...i o 90% z nich się nie dowiesz pisząc w PHP. Twój wybór. Ale jak masz zapchane 2 miesiące wprzód, to nieźle..

Język to tylko narzędzie. Małe projekty mogą ograniczać.

konto usunięte

Temat: Po co to całe typowanie?

Artur Świerc:
Łukasz Karpuć:
...i o 90% z nich się nie dowiesz pisząc w PHP. Twój wybór. Ale jak masz zapchane 2 miesiące wprzód, to nieźle..

Język to tylko narzędzie. Małe projekty mogą ograniczać.

Rozumiem, że napisałem nieprawdę a klepiąc dalej w samym PHP ma się szansę poznać choćby takie trywialne rzeczy jak wskaźniki czy wątki? Muszę się chyba doszkolić...
Marek Sierbin

Marek Sierbin Java Developer

Temat: Po co to całe typowanie?

Łukasz Karpuć:
dwukierunkowa lista powiązana
Jeśli już jesteśmy przy kwestiach językowych, to bardzo rozbawiła mnie powyższa kalka językowa. Jeśli wierzyć "pewnej" wyszukiwarce internetowej to tylko kilka osób dopuściło się tego typu określeń (dla "powiązana" i "wiązana").
Ciekawi mnie jak wg autorów tego tłumaczenia wygląda dwukierunkowa lista niepowiązana.

Nie mogę zgodzić się ze stwierdzeniem, że programując w Javie nauczysz się więcej niż w trakcie programowania w PHP. Osobiście najbardziej zaawansowane algorytmy, z jakimi miałem przyjemność się spotkać, napisane były w Fortranie. Ale to żadna reguła i zastosowany język programowania jest z pewnością jednym z najmniej znaczących czynników wpływających na występowanie (lub nie) bardziej złożonych struktur danych. W tej kwestii zgadzam się z Maciejem. Zresztą każdy programista wie, że nie ma sensu wyważać otwartych drzwi. Tym bardziej, że w kwestii algorytmów powiedziano już wystarczająco dużo i wystarczająco wiele z nich już dawno zaimplementowano. Używanie gotowych rozwiązań bez znajomości całej "wewnętrznej maszynerii" to raczej wątpliwa ujma.

Artur Świerc:
Samemu zdarzało mi się pisać w tym języku rozproszone systemy.
Czy mógłbyś się w takim razie wypowiedzieć co do wiarygodności przedstawionego tutaj (http://reverseblade.blogspot.com/2009/02/c-versus-c-ve... testu? Nie uznawałem nigdy PHP za demona prędkości, ale te wyniki są dla mnie "zastanawiające"... Marek Nibreis edytował(a) ten post dnia 26.11.11 o godzinie 22:04

konto usunięte

Temat: Po co to całe typowanie?

Ciekawy temat. Ja może nieco porzucę dyskusję n/t do czego nadaje się PHP a do czego Java - bo jest trochę bezcelowa i wrócę do początkowego pytania.

Generalnie teoria typów jest zagadnieniem z jednej strony bardzo skomplikowanym z drugiej nie tak znowu bardzo ścisłym. Pytanie, które początkowo zadał Konrad brzmiało 'Po co to (silne, w domyśle) typowanie' i po co określanie typów przy zmiennej. To są jednak dwa oddzielne zagadnienia.

W uproszczeniu systemy typów (oraz języki programowania) możemy podzielić na te ze słabym typowaniem oraz z silnym typowaniem. Te ostatnie dodatkowo dzielą się na dynamicznie typowane oraz statycznie typowane. Silne typowanie to zapewnienie tego, że dana posiada określony typ, który nie może być zmieniony w trakcie jej cyklu życia. I nic więcej. W jaki sposób się to dzieje to już cecha języka.

W części języków stosuje się mechanizm statycznego definiowania typów (np. Java, C#, ADA, C/C++, Haskell, OCaml, F#, Scala, Pascal etc.). W uproszczeniu typ jest weryfikowany na etapie kompilacji lub analizy składniowej. Jedne z tych języków mają te mechanizmy słabsze i z pewnymi wyjątkami (np. C/C++) a inne mocniejsze np. Haskell czy OCaml.

W części języków typ jest weryfikowany dynamicznie (w trakcie wykonywania programu). Np. w przypadku wszelkich dialektów Lispa, Smalltalk, Ruby, Python, JavaScript i dziesiątki innych języków etc. Może się wydawać, że te języki są bardzo podobne do języków ze słabym typowaniem (np. zwykle nie potrzeba w nich deklarować typu danych). Niemniej tak nie jest - dane *nie mogą zmieniać* typu w trakcie wykonania programu (zmienna liczbowa pozostaje zmienną liczbową). Aczkolwiek typ może być zwykle "rozszerzany" w trakcie działania programu.

Ciekawe jest to, że silne i statyczne typowanie *wcale* nie musi się wiązać z annotacją typów (określaniem typów i 'szumem w kodzie'). Wiele z nich implementuje bardzo zaawansowane mechanizmy 'type inference' (http://en.wikipedia.org/wiki/Type_inference). Warto spojrzeć na Haskella czy OCamla (czy jego nowsze dialekty takie jak F#), czy Scalę. Zwykle kod w Haskellu wygląda mniej więcej tak:

sum a b = a + b

Jak widać wcale nie stosujemy tutaj określania typów. Co nie zmienia faktu, że nie możemy zrobić czegoś takiego.

sum "2" 3

Podobnie sprawa ma się np. w Scali:

val xs = List(1,2,3,4,5)

ale już nie możemy zrobić xs - 8

Powyższe przykłady dają pojęcie na temat zalet takiego podejścia.

Mocne typowanie:

* daje pewność, że operacje (np. funkcje) mogą być aplikowane jedynie dla właściwych operandów (parametrów). Pewność ta jest na etapie kompilacji lub analizy składniowej (statyczna weryfikacja typów) lub w runtime (dynamiczna).

* pozwala uniknąć całej klasy potencjalnych błędów składniowych już na etapie kompilacji (statycznie typowanie)

* pozwala na stosowanie wielu narzędzi statycznej analizy kodu (np. FindBugs, PMD, CheckStyle etc.). Oczywiście jest wiele narzędzi tego typu dla języków dynamicznych - jednak są one o niebo mniej wyrafinowane (np. CodeNarc)

* pozwala na budowanie bardzo zaawansowanych narzędzi refaktoryzacji (znowu są takie narzędzia również dla języków dynamicznych, ale ponownie *nieporównywalnie* mniej niezawodne i funkcjonalne.

Mają one również, jak zauważyłeś, kilka wad. Przede wszystkim zwykle (choć nie zawsze) kod jest mniej zwięzły. Czasami również po prostu zalety silnego typowania nie są tak ważne: choćby w przypadku rozwiązań ad-hoc czy prototypownia. Stąd zwykle języki skryptowe (Perl, PHP, bash) są słabo typowane.

Nie ma jednego rozwiązania "dobrego dla wszystkich". Zawsze należy dobrać narzędzie do problemu a nie odwrotnie.Artur Karazniewicz edytował(a) ten post dnia 04.12.10 o godzinie 08:22

konto usunięte

Temat: Po co to całe typowanie?

Piotr Rusoł:
Na początek może trochę historii. Kiedyś, w powszechnym użytku były języki o słabej typizacji. Mam tu na myśli Fortran, Cobol, Lisp, Ada jak również C. Tak tak C jest językiem o słabym typie. Efekt pisania programów w tych

Piotr

Wszystkie te języki są akurat przykładami języków z silną typizacją. Co więcej Fortran, Cobol czy ADA mają *bardzo* mało elastyczny, statyczny system typów.

Artur

konto usunięte

Temat: Po co to całe typowanie?

Marek Sierbin:
Ciekawi mnie jak wg autorów tego tłumaczenia wygląda dwukierunkowa lista niepowiązana.

W taki sposób, że każdy z kolejnych elementów tej listy nie posiada wskaźnika na poprzedni/następny?
Nie mogę zgodzić się ze stwierdzeniem, że programując w Javie nauczysz się więcej niż w trakcie programowania w PHP.

Z Twojego punktu widzenia, być może, używanie pewnych konstrukcji wydaje się naturalne, ale jeśli ktoś używa tylko PHP, to wcale dobrych nawyków nie nabiera - wręcz przeciwnie. I stąd właśnie ten burdel w kodzie PHP. Po prostu pewnych rzeczy (jak odpowiedniego używania typowania, zalet polimorfizmu) nie da się nauczyć na PHP i tyle. Dynamiczne i słabe typowanie sprzyja wzrostowi entropii, jeśli nie jesteśmy nauczeni do porządkowania kodu niezależnie od kompilatora/interpretatora. Inaczej mówiąc: w językach słabo czy dynamicznie typowanych część roboty, która powinna być zrobiona tradycyjnie przez kompilator jest przenoszona na programistę - gdy nie rozumie on dlaczego powinien tego a tego przypilnować, to jest problem i brnie on w ślepą uliczkę. Szczególnie, że ludzie mają tendencję do rozwiązywania problemów w stylu "jeśli przejdzie, to jest ok" - a PHP czepia się bardzo mało...Łukasz Karpuć edytował(a) ten post dnia 04.12.10 o godzinie 12:27

Temat: Po co to całe typowanie?

Artur Karazniewicz:
Piotr Rusoł:
Na początek może trochę historii. Kiedyś, w powszechnym użytku były języki o słabej typizacji. Mam tu na myśli Fortran, Cobol, Lisp, Ada jak również C. Tak tak C jest językiem o słabym typie. Efekt pisania programów w tych

Piotr

Wszystkie te języki są akurat przykładami języków z silną typizacją. Co więcej Fortran, Cobol czy ADA mają *bardzo* mało elastyczny, statyczny system typów.

Artur

Nie do końca mogę się zgodzić z tym stwierdzeniem. W Fortran można było użyć zmiennej bez podania jej typu. O ile dobrze pamiętam wtedy pierwsze litery zmiennej były wykorzystywane do określenia typu. Co więcej aby kompilator nie pozwalał używać zmiennych niezadeklarowanych trzeba było (też o ile dobrze pamiętam) użyć opcji kompilacji Implicit none.

C - jest jak najbardziej słabo typizowany. To, że dziś GCC i inne kompilatory ładnie sieją błędami wynika z tego, że ktoś napisał analizator statyczny kodu, który jest uruchamiany tuż przed kompilacją. Normalnie na początku tego nie było. Można też wyłączyć go przez opcje kompilacji.

Co do Cobol mogę się mylić - nie napisałem ani jednej linii kodu w tym języku dzięki temu może jeszcze jestem w miarę normalny ;)

Z Ada to faktycznie się wyrwałem jak filip z konopi. Dziękuję za zwrócenie uwagi.

konto usunięte

Temat: Po co to całe typowanie?

Piotr Rusoł:

C - jest jak najbardziej słabo typizowany. To, że dziś GCC i inne kompilatory ładnie sieją błędami wynika z tego, że ktoś napisał analizator statyczny kodu, który jest uruchamiany tuż przed kompilacją. Normalnie na początku tego nie było. Można też wyłączyć go przez opcje kompilacji.

Język nie miał jednego standardu. Może tutaj Wasze wątpliwości?Łukasz Karpuć edytował(a) ten post dnia 04.12.10 o godzinie 12:47

Temat: Po co to całe typowanie?

Łukasz Karpuć:
Piotr Rusoł:

C - jest jak najbardziej słabo typizowany. To, że dziś GCC i inne kompilatory ładnie sieją błędami wynika z tego, że ktoś napisał analizator statyczny kodu, który jest uruchamiany tuż przed kompilacją. Normalnie na początku tego nie było. Można też wyłączyć go przez opcje kompilacji.

Język nie miał jednego standardu. Może tutaj Wasze wątpliwości?Łukasz Karpuć edytował(a) ten post dnia 04.12.10 o godzinie 12:47

Oczywiście, że tak. Fortran i C miało standardów, co nie miara :)

Taki mały przykład. Specyfikacja języka C dopuszcza:

void * p;

Od tej chwili mamy wskaźnik pozwalający wskazać na dowolny typ danych. Konstrukcja super elastyczna, swojego czasu silnie wykorzystywana i jak najbardziej ścigana ponieważ generowała masę błędów na etapie uruchomienia. Dziś bez sztuczek tego się już nie da zrobić.
Andrzej Chodor

Andrzej Chodor architekt IT,
programista

Temat: Po co to całe typowanie?

Piotr Rusoł:
void * p;
(...) Dziś bez sztuczek tego się już nie da zrobić.

Próbowałeś? ;)


#include <stdio.h>
int main() {
void *hello = &"Hello, world!\n";
printf("%s", (char*)hello);
return 0;
}


Poza tym ciekawa skądinąd dyskusja o zaletach i wadach silnej typizacji zeszła na przepychanki o jej słownikową definicję. Angielska wikipedia proponuje aż 9 wariantów :)
Jarosław Czub

Jarosław Czub FullStack Developer

Temat: Po co to całe typowanie?

Programując w PHP i Javie powiem tak, na podstawie własnej praktyki:

Zalety typów oraz definiowania zmiennych w javie:
- wyłapywania pewnych błędów już na etapie pisania kodu, typu
że mam zmienną $ala i w kodzie krzepłem literówkę $a1a. W php niekiedy się szło lekko zdenerwować, że kod nie działa, dlatego że
zmienna $a1a jest i istnieje, tylko że ma pustą wartość. Kompilator Javy, C/C# zaraz wyłapie takiego rodzaju błędy.
- wymuszona konwersja typów pozwala dokładnie przewidzieć jaki będzie wynik obliczeń, bo wiadomo na jakim zakresie działamy. W php spotkałem się z takim przypadkiem ze liczbę 1.0 interpreter traktował jako ciąg znaków "1.0"

Wady:
- zabawa z konwersją danych zajmuje dużo więcej niż napisanie podobnego kodu w php. Szczególnie jak trzeba konwertować zmienne tablicy albo objektu. W php zrobimy $tablica=$tablica1; $tablica=$tablica2 bez przejmowania się ilością elementów i ich typami, czy że mamy pomieszanie inty, floaty czy stringi.
- odczyt danych z DB w php zrobimy mysql_fetch_array i mamy wszystkie dane w jednej tablicy, w javie już tego nie zorbimy. Osobną metodą trzeba pobrać dane int, osobną floaty, osobną stringi. Jest o wiele więcej trzaskania kodu, chyba że użyjemy ORM'a.
- serializacja zmiennych tablicowych czy obiektów. W php serialize i praktycznie więcej nie musimy dię przejmować. W javie cała zabawa z Api do serializacji danych.Jarosław Czub edytował(a) ten post dnia 04.12.10 o godzinie 18:02

Temat: Po co to całe typowanie?

Andrzej Chodor:
Piotr Rusoł:
void * p;
(...) Dziś bez sztuczek tego się już nie da zrobić.

Próbowałeś? ;)


#include <stdio.h>
int main() {
void *hello = &"Hello, world!\n";
printf("%s", (char*)hello);
return 0;
}


Poza tym ciekawa skądinąd dyskusja o zaletach i wadach silnej typizacji zeszła na przepychanki o jej słownikową definicję. Angielska wikipedia proponuje aż 9 wariantów :)

A to jestem zdziwiony. Wady i zalety już sobie wyjaśniliśmy. Teraz dla rozrywki prowadzimy dyskusję akademicką. :)

konto usunięte

Temat: Po co to całe typowanie?

Piotr Rusoł:
Oczywiście, że tak. Fortran i C miało standardów, co nie miara :)

Ale nie ma C bez statycznej kontroli typów. Cały język się na tym zasadza. Nie mam pojęcia jak coś takiego mogłoby działać?
Taki mały przykład. Specyfikacja języka C dopuszcza:

void * p;

Oczywiście - ale to też jest typ danych. Ma taką cechę, że nic z nim nie zrobisz bez rzutowania go na jakikolwiek inny typ. Nie zrobisz czegoś takiego:

void* p = &"some";
strlen(p);

Musisz explicite rzutować powyższe:

strlen((const char*)p);

Jest to analogia do polimorfizmu (można uznać, że void* jest supertypem wszystkich typów wskaźnikowych w C).

Analogicznie jak w javie dla przykładu:

Object p = "some"

Jak najbardziej możesz sobie zrobić następnie krzywdę gdzieś w kodzie robiąc:

((List)p)

A przecież nikt nie uznaje Javy za system ze słabym typowaniem.

Praktycznie każdy język (poza może Haskellem, z języków który ja znam) ma takie lub inne mechanizmy, może nie tyle obchodzenia systemu typów, co pewnego rodzaju elastyczności w tym obszarze. I typ void wcale nie jest najdziwniejszą konstrukcją w tym obszarze jaką widziałem. W żadnym razie nie czyni ich słabo typowanymi. Analogiczny przykład do powyższego można znaleźć prawie wszędzie.

Artur

Temat: Po co to całe typowanie?

Jarosław Czub:
Programując w PHP i Javie powiem tak, na podstawie własnej praktyki:

Zalety typów oraz definiowania zmiennych w javie:
- wymuszona konwersja typów pozwala dokładnie przewidzieć jaki będzie wynik obliczeń, bo wiadomo na jakim zakresie działamy. W php spotkałem się z takim przypadkiem ze liczbę 1.0 interpreter traktował jako ciąg znaków "1.0"

Właśnie chodzi o pozbycie się tej klasy błędów, która jest najcięższa do wyłapania i najwięcej kosztuje.
Wady:
- zabawa z konwersją danych zajmuje dużo więcej niż napisanie podobnego kodu w php.

To prawda ale koszt z tym związany jest niewspółmiernie mały do szkód jakie może wywołać brak jego wymagalności.
- odczyt danych z DB w php zrobimy mysql_fetch_array i mamy wszytkie dane w jednej tablicy, w javie już nie bo osobną metodą trzeba pobrać dane int, osobną floaty, osobną stringo.

To nie do końca tak. Po prostu ktoś napisał tak API.
Jest o wiele więcej trzaskania kodu, chyba że użyjemy ORM'a.

W php też jest dużo trzaskania kodu jeśli nie masz warstwy pośredniej.
- serializacja zmiennych tablicowych czy obiektów. W php serialize i praktycznie więcej nie musimy dię przejmować. W javie cała zabawa z Api od serializacji danych.

To już nic nie ma wspólnego z silną typizacją a z tym jak ktoś zaprojektował serializację.

Temat: Po co to całe typowanie?

Artur Karazniewicz:
Piotr Rusoł:
Oczywiście, że tak. Fortran i C miało standardów, co nie miara :)

Ale nie ma C bez statycznej kontroli typów. Cały język się na tym zasadza. Nie mam pojęcia jak coś takiego mogłoby działać?
Taki mały przykład. Specyfikacja języka C dopuszcza:

void * p;

Oczywiście - ale to też jest typ danych. Ma taką cechę, że nic z nim nie zrobisz bez rzutowania go na jakikolwiek inny typ. Nie zrobisz czegoś takiego:

void* p = &"some";
strlen(p);

Musisz explicite rzutować powyższe:

strlen((const char*)p);

Jest to analogia do polimorfizmu (można uznać, że void* jest supertypem wszystkich typów wskaźnikowych w C).

Analogicznie jak w javie dla przykładu:

Object p = "some"

Jak najbardziej możesz sobie zrobić następnie krzywdę gdzieś w kodzie robiąc:

((List)p)

A przecież nikt nie uznaje Javy za system ze słabym typowaniem.

Praktycznie każdy język (poza może Haskellem, z języków który ja znam) ma takie lub inne mechanizmy, może nie tyle obchodzenia systemu typów, co pewnego rodzaju elastyczności w tym obszarze. I typ void wcale nie jest najdziwniejszą konstrukcją w tym obszarze jaką widziałem. W żadnym razie nie czyni ich słabo typowanymi. Analogiczny przykład do powyższego można znaleźć prawie wszędzie.

Artur

Mam pomysł. Panie Arturze wyłączy Pan analizator statyczny (LINT), który jest aktualnie puszczany za nim uruchomi się kompilator i jest rozszerzeniem do standardu.

Zobaczy Pan, że konstrukcja:

A zmienna1;
B zmienna2;

zienna1 = zmienna2 jest jak najbardziej możliwa.

Przekazanie zmiennej o innym typie niż funkcja tego wymaga też stanie się możliwe.

Kompilator tego nie wychwyci, co więcej będzie chciał coś z tym zrobić.

Podobne zjawisko występowało w Fortranie gdzie do tablicy znaków można było się spokojnie odwoływać jak do tablicy liczbowej i na odwrót. Najlepsze chce wychodziły jak do tablicy liczb zmiennoprzecinkowych odwoływało się jak do tablicy znaków.

Ok, jeżeli posiada Pan kompilator, który już ma w siebie wbudowaną statyczną kontrolę i nie da się jej wyłączyć to trudno się mówi. Wszak żaden żywy język nie stoi w miejscu.Piotr Rusoł edytował(a) ten post dnia 04.12.10 o godzinie 15:59



Wyślij zaproszenie do