[Flutter]Dart 2.15

김영진·2021년 12월 9일
0

Flutter 앱 개발 일기

목록 보기
20/31
post-custom-banner

목적

flutter 2.8에 맞춘 dart 2.15 팔로우업

내용

작업자 격리와 빠른 동시성

  • 모든 cpu는 병렬처리할 코어가 있다.
  • Dart는 싱글스레드다
  • 파일입출력, 네트워크 호출의 경우 추가 코어를 사용한다.

but

  • Dart코드는 동시에 실행되어야 할 수도 있다.(연속 애니메이션, 대용량 json파일 구문분석 등...)
  • 작업이 오래걸리면 ui에서 끊김이나 지연이 발생할 수 있다.
  • 코어 이동을 통해 애니메이션 중단 없이 메인 스레드에서 계속 실행될 수 있음

so

  • 동시성은 isolate에 기반을 두고 있다.
  • Dart는 변할수있는 객체도 메세지 전달을 사용하여 동시성을 해결한다(기존내용과 동일)
  • Dart 2.15에서 많은 실질적인 개선을 했다고 한다.
  • isolate groups 개념을 도입했다고 한다.
  • isolate groups의 isolate들은 내부 데이터 구조를 공유한다.
  • ioslate groups에서 추가적인 isolate를 만들경우 프로그램 구조 초기화할 필요가 없어서 100배의 성능향상
  • ioslate는 변할수있는 객체의 공유 접근을 막지만 추가 능력을 사용하게 할 수 있다.
  • isolate 끼리 객체를 던질수있고 isolate는 메모리의 큰 부분을 반환하는 worker를 분리시킬 수 있다

example

  • isolate.exit()을 호출하여 결과를 인수로 전달할 수 있다.
  • 다트 런타임에서 메모리에 결과를 던진다(worker isolate에서 main isolate로 복사하지 않고) 그리고 main isolate는 상수시간 안에 결과를 받는다.
  • compute()가 업데이트 되었다. isolate.exit()을 사용하기 위해서

finally

  • isolate message 메커니즘을 다시 구현함
  • 중,소 크기의 메세지는 8배의 성능개선 및 상수시간에 작업이 끝남
  • isolate 개체들을 확장되었다고한다.문서

study


생성자 분리

class Greeter {
  final String name;
  Greeter(this.name);
  
  void greet(String who) {
    print('$name says: Hello $who!');
  }
}
void main() {
  final m = Greeter('Michael');
  final g = m.greet; // g holds a function pointer to m.greet.
  g('Leaf'); // Invokes and prints "Michael says: Hello Leaf!"
}
final m = Greeter('Michael');
['Lasse', 'Bob', 'Erik'].forEach(m.greet);
// Prints "Michael says: Hello Lasse!", "Michael says: Hello Bob!",
// "Michael says: Hello Erik!"

플러터에서 이렇게 활용될수 있고

class FruitWidget extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return Column(
        children: ['Apple', 'Orange'].map(Text.new).toList());
  }
}

아마 기존 소스라면

class FruitWidget extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return Column(
        children: ['Apple', 'Orange'].map((fruit) => Text(fruit)).toList());
  }
}

이렇게 짜야 했겠지?


관련 언어 변경

제네릭 메서드를 구체화하여서 제네릭 메서드가 아닌 메서드를 만들수 있다

T id<T>(T value) => value;
var intId = id<int>; // New in 2.15.
int Function(int) intId = id; // Pre-2.15 workaround.

소스보니까 기존에도 되던건데 코드가 간단해졌네요

const fo = id; // Tear off `id`, creating a function object.
const c1 = fo<int>; // New in 2.15; error before.

제너릭함수를 int를 반환하는 함수로 캐스팅하는 간단한 예제인듯

var y = List; // Already supported.
var z = List<int>; // New in 2.15.
var z = typeOf<List<int>>(); // Pre-2.15 workaround.

리스트 선언하기 편해지겠네요

enum (dart:core) library 개선

와 이거 너무 반갑네요

enum MyEnum {
  one, two, three
}
void main() {
  print(MyEnum.one.name);  // Prints "one".
}

원래 enum 출력찍으면 객체값이였나 이런게 날라왔었는데 이제는 고차함수로 name을찍으면 값을 받아올 수 있네요.

print(MyEnum.values.byName('two') == MyEnum.two);  // Prints "true".

name을 활용해서 enum을 찾을수도 있네요

final map = MyEnum.values.asNameMap(); 
print(map['three'] == MyEnum.three);  // Prints "true".

enum을 Map으로 캐스팅 할수있네요 이제
아마 맵은 이런 형태가 되겠네요

myEnum {
    one : MyEnum.one,
    two : MyEnum.two,
    three : MyEnum.three,
}

Compressed pointers

32비트도 잘 지원한다는 내용인듯(데탑이랑 연관성이 있는듯)

Dart개발툴이 Dart SDK에 포함된다

그렇군요

패키지 올리는사람들을 위한 pub 기능 추가

  1. 실수로 자격증명이나 중요한 정보를 올리는것을 탐지, 탐지될경우 명령이 종료되고 아래와같이 출력
Publishing my_package 1.0.0 to https://pub.dartlang.org:
Package validation found the following errors:
* line 1, column 1 of lib/key.pem: Potential leak of Private Key detected.
╷
1 │ ┌ - - -BEGIN PRIVATE KEY - - -
2 │ │ H0M6xpM2q+53wmsN/eYLdgtjgBd3DBmHtPilCkiFICXyaA8z9LkJ
3 │ └ - - -END PRIVATE KEY - - -
╵
* line 2, column 23 of lib/my_package.dart: Potential leak of Google OAuth Refresh Token detected.
╷
2 │ final refreshToken = "1//042ys8uoFwZrkCgYIARAAGAQSNwF-L9IrXmFYE-sfKefSpoCnyqEcsHX97Y90KY-p8TPYPPnY2IPgRXdy0QeVw7URuF5u9oUeIF0";
  1. 이미 올린 패키지 철회 가능
    패키지 버전이 철회되면 pub 클라이언트는 pub get 또는 pub 업그레이드에서 더 이상 해당 버전으로 결정되지 않는다. 개발자가 이미 철회된 버전으로 해결한 경우(따라서 pubspec.lock 파일에 있음), 다음에 펍을 실행할 때 경고가 표시됩니다:
$ dart pub get
Resolving dependencies…
mypkg 0.0.181-buggy (retracted, 0.0.182-fixed available)
Got dependencies!

양방향 유니코드 문자 탐지를 위한 보안 분석(CVE-2021–22567)

유니코드로 공격이 들어올수있는데 그걸 필터링해주는게 추가된듯

타사 pub 서버(CVE-2021–22568) 사용 시 Pub.dev 자격 증명 취약성

자격증명 취약점 개선된듯

마무리 발언

연휴를 즐겨라

결론

enum 반갑고,
isolate는 제대로 써본적이 없어서,,,
제너릭 캐스팅하는것도 편해질듯
그리고
연휴를 즐기자

profile
2021.05.03) Flutter, BlockChain, Sports, StartUp
post-custom-banner

0개의 댓글