🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #268152

Re: Ciemna strona C++

#268152
From: Marcin ‘Qrczak’ Kowalczyk
Date: Sat, 24 Nov 2007 00:22
53 lines
4243 bytes
Dnia 23-11-2007, Pt o godzinie 22:27 +0100, Seweryn Habdank-Wojewódzki
pisze:

> > Tyle tylko, że C++ bardzo rzadko wykorzystuje brzmienie identyfikatora
> > w czasie wykonania. Może ono zostać złapane przez konstrukcję #foo
> > preprocesora i jeśli jakaś biblioteka ma interfejs w tej formie
> > (tzn. oczekuje, że kod używający biblioteki przekaże jej coś, co
> > zostanie w ten sposób zestrigifikowane), to też nie można przekazać
> > tą drogą dowolnego stringa.
> 
> To jest za mądre dla mnie. Czy możesz napisać jakiś obrazowy kod, albo jakoś
> innymi słowami to napisać.

Zagadnienie nie jest warte tego, żeby się nad nim rozwodzić. Poważny kod
C++ nie będzie używał stringifikowanych argumentów makr jako jedynego
mechanizmu przekazywania stringów, które mogą brzmieć dowolnie, więc
problem jest hipotetyczny. Nie wykluczam, że jakaś biblioteka mogła
go popełnić (może jakieś wiązanie z bazą danych albo z innym językiem
postanowiło oczekiwać składni bez ""), ale wątpię. Zresztą można by go
w konkretnym przypadku obejść zaglądając do definicji makr.

W Pythonie też można to obejść, jeśli jakieś stringi można przekazać
wyłącznie w formie nazw nazwanych argumentów funkcji, a chcemy akurat
przekazać stringa, który nie wygląda jak identyfikator. Wywołanie
f(1, foo=2, bar=3) jest równoważne f(1, **{'foo':2, 'bar':3}), a tu już
można użyć dowolnych kluczy. Podobnie jak poprzednio problem jest raczej
hipotetyczny. dict(foo=1, bar=2) jest po prostu skrótową możliwością
opisania zawartości słownika, którego klucze wyglądają jak identyfikatory;
możliwość zapisania takiej składni istniała tak czy siak - taka jej
interpretacja sama się narzucała, więc swego czasu ją dodano.

Perl ma inną wariację na temat zamiany identyfikatora na string:
operator => znaczy tyle, co przecinek, ale jeśli wyrażenie po lewej to
goły identyfikator, to jest on traktowany jako string. Podobnie dzieje
się w kilku innych kontekstach. To jest o tyle nieszkodliwe, że w Perlu
wyrażenie rzadko kiedy ma postać gołego identyfikatora (zmienne mają $
przed nazwą). No i można wziąć stringa w "" albo '', jeśli nie wygląda
jak identyfikator.

Lisp i Kogut mają jeszcze inne konstrukcje składniowe, w których coś,
co wygląda jak identyfikator, kończy jako string albo coś podobnego.

> Jak już mowa o zaletach Koguta, to zapytam kiedy wydasz jakiś beginer
> tutorial,

Nieprędko. Ale robię porządniejszy reference manual (zresztą inną
techniką: LaTeX -> PDF) i on na pewno będzie w miarę gotowy za parę
miesięcy.

-- 
   __("<         Marcin Kowalczyk
   \__/       qrczak@knm.org.pl
    ^^     http://qrnik.knm.org.pl/~qrczak/
Technical Details
Message-ID: <1195863743.20523.141.camel@qrnik>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <20071106002442.aebf0037.sulsa@dontmail.me> <fgqpbs$9cu$1@news.vectranet.pl> <20071107012633.3efe623d@Vorago> <fgtc67$orn$1@news.vectranet.pl> <fgv710$kde$1@bozon2.softax.pl> <fgv9u6$jm0$1@news.vectranet.pl> <fhfdq5$4bk$1@bozon2.softax.pl> <fi3cqb$et1$2@news.vectranet.pl> <fi41s4$dk4$1@bozon2.softax.pl> <fi4kpq$mc2$1@news.vectranet.pl> <1195760702.23696.4.camel@qrnik> <fi4nbj$oqa$1@news.vectranet.pl> <1195767982.23696.19.camel@qrnik> <fi51op$2f7$1@news.vectranet.pl> <1195776668.23696.46.camel@qrnik> <fi7fpe$e7g$1@news.vectranet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail
From: Marcin ‘Qrczak’ Kowalczyk
 <qrczak@knm.org.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: Ciemna strona C++
Date: Sat, 24 Nov 2007 01:22:23 +0100
Organization: tp.internet - http://www.tpi.pl/
Lines: 74
Message-ID: <1195863743.20523.141.camel@qrnik>
References: <fghgeo$spf$1@nemesis.news.tpi.pl>  <20071106002442.aebf0037.sulsa@dontmail.me>  <fgqpbs$9cu$1@news.vectranet.pl> <20071107012633.3efe623d@Vorago>  <fgtc67$orn$1@news.vectranet.pl> <fgv710$kde$1@bozon2.softax.pl>  <fgv9u6$jm0$1@news.vectranet.pl> <fhfdq5$4bk$1@bozon2.softax.pl>  <fi3cqb$et1$2@news.vectranet.pl> <fi41s4$dk4$1@bozon2.softax.pl>  <fi4kpq$mc2$1@news.vectranet.pl> <1195760702.23696.4.camel@qrnik>  <fi4nbj$oqa$1@news.vectranet.pl> <1195767982.23696.19.camel@qrnik>  <fi51op$2f7$1@news.vectranet.pl> <1195776668.23696.46.camel@qrnik>  <fi7fpe$e7g$1@news.vectranet.pl>
NNTP-Posting-Host: hjd150.internetdsl.tpnet.pl
Mime-Version: 1.0
X-Trace: nemesis.news.tpi.pl 1195864088 23818 79.187.237.150 (24 Nov 2007 00:28:08 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Sat, 24 Nov 2007 00:28:08 +0000 (UTC)
In-Reply-To: <fi7fpe$e7g$1@news.vectranet.pl>
X-Mailer: Evolution 2.12.1 PLD Linux
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit