๋ฒ์ ๋จ๊ณ:
# Extract package:retry version 3.0.1
$ curl -L https://storage.googleapis.com/pub-packages/packages/retry-3.0.1.tar.gz | tar -xz
$ pub get
# Get dartdoc from git
$ mkdir /source/dartdoc
$ git clone https://github.com/dart-lang/dartdoc.git /source/dartdoc
$ cd /source/dartdoc; pub get; cd -;
# Generate docs
$ dart /source/dartdoc/bin/dartdoc.dart
pubspec.yaml
๋ํ package:retry
์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
environment:
sdk: ">=2.0.0 <3.0.0"
๊ทธ๋ฆฌ๊ณ .dart_tool/package_config.json
๋ package:retry
๋ํ ์ธ์ด ๋ฒ์ 2.0์ ์ง์ ํฉ๋๋ค.
{
"configVersion": 2,
"packages": [
/* various other dependencies, mostly test and it's transitive dependencies, omitted here */
{
"name": "retry",
"rootUri": "../",
"packageUri": "lib/",
"languageVersion": "2.0" // <-- language version 2.0, hence, no library in package:retry supports null-safety
}
],
"generated": "2020-10-21T10:44:27.912220Z",
"generator": "pub",
"generatorVersion": "2.10.0"
}
์์์น ๋ชปํ ๊ฒฐ๊ณผ:
retry
ํจ์๊ฐ null
๋ฐํํ ์ ์๋ ๊ฒ์ ๋ง์ง๋ง ํจํค์ง๋ null-safety๋ก ๋ง์ด๊ทธ๋ ์ด์
๋์ง ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ์ด๋ค ์ข
๋ฅ์ null-safety ํ๊ทธ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๊น?
๋ฉ๋ชจ. ๊ฐ๋ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ null-safety๋ฅผ ์ ํ ํด์ ํ ์ ์๋ ๊ฒ์ ์ณ์ต๋๋ค. ๋ฐ๋ผ์ ํจ์๋ ํด๋์ค๊ฐ null-safety๋ฅผ ์ง์ํ๋์ง ์ฌ๋ถ๋ฅผ ์ฃผ์์ผ๋ก ํ์ํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์ฃผ์ฅํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ ์์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋๋ ๋๋ถ๋ถ์ ํจํค์ง์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ ์์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋ฉ๋๋ค.
ํธ์ง: ๋๋ ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ๋ฌด์์ ํด์ผ ํ๋์ง ์์ ํ ํ์ ํ์ง ๋ชปํฉ๋๋ค. ์ธ์ด ๋ฒ์ >= 2.12.0์ด ์๋ ํจํค์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ "null-safety"๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์๋ง๋ ์๋ชป๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ์๋ง๋ ํ๋ฆด ์ ์๋ค๋ ๋ฐ ๋์ํ์ญ์์ค. ์ฌ๊ธฐ์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํ์คํ์ง ์์ง๋ง ๋ด์ผ ์กฐ์ฌํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ด ๋๋ฆฌ ํผ์ง ๊ฒฝ์ฐ(์ฆ, ์ง๊ธ ์ฐ๋ฆฌ๋ ์ด๋ค ์ด์ ๋ก ์ด์ ๊ฐ์ด ๋ชจ๋ ๊ฒ์ ํ์ํ๊ณ ์์ต๋๋ค) ์๋ง๋ P1์ผ๋ก ์์นํด์ผ ํฉ๋๋ค.
๋๋ ๋ถ์๊ธฐ๊ฐ ์ด๊ฒ์ด null-safe ํจํค์ง๊ฐ ์๋๋ผ๋ ์ฌ์ค์ ์ฌ์ ํ ์๊ณ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง, ์ด์ ์ฐ๋ฆฌ๋ null ์์ ํ๊ทธ๋ฅผ ์ฌ๊ธฐ์ ๊ธฐ์ ๋ฟ๋ฆฌ๊ณ ์์ต๋๋ค.
@jcollins-g ๋ฉค๋ฒ ์์ค์์ ์ด ํ๊ทธ๋ฅผ ์ํ๋ ์ ์ด ์์ต๋๊น? ์๋ฅผ ๋ค์ด pub.dev์ ๊ฐ์ ๋ค๋ฅธ ๊ณณ์์๋ null ์์ ์ ํจํค์ง ์์ค ์์ฑ์ผ๋ก ์ทจ๊ธํ ๊ฒ์ ๋๋ค(์ ์ฒด ํจํค์ง์ ํฌํจ๋๊ฑฐ๋ ํฌํจ๋์ง ์์).
@mit-mit ๋๋ ๊ทธ๊ฒ์ ๋ํด ๊ฐํ ์๊ฒฌ์ด ์์ต๋๋ค. API ๋ฌธ์ ๋ชจ์์ ํ์ํ๊ณ ํจํค์ง ๊ฒฝ๊ณ๋ฅผ ๋์ ๋ null ์์ ํจํค์ง์(๋๋ ๋น ์ ธ๋์จ) ๋๋ฅผ ์๋ ๊ฒ์ด ์ข์ ์ ์์ผ๋ฉฐ ๋ฉค๋ฒ ํ๊ทธ๊ฐ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ด๋ผ๋ ์ฃผ์ฅ์ด ์์ต๋๋ค. ์ ๊ฒ.
์ฌ๊ธฐ์ ๋ฃ์ด๋ ๋ ๊น์?
API ๋ฌธ์ ๋ชจ์์ ํ์ํ๊ณ ํจํค์ง ๊ฒฝ๊ณ๋ฅผ ๋์ ๋ null ์์ ํจํค์ง์(๋๋ ๋น ์ ธ๋์จ) ๋๋ฅผ ์๋ ๊ฒ์ด ์ข์ ์ ์์ผ๋ฉฐ ๋ฉค๋ฒ ํ๊ทธ๊ฐ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ด๋ผ๋ ์ฃผ์ฅ์ด ์์ต๋๋ค. ์ ๊ฒ.
์ผ๋ฐ์ ์ผ๋ก null-safe ํจํค์ง์์ null-safeํ์ง ์์ ํจํค์ง๋ก ๋์ด์ง๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๊น?
pub.dev
์์ pana
pub.dev
์ ๋ถ์์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ง ํจํค์ง๋ฅผ null-safety ๋ฅผ
>=2.12
.// @dart=2.5
)๋ฅผ ์ฌ์ฉํ์ฌ null ์์ ์ ์ ํ ํด์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค.pub upgrade
ํด์๋์ ๋ชจ๋ ์ข
์์ฑ( dev_dependencies
์ ์ธ)์ _null-safety_๋ฅผ ์ง์ํฉ๋๋ค(์ด ์ฌ๊ท ์ ์์ ๋ฐ๋ฆ).๋ฐ๋ผ์ null ์์ ์ ์ง์ํ๋ ํจํค์ง์ ๋ํ ๋ฌธ์๋ฅผ ์ฝ๊ธฐ ์์ํ๋ฉด ์ค์๋ก null ์์ ์ด ์๋ ํจํค์ง/๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ์ฐํ ๋ฐ๊ฒฌํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
๊ทธ๋ฌ๋ null-safe๊ฐ ์๋ ํจํค์ง์์ ์์ํ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Google ๊ฒ์์์ ๋ฌธ์ ํ์ด์ง๋ฅผ ์ฐพ์์ ๋ฌธ์ ํ์ด์ง๋ฅผ ์ฐพ์ ๊ฒฝ์ฐ์๋ ์์๋๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ค ๋ ์ด๋ธ์ด ์ข์ ์ ์์ต๋๋ค.
์ด๊ฒ์ https://github.com/dart-lang/sdk/issues/43903 ์ผ๋ก ์ธํด ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๋ก ๋ฐํ์ก์ผ๋ฉฐ ์คํ ํ๋๊ทธ์ ์ฌ์ฉ ๋ฐฉ์์ผ๋ก ์ธํด ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ์ด๊ธฐ๋ ํฉ๋๋ค. nullable์ด ์๋ ๊ฒฝ์ฐ. ์ด ๋ฌธ์ ๋ ํ๋๊ทธ๊ฐ ๊ธฐ๋ณธ๊ฐ์ด ๋๋ฉด "์ฌ๋ผ์ง" ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์๋นํ ๋ ธ๋ ฅ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ํ๋๊ทธ๊ฐ ๊ณง ๋ถ์๊ธฐ์์ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์ค์ ๋๋ค๋ ๊ฐ์ ํ์ ํ๊ทธ๊ฐ ์ ์ ๋์ ์๋ชป๋๋๋ก ๋ด๋ฒ๋ ค ๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์์ผ์ ๋ถ์ ํ๊ณผ ๋ ผ์ํ ์์ ์ ๋๋ค. ๋๋ถ๋ถ์ ์ค๋ ์ข ๋ฃ๋ฉ๋๋ค.
๋์ ์์์ด ์์ต๋๋ค. ํ๋๊ทธ๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํด๋ ์ค์ ๋ก ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ถ๊ฐ ์์ ์ด ํ์ํฉ๋๋ค. ์ข์ ์์์ @scheglov๊ฐ ์ด๋ฏธ #2309์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ถ์๊ธฐ์ dartdoc์์ ๋ง์ ์์ ์ ์ํํ์ง๋ง ์ ๋ฐ์ดํธํด์ผ ํ๊ณ ์ผ๋ถ Windows ํธํ์ฑ ๋ฌธ์ ๊ฐ ์์ ๋์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์์ ์ด ์๋ฃ๋๋ฉด ์ด ๋ฒ๊ทธ๋ฅผ ์์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
ํ์ฌ #2309๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ PR์ ์์ํ๊ณ ๊ทธ๊ฐ ์ง๋ฉดํ ๋ฌธ์ ๋ฅผ ์์ ํ๊ณ ๋ณํฉ ์ถฉ๋์ ํด๊ฒฐํ๊ธฐ ์ํด ์ผํ๊ณ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๋ฐ์ดํธ๋ ๋ฒ์ ์ #2309๋ฅผ ์ฌ์ฉํ๋ ค๋ ์๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์งง์ ๋ฒ์ ์ dartdoc์ด ๊ธฐ๋ณธ์ด ์๋ ๋ฆฌ์กธ๋ฒ๊ฐ ํ์ํ ์ผ๋ถ ํญ๋ชฉ์ ํ์ฉํ๋ฏ๋ก ์ผ๋ถ ํ ์คํธ๊ฐ ์คํจํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ์๋ง๋ ํด๊ฒฐํ ์ ์์ง๋ง ๊ธฐ๊ฐ ๋ด์ ํด๊ฒฐ๋์ง๋ ์์ต๋๋ค.
"์์ "ํ๋ ค๋ ๋ ๋ฒ์งธ ์๋๋ dartdoc ๋ด๋ถ์ pubspec ์ฝ๊ธฐ ๋ ผ๋ฆฌ๋ฅผ ๋ค์ ๊ตฌํํ์ต๋๋ค. ์ด๊ฒ์ ์ด๋ฆฌ์์ ์ผ์ด์์ง๋ง ํจ๊ณผ๊ฐ ์์์ ๊ฒ์ ๋๋ค. @scheglov ๋ ์ด๊ฒ์ด ํจํค์ง๋ฅผ AnalysisDriver์ ์ ๋ฌํ์ง ์์ ๋ฐ์ํ ์ ์๋ค๊ณ ์ง์ ํ์ผ๋ฉฐ ์ค์ ๋ก ์ด๋ฅผ ์ํํ์ง ๋ชปํ์ต๋๋ค.
AnalysisContextCollection์ ๋ํ ํฌํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ฒ๊ทธ #2410์ ์ ์ถํ์ฌ ํด๋น ๋ถ์ฑ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ๋ฉด ๋ฏธ๋์ ์ด์ ๊ฐ์ ๋ ํผ๋์ค๋ฌ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ ๋๋ค.
null ์์ ํ๊ทธ์ ์์น ๋ณ๊ฒฝ์ ๋ํ @mit-mit์ ์๊ฒฌ์ ๊ตฌํํ๊ธฐ ์ํด ๋ฒ๊ทธ #2409๋ฅผ ์ ์ถํ์ต๋๋ค.
#2411์ด ์ถ์๋ ํ ๋ซ๊ณ ์ ๋ฒ์ ์ ๊ฒ์ํ๊ธฐ ์ํด ์ด๋ํฉ๋๋ค.