
C# and Blazor - with Mads Torgersen, Dan Roth, and Scott Hunter!
Durée: 69m23s
Date de sortie: 03/02/2024
In this episode, I was honoured to be joined by Mads Torgersen, Dan Roth, and Scott Hunter!!! 🤯 We chatted about Blazor in .NET 8; C#12 interceptors, C#13, C#36 (you have to listen 😉), source generators, discriminated unions, AOT, and Stephen Toub’s performance blog posts!Mads, Dan, and Scott all work for Microsoft, and are heavily involved in .NET. Mads is the Lead Designer of C#, Dan is Product Manager on the ASP.NET Team for Blazor, and Scott is the VP of Product, working on the Azure Dev ...
Bonjour à tous et bienvenue à l'Unhandled Exception podcast. Je suis Dan Clark et c'est épisode
65. Aujourd'hui, je suis en train de faire un syndrome poste, comme je suis maintenant
en train de faire un record en virtual avec Scott Hunter, Mads Torgerson et Dan Roth.
Donc, merci que ce n'est pas live, donc je peux éditer les moments où je peux y avoir.
Donc, oui, un grand bienvenue à Dan et Mads et bienvenue à Scott. Je pense qu'il y a
seulement quelques épisodes avant depuis la dernière fois.
Oui, c'était le timeframe de la nuit, non? Ou le timeframe de la nuit?
Oui, le timeframe de la nuit.
C'était le timeframe de la nuit?
Oui, c'était le timeframe de la nuit.
Il y a eu quelques annonces intéressantes.
Ce sont les mêmes semaines.
Les gens qui l'ont écouté, la raison dont je les ai mixés, c'est que les gens étaient
en même temps, en même week, en même chaîne, en même tout.
Ce doit être une semaine de bise.
Pourquoi je vais dire que pour nous, Dan, c'est un peu de repos.
Je n'ai pas eu le temps avant tout ce que nous avons parlé de demos pour Bill.
Bill 2024, mai de ce année, est déjà dans notre cerveau.
Il semble que tu vas juste arrêter 1 et tu vas au prochain.
Nous sommes tous prêts pour le prochain.
Ces gens vont travailler sur Doctonet 9 et C-Sharp 37 et Mads et Nutsphile.
Je suis en train de construire.
J'aime cette sort de heartbeat semi-annuelle que nous avons maintenant.
On a un endroit où nous avons écouté la vision et monté les démons d'earment.
Et puis, le grand éleveur à la fin de l'année.
C'est bien, j'aime notre cadence.
J'ai vu un blog poste avant et il m'a dit de la nouvelle C-Sharp et la neige de Doctonet 9.
Et je suis allé au premier de version 10.
Et je me suis dit, vraiment?
Et puis j'ai vu le titre qui m'a dit April Fool.
Il m'a dit, c'est un second de Hapney.
Mais oui, c'est bien, c'est bien de voir ce cadence.
C'est le premier temps que l'on a récordé.
Ce n'était pas l'année avant l'année, le premier bâtiment.
C'était avec Gareth Seth.
Oui.
Oui, c'était bien.
Alors, même si je suis sûr que les introductions ne sont pas nécessaires,
parce que la plupart des listeners ont entendu tout de vous.
Juste en cas que nous pouvons juste aller autour de la table
et que vous pouvez vous introduire pour les listeners.
Et dites-le un peu sur ce que vous faites.
Bien sûr, je peux commencer.
Bien sûr, depuis que Scott a été ici, c'est beaucoup déjà.
Je suis Mad Storgerson et je suis travaillé pour Microsoft
pendant 18 ans et pour tout ce temps,
j'ai été invité dans le design sur le langage C-Shark.
Je suis maintenant le designur.
Nous ne sommes pas encore prêts, nous continuons à ajouter.
Je suis Dan Roth,
je suis le manager product sur le team ASB.NET
pour Blazor.
Je parle avec nos frameworks web et des offreurs sur .NET.
Je suis Scott Hunter, je travaille sur le team ASB
après spending 15 ans de mon temps sur Microsoft en .NET.
Et même si les gens ont construit les tools de développement
et les services de développement pour Azure,
nous nous sommes sûrs que le .NET est le meilleur langage
dans tous ces services et les tools.
Je vous en prie, je l'ai fait.
Nous avons également mis tous nos bases à la table.
Si on a Scott, vous avez mis .NET, Mad St.C-Shark,
avec Blazor et ASB.NET,
je vais en fait avoir hâte d'avoir un mail de VF-Sharp,
je ne peux pas dire,
peut-être pas toutes les bases à la table,
mais on a les bases à la table.
En novembre, en .NET.com,
comme vous l'avez dit, Scott et moi ont fait un épisode
sur les announcements de .NET.
Nous avons chatté des Aspire,
des features C-Sharp 12,
et nous avons touché sur Blazor.
Mais nous n'avons pas fait trop de blazor
par le temps de la montagne.
Ça fonctionne bien,
parce que, dans la recording,
c'est comme ça, votre chose.
Donc, c'est vraiment bien si on peut faire un petit dégagement
de la blazor,
et aussi, on n'a pas fait de la C-Sharp intercepteur,
ce qui serait très intéressant de le faire.
Et est-ce trop tard
pour parler de C-Sharp 13 ?
Non, on peut parler de ça.
Pas trop tard.
Pas trop tard pour parler de la feature C-Sharp.
Vous avez dit que ce serait le version que vous avez mentionnée
avant Scott, comme C-Sharp 13 ?
Je disais 36, je voulais voir si Mads m'a dit.
Je disais,
mais il a dit que c'est 36 chattes.
On est très proches.
Je pense que, on va commencer avec Blazor.
Et même si Blazor a fait un truc,
mais c'est une chatté de groupe,
donc, personne ne va le faire.
On parle d'Aspire,
et avec ma fascination de Kubernetes,
vous pensiez que la Blazor
serait ma highlight.
Mais, je vais être honnête,
Blazor était une highlight joint,
parce que tout le changement
avec Blazor, avec Donate 8,
en passant,
on pouvait utiliser ça pour des applications
où vous pouvez utiliser ça pour
d'autres websites.
Si j'avais voulu faire mon blog,
je me suis dit que je vais utiliser ça.
Je pense que c'est incroyable.
Pour les listeners qui n'ont pas regardé,
peut-on parler de ce qu'il y a de la Blazor ?
Il y a beaucoup de la Blazor,
et la Donate 8.
La Donate 8 était une grande release pour Blazor.
Quand on a originalement
étendu la Blazor,
on était vraiment en train de penser
de la Blazor comme une alternative
pour avoir à faire un code en JavaScript
quand vous avez déjà construit
beaucoup de vos applications
dans Donate.
Mais, la Donate 8, Blazor est
une offre de Web UI
pour les applications.
Vous pouvez utiliser le spectrum
de patterns que vous voulez faire
dans votre web app,
en utilisant le model
de la single Blazor component.
En l'année passée, nous avons
la lait de la Blazor et les pages de la Blazor
pour faire le rendering de la service
de Web UI. Vous vous envoyez un réquest.
Vous vous rendez votre view de la Blazor
ou vous avez des HTML
et le réquest est terminé.
C'était incroyable pour tout ce qui s'est passé
sur la service, mais pour une actif clientiel
vous avez généralement dû ajouter
un JavaScript dans votre app.
Avec la Blazor Server et la Web Assemblée
ils vous ont donné un moyen de vous dédier
avec la activité clientielle, mais
ils n'ont pas vraiment fait de la rendering
de la service. Ils n'ont pas de
des déchets de la liste de
caractéristiques de
les contrôler sur la service. Et beaucoup de
la simplicité qui vient de faire des choses
sur la service. Quand vous vous rendez
sur la service, vous êtes là,
dans l'environnement de la service, vous pouvez
accéder à votre data, vous pouvez utiliser
les ressources de la service, pour générer
la lait de la présentation. Quand vous vous réoperez
sur les gens qui sont toujours en train de
faire un JavaScript, vous pouvez aussi
faire un JavaScript, et ça vous fait
de l'exemple, si vous êtes un dev,
beaucoup de shops de .NET
ont une compagnie de JavaScript
qui construit leurs frontiers.
Avec .NET 8, nous avons pris
tous ces idées, ces concepts, et
nous avons mis elles dans un
uniquement unifié framework. Vous
pouvez maintenant faire un rendering
de la service avec vos components Blazor,
et les scale-out, et la grande
expérience de la service,
et vous pouvez ajouter
l'interactivité cliente,
par la compagnie de la service
de la service,
ou le model WebAssembly,
où vous vous pliez
le logic de la service,
et vous vous rendez sur la machine de
les utilisateurs. Vous pouvez
faire le spectre avec un offering,
c'est maintenant un
approche recommandé, pour
construire WebUI avec .NET.
Si vous vous faites un nouveau Web app,
Blazor est vraiment où il est.
Je pense que c'est ce que j'aime
de la service, c'est qu'il y a un
site avec un Web app,
donc pas un bar,
et le model de Blazor component
est très bien. Je m'ai
mis ça quand j'ai eu
l'air de utiliser la page de la
service, où maintenant,
en tant que site, je peux
utiliser le model de Blazor, qui
fonctionne très bien.
Je pense que
vous avez mentionné qu'il y a un projet
maintenant, où avant,
quand vous étiez créé une application de Blazor,
vous avez dû choisir
de la service de Blazor,
et j'ai perdu le nombre
de conversations que j'ai eu, où j'ai dû
expliquer ces choses à la personne, et
les décisions architectuelles
avant le départ de un projet,
qui est la bonne chose pour cet projet,
où maintenant c'est juste un projet template,
n'est-ce pas ?
Oui, vous avez juste créé la application de Blazor.
Avant, vous avez toujours
créé cette application de Blazor,
à la fin de la journée, et les gens
ont l'air d'être inquiets, et ils se sont
inquiets, mais qui a-t-il été créé ?
Je pense que même dans l'an
l'enquête de la service de Blazor
était la même chose. Si vous voulez
changer de la service de Blazor,
vous n'avez pas pu complètement réévaluer
vos components, en supposant que
vous avez installé votre présentation
d'où ils étaient being hostés,
vous pouvez changer de la service de Blazor,
les components de Blazor sont faits
pour ne pas faire de ces models hostés.
Mais oui, c'est beaucoup plus simple
dans la journée, comme la histoire est,
vous pouvez construire une app Blazor Web app,
et vous avez maintenant la flexibilité
dans votre application de
tuer comment vos components sont being
portés par un component,
ou par un level de page. Vous pouvez
faire ça en développant l'application.
Hey Dan, si j'ai
une application de la base de la base
de la base de la base de Blazor,
peut-être que je peux utiliser
des components Blazor avec cette application
de la base de la base de Blazor,
c'est l'une des choses que j'ai
entendu au moment du launch qui
était le plus excitant de moi, c'est que
j'ai une application existante,
une app Blazor Web app, et je veux
utiliser des components Blazor.
Comment je fais ça?
Oui, bien sûr, oui, bien sûr que vous ne le pouvez,
donc, bien sûr que les gens ont
des apps de la base de Blazor et de la base
de Blazor, ils sont probablement
voulu dire, mais ce que ça veut dire,
c'est que ce que ça veut dire pour mes apps existants,
vous pouvez mettre les pages
de la base Blazor, avec votre app
existant, c'est tout le monde
de la base de Blazor, et Blazor est
partie de la base de Blazor,
donc vous pouvez avoir des routes
qui vont à la base de la base de Blazor,
et vous pouvez avoir des routes qui
vont à la base de Blazor, et ça peut
vivre rapidement dans la même application, ça
fonctionne bien. Vous pouvez faire des
plus d'intégrations, vous pouvez
prendre les components Blazor et
les ajouter à vos views de la base de Blazor
ou les pages de Blazor, nous avons un
component tag-helper qui est
un moyen de se briser entre les technologies
Vous pouvez dire, oui, je suis un view de la base
de Blazor, mais je vais juste
ajouter un component tag-helper
pour ce file de CSH,
ce view de la base de Blazor et
rendre un component là-bas, donc c'est aussi possible.
Nous avons ajouté un resultant
dans Donate 8, dans le monde de la base de Blazor,
vous avez tous ces résultats d'action
que vous pouvez rétablir de vos actions de la base de Blazor
Normalement vous pourriez rétablir un
action de la base de Blazor,
mais dans Donate 8 vous pouvez
maintenant choisir de rétablir un
resultant de la base de Blazor
et rendre un component,
d'un view de la base de Blazor, c'est possible.
Ça fonctionne aussi par le fait que
d'un API minimal, si vous voulez
avoir une route de la base de Blazor, vous pouvez le faire.
Et puis, la dernière,
il y a toujours l'obligation
de prendre un component Blazor
et de le rendre comme un
standard, custom élément de HTML.
Dans ce monde, le component Blazor
se fait sortir de shrinkwrapped, comme
un autre, effectivement un autre element Don
sur la page, et dans ce monde, vous pouvez vraiment
utiliser les components Blazor,
comme vous pouvez le rendre comme
un component Blazor, en app React
ou en app Angular, vous pouvez le faire
en app Webforms,
ou en app oldaspe.net
Parce que c'est juste un
standard de HTML, quand vous utilisez
les elements custom. Donc, il y a beaucoup de ways
que vous pouvez maintenant prendre la nouvelle fonctionnalité de Blazor
et ajouter les deux appels existants
si vous êtes dans cette situation brownfield
et si vous êtes dans le field green
où vous êtes en train de commencer quelque chose de nouveau,
la app Blazor Web est probablement où vous voulez aller.
Ça me blanche que vous
pouvez avoir un minimal API qui
déterre un component Blazor.
Oui, oui, oui, vous pouvez absolument le faire.
Ça retient l'HTML.
Ça me blanche, vous pouvez prendre
une application de 10 ans de Blazor
et mettre un component Blazor
dans l'application.
Ça me blanche comme si Dan avait unifié
un ASP.NET pour la première fois,
oui, ça fait.
Nous avons toujours eu
cette situation de Buffet
avec ASP.NET,
et qu'est-ce que c'était ?
Les pages web, les pages web,
les webforms de ASP.NET,
et nous avons évoqué la Core,
nous avons évoqué les pages de Razor,
nous avons évoqué Blazor.
Maintenant, je me sens comme si nous avons vraiment
unifié un seul modèle.
Comme vous l'avez dit, Dan,
le modèle component est vraiment
très important dans cette histoire.
Nous avons maintenant un modèle de composition
pour le UI. Si vous avez besoin
de widgets, de grids,
de charts, tout ça,
il y a un tout système de components
que vous pouvez prendre, comme des packages Nougat,
ajoutez-les à votre application
et vous allez vite,
être vraiment productive rapidement
par évoquer ce système de components Blazor.
Je pense que
le fait que vous regardez
l'HTML en utilisant un component, c'est juste un Element HTML.
C'est tellement readable et clean.
Ce n'est pas comme des choses qui
ressemblent à un autre langage,
c'est juste HTML
et HTML Element.
C'est vraiment composable et clean,
et readable, même si vous n'êtes pas un developer.
C'est très readable pour vos designers.
Et c'est très fort.
C'est un des choses
qui est vraiment belle pour les syntaxes
et aussi les syntaxes
en MVC et la page de Blazor.
Quand vous voulez faire
conditionaux, vous voulez avoir
un logic de contrôle, je veux créer
un bunch d'éléments HTML et je veux
faire quelque chose de l'autre.
Avec beaucoup de langages templatifs
pour HTML, vous venez avoir
apprendre des syntaxes de template
et des syntaxes de looping
pour faire ça.
En Razor et en .NET,
si vous connaissez le code C-Sharp,
qui vous aimiez pour votre logic,
vous utilisez le même syntaxe
pour le contrôle et la logique
qui vous ressent.
Vous avez cette productivité de C-Sharp,
aussi.
Avec tout le truc
que la Blazor donnait,
ce qui se déstandait
c'est que ce que j'ai ressenti
serait un peu de gorge pour les développeurs
qui ne sont peut-être pas mal à comprendre
toutes les outils.
C'est quand vous pouvez choisir
le mode auto-rendu.
Donc un component qui s'utilise
entre Wazm et Blazor.
Si un développeur ne comporte pas
ceci, le code de ce component
s'appelle
pour exemple, Entity Framework
ou des trucs de basse, qui sont plus
les plus des enjeux pour le basse, je vais
dire que ça va travailler
dans le premier temps que vous le callez
mais dans le second temps que vous le callez
ça va s'arrêter magiquement.
Je vais me demander si les développeurs
seraient confusés par cette expérience.
C'est un point de vue.
On a ajouté toutes ces capacités
pour Blazor et Donnait
qui vous permettent de les lever
avec les clients et les servers
simultanément.
Ça vous permet de optimiser vos expériences
dans des bons moyens, de faire les pages
plus vite, de faire des choses interactives
dans votre application.
Il y a deux processus, sur les différents endpoints de la wire
que vous devez penser, où est mon component
en fait en train de travailler?
Vous devez bien faire sure que vous vous
l'aurez en compte.
Je pense que les scénarios que vous parlez
sont que vous devez commencer avec votre component
en train de travailler sur le service.
Avant d'en parler de Automode, je sais que vous m'avez mentionné
Automode, mais avant d'en parler
il y a même le concept de pré-rendu
où vous vous enviez des réquises
pour le service, vous vous rendez
et vous vous rendez le component immédiatement.
Vous vous rendez le html
à l'extérieur, vous vous mettez sur la table
et vous en dessous vous enviez
un état interactif pour le component.
Un état interactif de la mode de rendition
c'est ce que nous appelons.
Ce serait un service de blazer
où vous créez la connecte web
pour le service, pour les events de la Ui.
Ou vous devez faire des dégâts
pour que vous puissiez le client.
Vous pré-rendez le service, mais
si vous faites aussi un assemblage web
vous vous rendez
de l'exercice. Vous devez penser
sur ce component potentiellement en deux places
qui signifie que votre code
doit être appuyé pour ça. Vous ne pouvez pas juste parler
de la database, du code component
parce que vous ne pourrez pas faire ça
quand il est downloadé sur le web assemblage.
Vous avez l'option
d'opter
cette complexité. Vous pouvez juste
dire, je ne veux pas de web assemblage
je ne veux pas de service.
Ou vous pouvez dire, je ne veux pas de service.
Je ne veux pas de code de web assemblage.
Ça simplifie les choses
à l'expérience de la flexibilité.
Le cas que vous parlez de
est le mode auto-lèvres
qui est un moyen
pour les components de décider
de quel manière ils veulent le rendre en temps de tour.
D'où vous décidez
d'avoir créé le projet ou de la temps de construction.
Le moyen de ça est
d'avoir le component
initialement utilisé le model de la service de blazer.
On a installé la connecte web
pour que ça soit interactif
très rapidement, très rapidement.
Mais dans le background, on est downloadé
le point de web assemblage et le cache
dans les browsers pour un utilisation de futur.
Quand le component se rend
en temps de futur, blazer peut dire
oh regarde, j'ai déjà eu le point de web assemblage.
Je peux juste mettre ce component
au client et ça se passe au temps de tour
et vous avez le meilleur de les deux mondes.
Vous avez le fast load
de blazer server app, mais vous avez aussi
réussi à offler le travail de votre service
pour avoir un meilleur niveau de scale,
plus de la caractéristique de votre service de la service.
Vous pouvez faire ça encore
pour que la première fois,
mon component peut se faire sur les côtés de la blazer
et comment je veux ça?
Si vous êtes sur le service, vous pouvez parler directement
à la base de la database.
Vous devez faire un API call.
Le moyen de ce que vous avez évoqué est
de créer des substractions interfaces
que vos components coûtent.
Un service de la salle
ou un service de la date
ou autre, et vous avez juste
à propos de deux infos
d'interface que vous avez injecté
en utilisant l'injection de la dépendance
dans les parts correspondantes de la app.
C'est comme ça que vous avez évoqué.
C'est plus de code que de parler directement
à la base de la database, mais ça vous donne
la flexibilité de la base.
Je pense que ça vous montre
que pour les années, la dépendance d'injection
et la dépendance de la version qui a été
dit pour les interfaces, ne vous donnez pas
les détails d'infligation, donc ne vous
donnez pas des frameworks de la
salle interfaces, de la salle
ou d'autres. Et ça vous
déclare que votre interface, en ce cas,
est juste de dire ce que vous voulez.
Et puis, une implementation peut
être appelée par votre API
et si c'est sur la cliente
et si c'est sur le service, peut être
appelée par votre database
ou la salle interfaces. Je pense que c'est
assez sympa. Mais je pense que
nous parlons de tout ça et je pense que
beaucoup de websites ne vont pas
même avoir besoin de brinquer la
interactivité sur ça. Je pense que c'est un
terme que j'ai entendu dans un de ces
paroles. Et avec ce service, vous
avez le service de rendition, et vous avez
le service de stream rendition, où
il s'agit d'un spa, même si c'est pas un spa.
Oui, donc, on pense
que... probablement, il y a
beaucoup de debates sur la Internet
sur la architecture des web apps,
si vous faites des choses sur le service,
si vous faites des choses sur la cliente.
Et la réalité est que c'est des scénarios
pour les deux. Je pense que c'est un cas
pour être fait, que les choses se sont
un peu trop tôt que les clients
dans des cas de utilisation, où vous
probablement pourriez faire des choses
sur le service. La classique
expérience d'usage où vous voyez ça, est
où vous browsez à un app, qui est
surtout de contenu, surtout des formes
sur le data, mais vous devez s'y
établir pour un spin de load, et le download
est un bundle de JavaScript. Et vous vous
dites, pourquoi, pourquoi j'ai besoin
de ça ? Vous n'avez pas été fait
d'une certaine manière, et vous avez
été fait de l'experience d'un meilleur
d'un meilleur. Et en tant que cas,
je pense que c'est vrai.
De l'aide du service, et de la
appui de la service, je veux dire
que la capacité de rendu de la
service, de la service, de la HTML, je ne parle pas
de la chose de service interactif,
juste de la capacité traditionnelle
de la service, vous avez maintenant la
capacité de faire ça avec la service. Et nous
pensons que pour des apps, c'est probablement
ce que les pages de votre
service se sont faits, c'est que vous ne
avez pas besoin de... Je pense que
je parle d'application payée ici,
souvent en un sens littéral,
vous devez être utilisés en service
pour faire des services de la service. Vous
n'avez besoin de payer pour l'interactif, si
vous avez besoin de ces features interactives,
si vous n'avez pas besoin de faire des choses
comme DRAGONDROP, vous serait probablement
mieux offre de la rendu de la service
et de la faire dans un manière
statuelle, et de la faire.
Donc, en default, si vous créez
un appage de la service, c'est en fait
un appage de la service, c'est en fait un appage
de la service, c'est en fait un appage de la service
et de la faire. Et vous
vous attribuez un component
avec un mode interactif en mode interactif
où il est besoin. Et peut-être qu'il y a
seulement une ou deux pages en votre app
qui ont besoin d'une extra support.
Nous avons également ajouté un bunch
de capacités de service modernes
pour que, même quand vous n'êtes pas
fully interactive, vous avez toujours
un sens spau.
Un des features
d'enversation en mode
où Blazer va
mettre un peu de logiciel de JavaScript
que la framerque donne
pour interseparer les navigations
et faire un request de fetch
en fait. En fait, en faisant un load
en document, on va envoyer un request de fetch
pour la service. Le component va
rendre statiquement de la service, vous vous
vous recevrez l'HTML en réponse, mais Blazer
va prendre l'HTML et l'interagent
pour vous pour le dom. Donc, vous ne vous
vous vous recevez pas de l'interagent
quand vous vous vous recevez d'une page
d'une autre. Un dom est état
sur la page, peut être préservé
par les navigations. Il se sent
plus vite et plus smooth.
C'est la même chose pour les
requestes de formes. Quand vous envisagez
un post de formes, souvent ça signifie
que vous vous rendez un nouveau batch
de html de la service et le browser
de default va vous envoyer
tout le dom et recréer le
re-creer avec le qu'il y a de la
s'il vous a réveillé.
Blazer peut évanouir les requestes
de formes, aussi. Vous vous recevez
des requestes d'infet, vous vous recevez
l'interagent, l'html et le patcher
dans le dom. La rendition de streaming
est une optimisation quand vous
faites un render de la service et
il y a des tasks longs de la
surface que vous avez besoin de
pour les rendre.
Peut-être que vous devez aller au database
et c'est une longue courte et vous devez
attendre un second ou un second
ou quelque chose pour obtenir
ce data avant que vous puissiez
le render du page, la réponse.
Dans les apps rendus traditionnelles
que le service est rendu, ça signifie
que l'utilise se situe en attendant
pour le browser pour le load. Ils ne
peuvent pas voir tout ça, parce que
rien n'a été envoyé dans la réponse.
En rendant la service, on peut
render le component tout de suite.
On peut mettre des textes de place
dans le browser, comme le loader,
le loader, le spinner, etc.
En faisant ce que vous avez besoin,
le database est exécuté.
Quand les tasks longs de la service
sont complet,
le component se rend automatiquement
encore, et le browser peut
prendre des batchs additionnels
de HTML qui sont envoyés sur la même
réponse et les patcher
dans le DOM pour vous automatiquement.
Vous avez les updates automatiques
comme le contenu est prêt.
Vous avez, encore,
une expérience plus responsive
comme l'expérience, sans avoir
à payer pour la fin de la
downloadation du bundle de JavaScript
ou de la assemblée web,
ou de la connecte de WebSocket.
Je pense qu'un important point, c'est que
tout ce que vous avez dit, ça semble
très compliqué, mais quand vous faites
.NET New & Create, ou file
un projet, et que vous créez,
ça se crée dans la boxe.
C'est-à-dire, c'est-à-dire, c'est-à-dire
un forecast de la salle, ou un
exemple de component.
Oui, le component de la salle.
Ne planz pas votre vacation
par rapport à la salle.
C'est juste un peu de salle, mais
oui, c'est juste un peu de démon.
Mais ça a le attribute de la salle
et oui, c'est très vite,
ça fonctionne.
C'est un peu compliqué, mais ça peut
expliquer comment ça fonctionne.
En réalité, ça fonctionne.
Vous vous ajoutez un attribute, vous êtes fait.
Oui, avant de la salle, il y a un attribute
pour l'envers de navigation et formes
automatiquement. Vous ajoutez
le script de blazer et le blazer
commence à faire ça pour vous, donc vous
avez ces expériences sans tout effort.
C'est comme si vous étiez sous la
coude et vous étiez en train de
voir toutes les parts de la salle, mais
quand vous l'utilise, on va essayer
de faire des choses simples.
Qu'est-ce que ça veut dire pour les pages de la salle?
Les pages de la salle sont toujours là,
les pages de la salle sont toujours là,
les pages de la salle sont construits
sur la salle, donc elles sont dans la même
boat.
Les fréquences sont partie de ASB.acore,
et nous savons qu'on a beaucoup de
utilisateurs que l'on utilise, et l'ambiance
est en train de se faire des
10 ans plus tard.
Qu'est-ce que nous avons commencé l'ambiance?
La première version était en 2008.
En 2008?
Oui, en 2016,
c'est une longue période,
ces fréquences sont très matures,
elles ont été en train de se faire un moment,
et l'ambiance,
en A.Core,
c'est...
c'est... c'est été en train de se faire
une longue période, il n'y a pas de
beaucoup d'innovations qui sont
ajoutées à l'ambiance,
comme une présentation.
C'est évidemment que vous avez toutes les
nouvelles features de C-Sharp, et les improvements
de performance qui se sont apportées
dans le temps de l'underlayant,
et le stack de web server,
mais c'est un solution de la salle
et les gens continuent à utiliser,
et ils doivent continuer à utiliser.
Il n'y a pas de raison de réécrire
votre app en app en app Blazer.
Ce que vous pouvez faire,
c'est prendre l'adaptation des features de Blazer
comme Scott et moi,
et les ajouter à votre app existant
pour pouvoir évoquer ces capacités
où elles font sens.
Nous allons poser la conversation
juste un moment pour un petit mention
de notre sponsor awesome, Track.js
qui m'a aidé à soutenir le show,
pour que je puisse continuer à créer
beaucoup d'épisodes.
Nous avons parlé beaucoup plus avant
sur ce podcast de la télévision,
mais qu'est-ce que vous avez sur le front-end ?
Vous savez ce qui se passe
quand votre script JavaScript s'évoque ?
Je ne vais pas faire des bugs,
mais parfois les browsers sont
bizarres et les utilisateurs
font des choses inutiles, et nous avons
des erreurs dans la production UI.
Vous savez quand ça se passe ?
Je dois être honnête, pour beaucoup de mon projet, je ne le ferais pas.
Track.js est un tool
fantastique qui monitora les erreurs
des utilisateurs de la télévision,
qui vous montre une histoire
de exactement ce qui a été fait
pour cette erreur.
Cela vous donne une observabilité actionnable
pour ce qui se passe
dans le site client.
Donc, checkez-la
à Track.js.com
Je suis un peu inquiétant,
mais on a aussi MADS&SCOT
et c'est C-Sharp.net
et on a ASP.NET
donc, j'ai presumably beaucoup de teams
qui sont involvedes. Il y a un grand overlap
parce que Blazer est
utilisé à C-Sharp.net.
Est-ce qu'il y a des défis avec les nouvelles features ?
Il y a plein de défis.
Fortunement, nous avons très bon et talentus
d'ingénieurs qui travaillent très bien
pour déterminer ces défis.
Mais oui, c'est vraiment incroyable
le niveau de collaboration
qui s'étend
quelque chose comme Blazer, qui est
un type de la lait,
qui est un type de lait
qui est très apprécié
à la construction de la lait.
Blazer a un corps de la lait
donc, il y a Castrol,
un pipeline de la lait
et tout ceci. Nous travaillons très
très close avec les gens de la team
de la team de la team de la web assemblée.
Nous avons un whole équipe de teams
qui ont des récits pour la construction
et pour l'adaptation de la chaine de la web assemblée.
Ils ont fait beaucoup de bon travail
dans la base de la base.
Nous avons maintenant un support de la part de la lait
juste en temps de compilation
dans la lait de la web assemblée
qui est super cool. Je n'ai pas vraiment
compris si ça allait être le cas.
Nous sommes toujours constrainés
dans les browsers par les specs,
par les browsers que le site web est capable
de faire, alors nous avons réveillé ces features.
Mais si on ne peut pas le faire, on ne peut pas le faire.
Le support de la part de la lait
était un très clé, un peu d'ingénierie
qui était faite par la team de la lait
et qui a été réalisé en performances phénoménales
et des improvements en fonction de votre code
clientiel dans le browser.
Bien sûr, il y a la team C-Sharp
mais sur le top de la C-Sharp, nous avons
notre propre compiler pour le syntaxe
qui compile pour C-Sharp
et c'est réveillé par des gens
qui ont des c-sharp draws et compiler
tout le tooling,
le reload, le editor
et le bon experience
de la production en visual studio.
Des fois, des gens me demandent
comment beaucoup de gens travaillent sur Blazer
et je me dis
« Oh, c'est une bonne chumpe de la team de dotnet,
si vous êtes en visual studio, si vous comptez
tout le monde, il y a un point touché
». C'est une collaboration
bien sûr.
Comme un utilisateur,
j'ai vu le niveau de la surface
du iceberg, mais
comment tout se met ensemble, c'est
absolument incroyable.
C'est mieux que ça,
si vous regardez la histoire de dotnet,
en 2002 et 2008,
quand nous avons fait MBC1,
dotnet était spread tout autour de Microsoft.
Et la loss de cohesiveness,
parce que le team SQL
et les API database
et le team Windows networking
et les choses de networking,
une des choses que nous avons faite
sur cette route de dotnet depuis 2014,
c'est que la cohesiveness
dans la team dotnet,
c'est la cohesiveness que nous pouvons
construire
par la compagnie de compiler,
à la team runtime,
à la team framework,
c'est une des choses qui ont été
en place depuis 2014,
je pense que c'est depuis 10 ans.
C'est incroyable.
Je l'apprécie
que nous sommes ensemble,
et que je suis dans le monde Azure,
et que je suis dans le monde Azure,
c'est dans le même groupe
que Microsoft de dotnet.
Et donc, même si nous avons cohesiveness
et les tools sont construits
dans la même team,
si vous pensez à la fin 2002,
nous avons été étendus tout au lieu,
et nous nous sommes maintenant en place
pour une réelle consolidation de org,
et je pense que c'est ce qui nous permet
d'avoir cette vitesse que Mads
avait parlé avant,
et d'enjoindre la vitesse
de la compagnie que nous avons,
nous sommes tous ensemble,
nous pouvons tous nous changer,
et c'est pourquoi Blazor,
comme Dan, touche tout,
touche les compilers.
Je suis venu de l'absence de Weazm,
et on peut prendre un ASB
et un Head of Time Compilit
en train d'avoir un appui
de 10 Mb,
si tu me dis que je pouvais faire ça 10 ans plus tard,
je ne vous ai pas dit.
Je peux certainement attendre
la valeur de cette collaboration,
la langue C-Sharp,
la langue, je dois dire,
mais je peux parler pour C-Sharp,
c'est un peu naturel,
ils doivent être sortis de la motion
en un sens,
quand on ajoute quelque chose de la langue
à ce niveau, il doit être quelque chose
qui n'est pas un fat,
n'est pas encore un autre moyen
de faire la même chose, il doit être quelque chose
qui a une longévité, parce qu'on ne peut pas
prendre des choses. Et en même temps,
on a une grande menu
de choses que nous pouvons choisir
dans la langue, et des manières
que nous pouvons choisir, et ça
est très guisé
par nos équipes de partenaires,
on verra que l'un des équipes
de la chaîne de C-Sharp
est en train de travailler dans ce grand
plus grand, d'aspire,
on a parlé de minimaux APIs
et on dirait,
ce serait une meilleure expérience
si C-Sharp a fait ce truc,
ce n'est pas que C-Sharp
est construit un feature minimal
dans la langue, c'est que c'est un feature
de cause général, qui est un
scénario concret
que nous pouvons utiliser pour faire
une réalité. Donc maintenant c'est
le temps de mettre ce feature
dans la langue pour tout le monde, et de
utiliser les équipes de partenaires
qui vont
relancer sur ce feature
comme des scénarios de conduite
pour nous aider à pouvoir se faire
le design. C'est souvent
comment la langue vient de la
collaboration, nous allons
l'improver dans un sens général, mais
ce qui est guidé par des choses qui
permettent de l'expérience d'aujourd'hui
à travers les autres layers.
Oui, c'est certain.
Je suis juste d'accord avec le temps, et on
a dit qu'on parlerait de C-Sharp 12
intersepteurs, qui est
assez intéressant. Je l'ai regardé
parce que Nick Chapstas a fait un vidéo
sur ce, donc j'ai regardé ça et j'ai
eu un peu de jeu. Je pense que avant
d'essayer de parler, on peut parler
de ce qu'il y a?
Oui, l'intersepteur est un feature
expérimental
dans C-Sharp 8
ou dans Donnet 8, C-Sharp 12,
et c'est probable de ne pas
voir comme ça, quand ça sort
de la forme finale. Mais la idée
est, nous avons tant de technologies
qui sont en train de créer des sources
de diverses types, et
partie de la bottleneck
pour générer un extrait
d'interseptur de source, c'est
comment ça peut générer un code source
connecté avec le C-Sharp
existant, le c'est manuel
d'un code language
qui vous laisse vous étirer
dans un code source
et les intersepteurs
sont comme un incliné radical
d'incliné points
si vous voulez. Vous pouvez
dire, hey, je vais générer
un code
que vous devez faire
en lieu de ce métocole que vous faites
donc ça va réveiller et dire
pour ce métocole que vous faites
dans minimalistic APIs, pour exemple,
pour un code de l'instance, ne générez
pas le métocole,
n'étiez pas le métocole ici
alors c'est pourquoi ils sont
les intersepteurs, les intersepteurs
et c'est un
feature de langage, parce que
c'est pas très utile
pour un C-Sharp de développement
comme ça, comment vous le dites
dans un manière stable, ce métocole
là-bas, c'est pas un...
et typiquement vous ne vous avez besoin
parce que si vous voulez changer ce que le métocole fait
parce que vous allez juste éditer le code source
c'est seulement vraiment rélevé
pour automatiquement générer un code
qui modifie
l'expérience de l'utilisation de code
maintenant, quand vous vous entendez
modifier l'expérience, ça semble
probablement très grave pour des gens comme, hey, je suis
réveillant ce code et puis ce
chose qui se passe en partage de mon processus
ou peut-être en cours de biais
tout le temps, va
essentiellement changer le sens de mon code,
qu'est-ce que c'est?
C'est
évidemment pas quelque chose
que vous devez généralement faire
vraiment, c'est très confusant
et difficile à débarquer, mais
il y a des scenarios où c'est vraiment ce que vous voulez
faire. Une des raisons pourquoi on a
déjà mis ça en point de vue de Donnet 8
est que nous regardons un temps de temps
comme une alternative pour JIT
dans certains scénarios, puis quand vous avez
Donnet Code ASP.NET
c'est un grand exemple qui a renait
beaucoup en réflexion, en utilisant
les structures de données en temps de temps
qui sont en mode
de la réflexion
de la lait, si vous voulez.
Alors, beaucoup de ce qu'ils font
ne peuvent pas être faits vraiment bien
dans un scénario de temps de temps,
comme, vous ne pouvez pas générer
des méthodes ou quelque chose, parce que, hey, vous
avez déjà compilé, c'est trop tard. Et donc
ce que nous pouvons
faire, c'est de la source générer
des conditions d'alternatives
d'implementation de ces codes
qui utilisent des informations de temps de temps
de temps, et puis
nous pouvons
intersepter les calls que vous faites
pour que nous conduisons des choses de temps de temps
de temps, et si nous faisons ça
consistant, alors votre code est
AOT-friendly, comme nous le disons, et vous pouvez
réussir à compilére
à l'heure de temps. Donc ça a été
un scénario de la conduite, mais je suis sûr
qu'il y a beaucoup d'autres qui sont sur la ligne.
Et vraiment, si vous comparez-le
à quelque chose comme IEL re-writing
que c'est plus sur la back-end,
donc à la fois, il y a
beaucoup d'adolescentes à l'adverteur,
l'un de eux est que
il y a en fait une source code
pour
les deux, les avant et les après,
le truc qui a été intersepté
et le code qui intersepte, et ça
signifie que si vous êtes débugné, en essayant de
figure de ce qui se passe, vous pouvez en
débugner à la code source générée, et voir
ce qui s'est passé
à l'aéros de la C-Sharp. Donc ça fait que
c'est beaucoup plus approachable
pour les developers de la C-Sharp.
Je pense que je vais avoir beaucoup de fun
avec ça, sur April Fool's
avec ma base de code de client de current
non, ils pourraient être en train de l'écouter.
Oh, vous ne devriez pas
vous montrer votre main là-bas.
Pranking avec intersepteur, est-ce que c'est ça?
Ah, oui.
Donc, pour les generators de source,
est-ce
faite de dire que les generators de source
sont additivement
utilisés pour modifier
l'existe code,
donc ça veut dire qu'il peut faire
beaucoup plus avec les generators de source.
Oui, techniquement, ils sont
still additivement. On a toujours
toujours pu déclencher la ligne
en ne pas déclencher les generators de source
directement pour remplir votre code.
Donc, c'est tout à
ce que la C-Sharp
se déclenche et on a toujours
eu plusieurs formes de partages
qui se passent en temps.
Vous dites que je vais mettre
un point pour la génération source
pour le remplir.
Donc, avec ça, c'est
encore additivement
en un sens technique
que tout le code source est là, on n'est pas
répliquant tout ça, mais
le code source génération
a des directives de C-Sharp
pour intersepter et remplir
quelque chose. C'est
comme ça, là-bas.
Donc, quand j'ai joué avec ça,
quand j'ai écrit le intercepteur,
j'ai dû specifier
le file C-Sharp,
le nombre de ligne et aussi le
fil de la ligne, juste pour
specifier exactement où la
fonction de call a été
faite. Quand vous avez dit que c'est
expérimental, ce n'est pas comme ça
quand c'est dans le GA, ou
ce que c'est appelé, vous devez
faire ça.
C'est une question open, mais c'est
un des choses qui sont discutes.
Qu'est-ce que le mécanisme pour
vous rapprochera
d'autres codes ?
Qu'est-ce que le mécanisme pour
vous dit ? C'est un appel particulier.
Il y a quelques options sur le table pour
ça. C'est le plus facile
à faire sur un niveau prototype.
Mais, en tant que
on ne va pas être super user-friendly,
il ne sera pas
un bon syntaxe pour ça.
Il sera un peu agréable
d'une ou d'autre. Il sera
techniquement un numéro de file,
et tout ça. Il est user-friendly
dans le sens que vous pouvez regarder
et voir où c'est.
Mais, en fait, quand le code source
s'évolue, ça change tout le temps.
Si vous le faites manually, vous ne
devriez pas avoir de retour et de
réacteur de source.
Nous regardons si c'est un plus stable
de specifier ça.
Mais, d'ailleurs,
ce n'est pas un super
utile de feature friendly
pour un programme de meat.
Mais, vous pouvez voir que
c'est un programme de
service avec des
publicités.
C'est une
manière naturelle
de faire ce type de code
pour que vous puissiez
avoir le numéro de file
et le nombre de
personnages dans le file.
Donc, vous pouvez l'évoquer.
Si vous travaillez avec les APIs,
vous pouvez avoir des détails
sur le code. Il y a des
un modèle de compagnie de compagnie de compagnie de code.
Donc, même comme un développeur juste jouant avec ces intercepteurs
et pensant, oh, je dois mettre le nom et le nombre de la file.
En réalité, ce code serait juste de refermer
une propriété qui est partie de l'API de Roslyn.
Oui, oui, whichever de la façon que nous le fais,
je veux dire, la généreur source qui travaille sur le modèle de Roslyn
syntaxe ou de la modèle semantique,
il y a une réplique pour obtenir l'information qu'il faut faire
pour faire l'intercepte actuel.
De toute façon, nous finons par signer ça,
ce n'est pas la challenge.
Il y a beaucoup d'autres challenges avec les généreurs source
et en faisant surement que les gens travaillent dans toutes les genres robustes.
Ce n'est pas pour tout le monde qu'on a à construire les généreurs source.
Je doute que ce sera toujours,
mais ce n'est pas la partie difficile.
Je peux avoir dit une expression,
mais pas le syntaxe, mais vous savez ce que je veux dire.
Oui, c'est la même chose.
Donc, C-Shop 13.
Je sais, il y a un webpage,
qui peut être inclus dans les notes de la show,
je pense que c'est sur GitHub,
dans les docs, qui sont comme,
ce sont les statuses de la langue,
qui ont un petit lookout.
Je vais donc inclus ça dans les notes de la show.
J'ai hâte de voir des unions discriminées.
C'est-ce que c'est quelque chose qui est venu,
peut-être un mention d'un C-Shop,
c'est 39?
Je ne vais pas vous donner un numéro de version,
mais je vais dire que
nous travaillons très activement sur ça.
C'est un sujet complexe, très difficile.
Et donc, ce que nous faisons maintenant,
c'est que nous avons expéré un groupe de travail
qui se rencontre chaque semaine,
qui se chasse dans les solutions
des solutions sortes de syntaxe,
de la solution semantique,
et aussi des stratégies d'implementation pour eux.
Il y a deux main-flavours des unions.
L'une est la façon dont vous pouvez être
en train de faire des unions,
où les unions discriminées
ont des tags,
des tags nommés,
pour chaque chose que l'union peut être,
et avec chaque tag,
il est associé à la type de la date
que vous avez,
si vous n'avez pas l'air de cette forme.
Et puis, ce type d'unions,
qui est plus similaire
à ce que le type script a,
où vous dites
que je suis un string ou un boule,
mais vous ne dites pas,
vous ne vous donnez pas les noms.
Et c'est aussi une chose très utile.
Donc, on fait une,
on fait l'autre,
on fait les deux,
mais on fait sure que le design
est pensé à pouvoir
éventuellement embrasser l'autre,
et puis, derrière tout ça,
quels sont les stratégies d'implementation
qui sont efficaces
que les gens ne vont pas
s'éteindre d'utiliser le futur ?
On a eu un peu de temps
dans la history de C-Shops,
d'un moment donné,
où nous avons fait des features
qui ont eu une bonne utilisation,
mais qui sont en train de faire
une panelise de performance
qui n'est pas aussi acceptable
dans le monde d'aujourd'hui.
C'est essentiellement
le moment où C-Shops
était seulement en train de faire des machines Windows.
Et donc, quand nous faisons
un feature de langue,
nous devons prendre très sérieusement
la performance
que les gens
vont adopter le feature
sans peur.
Si vous regardez les expressions de collection
que nous avons fait dans la C-Shops 12,
c'est exactement le principe de design.
Ils sont super convenus,
très bonnes, unifiés,
pour créer de nouvelles collections,
mais si nous avons fait ça
en un moyen plus inférieur
pour ce que vous pouvez faire manuellement,
les gens vont dire
que pour une bonne performance de code, je ne peux pas utiliser ça.
Je dois continuer de faire quelque chose de malade.
Et peut-être quelque chose de très malade
parce que sinon
la performance ne serait pas optimale.
Donc, ce que nous faisons
c'est que nous nous faisons le compiler
faire des trucs malades, alors que, même si c'est
très bon sur la surface, il peut y avoir
quelque chose de très complexe, très gênant,
très haut niveau, juste pour que votre code
soit en train de faire aussi bien
que vous pourriez faire manuellement.
Et les unités doivent être les mêmes.
D'ailleurs, ils vont
juste commencer leur vie comme un feature niche
et ils ne vont jamais se cacher.
Oui, je pense que avec la performance,
je pense que vous avez des audiences différents,
vous avez les développeurs
qui sont en train de faire des livres et des choses
pour autres développeurs,
et ils doivent être de la performance haute.
Si c'est un peu mal, parce qu'ils doivent
écoiler toute la performance,
c'est ok, donc ils peuvent utiliser
différents syntaxes de langue,
mais peut-être que le développeur
de JoeBlogs est en train de
utiliser. Donc, avec ces features,
vous allez probablement regarder
les cas de use.
Oui, parfois, on est heureux de faire
un feature qui est primairement
pour les authors de la bibliothèque,
ou peut-être même, primairement, pour les gens
qui sont en train de faire les frameworks hauts.
C'est toujours comme ça, C-Sharp a commencé
avec une sublangue unsafe
que vous pouvez écoiler
pour que vous puissiez interroger
des choses très hautes.
À un niveau bas, et en plus,
les langues que C-Sharp est comparable
à. Et depuis, on a créé
des réplacements de sécurité,
donc, pour les uns, on a
un peu de la puissance,
et des autres utilisations de Raph,
et de la suite. Donc, on a
rampé tout ça, et nous sommes très heureux
pour être un part de la langue
que pas beaucoup de gens utilisent,
parce que c'est utilisé pour
construire les frameworks hauts et les libraries
qui bénéficient de la restée
des utilisateurs C-Sharp.
Mais, quand il s'agit d'une chose
qui est de la nouvelle expressivité,
ici, vous pouvez écrire un code
plus beau, puis
que ce soit quelque chose
que vous devriez
pour des raisons performances, c'est pas bon.
Puis, ça doit être
tout le monde.
Il doit être 90 %
d'usage,
sans des réservations,
ou au moins, sans des réservations
Oui, je dois dire, avec toutes les versions
recentes de C-Sharp,
c'est la chose que j'ai aimé,
comment ça a été plus et plus succinct,
et vous pouvez avoir moins de code.
Et c'est juste, je ne sais pas si c'est
plus fonctionnel, mais je pense que c'est.
Et c'est juste, je ne sais pas, c'est juste, je me sens un peu plus
plus élevé.
Et même avec le, maintenant vous pouvez avoir
un programme.cs avec tout le
tout, comme global utilisation,
et c'est le nombre de
espaces où on ne peut pas
avoir l'indentité,
et qu'on n'a pas besoin d'un programme,
d'un programme.cs, comme le class
pour que ce soit un peu de statements de la top-level.
Et pour nouveaux
développeurs qui viennent à .NET,
je sais que je suis maintenant
en cours de Kubernetes,
et il y a un peu de .NET
où je suis créé un API minimal
pour détenir les calls de API
dans un cluster de Kubernetes,
mais je suis en train de démonter
l'API. Et beaucoup de
les gens qui sont en cours ne sont pas
nécessairement des développeurs de .NET,
mais c'est tellement
plus simple et plus petit, je n'ai pas de
inquiétudes que d'être capable de glacer
ce que c'est, exactement ce que c'est
en faisant, il y a peut-être un peu de points de API,
et il s'agit d'une page, et c'est vraiment
plus simple et plus élevé, et c'est
juste tellement bon le moyen que ça va.
Oui, j'adore vraiment
cette particularité de cleanup,
je suis très heureux,
aussi parce que c'était fait en
collaboration avec les équipes minimalistes,
donc ils ont tous juste clé ensemble.
Mais je pense que quand vous avez une langue de programme,
c'est comme un C-Sharp,
le state de l'art s'évolue,
le C-Sharp
n'était pas le plus
turst, et n'était pas le plus verbose
dans sa période,
il était en train de se faire
placer, mais quand le state de l'art
s'éloigne, et les gens sont utilisés
pour nettoyer un code plus concis,
vous pouvez either follow along,
ou vous pouvez dire, non, c'est pas
le C-Sharp de la façon de la C-Sharp,
et vous vous trouvez plutôt vite
que vous trouvez un langage de législation.
La approchability de C-Sharp
pour les programmes modernes est partie
de ce que l'on utilise,
la popularité continue,
et c'est partie de ce que
l'on utilise pour les nouveaux développeurs.
Et donc vraiment, c'est important
que nous restons
être attractifs de votre point de vue
de la langue, par les standards modernes.
Oui, je pense que, comme vous l'avez mentionné
avant, quand vous introduisiez
les features ou les syntaxes de la langue,
vous ne pouvez pas retourner,
donc vous avez dû être vraiment
sûr, je pense que ça
peut être le plus important, maintenant c'est
l'open source et tout, vous pouvez avoir
vraiment de plus d'informations, je pense que
l'une des choses qui s'est mis à la main,
c'est que je suis un peu déçue,
mais c'est le double band operator.
Oui, c'est...
je pense que
j'aime vraiment
cette histoire, parce que
je pense que c'était une opportunité
pour nous de démontrer que nous
ouvriions des réponses et
que nous avons une haine barre pour
les langues. C'était
un feature que tout le monde
pourrait s'agir, c'était assez
utile, mais c'était
juste pas universelment populaire
assez, il a raffiré trop de gens
qui ont mis la même chose, et on ne veut pas
mettre quelque chose en, c'est
juste, eh, c'est bien,
il doit être la version
de la meilleure version, et
on doit travailler jusqu'à ce qu'on
ait, et si on ne peut pas,
on ne devrait pas aller, alors
c'est juste pas le temps, on doit avoir
un long
visage et dire,
est-ce que nous serons prêts pour ça
dans 10 ans? Et si pas,
peut-être que nous ne devons pas le faire,
peut-être que nous voulons faire quelque chose
d'autre qui est beau et
c'est prêt à rouler.
Je pense que le cas de l'utilisation, j'ai vraiment
aimé avec ça, je suis un grand fan
d'expression de corps de corps, donc si j'ai
des méthodes qui sont assez petits, mais
évidemment si j'ai un assertement
de checking que quelque chose ne soit pas
un paramètre, pas de nul, alors
il ne peut pas être un corps de corps d'expression, mais
l'opérateur double bang m'a
permis de faire ça, donc c'est le
peu que je suis en train de faire, mais
comme vous le dites, c'est comme de ne pas
mettre ça dans, ça ne veut pas que vous ne le mettez pas
à un moment dans le futur, mais si vous
le mettez dans et c'est pas assez correct,
c'est de la manière de revenir.
Oui, nous avons étendu avec ça et nous avons juste
évoqué la barre pour faire un bon truc plus tard.
Donc, oui, je suis complet avec vous,
je suis certainement
en favor de cette feature,
et je ne l'aurais pas utilisé tout le temps,
mais, vous savez,
vous devez regarder la
picture et vous devez entendre
toutes les voix et faire
une bonne décision pour tout le monde
autour de ça, et je ne suis pas
sourd à ça. Je suis heureux
que nous avons
fait plus de budget sur la surface
pour d'autres choses que je suis plus
universale,
plus universale admirée
ou amusée, donc,
oui.
Regardez la liste de
toutes les C-sharp 13,
les collections de Pouram,
je sais que vous avez mentionné
Nitchap's House, mais
il a fait un vidéo
en parlant de ça, ce qui m'a
inclus dans les notes de la show, mais oui,
ça a pas été utilisé par Pouram, mais
ça a été utilisé pour des cas de plus.
Oui, je pense que
Erase sortait
d'être
le type de collection
pour C-sharp,
celui qui a été d'un support
dans la langue, mais Erase
a beaucoup de problèmes.
Et donc,
ce que vous avez souvent trouvé, c'est que les gens
veulent avoir un bon
comédien de Pouram
qui a un overload,
qui fait le type qui est le bon
et qui a un overload
avec un array, parce que c'est le seul moyen
d'avoir Pouram. Pourquoi
ne nous n'avons pas
la chance d'avoir Pouram
et d'avoir une collection type ?
Préviément, l'answer est
pourquoi pas ? On ne peut pas
savoir comment créer
un instant de votre collection type,
mais maintenant, nous avons une expression de collection
dans C-sharp 12, maintenant, nous avons
des patterns established pour
comment nous pouvons dire
dans un type de collection, quelle est la façon
de créer un bunch d'éléments. Pourquoi ne nous
n'avons pas d'utiliser ça dans un autre feature
de langue, et dire que Pouram
est vraiment juste en mettant
des brackets squares
autour des éléments, et faire le même
chose. Tout de suite, un feature
s'évoile d'une autre pour
finir la transformation. Les gens qui ont été
demandant pour d'autres Pourams, pour l'an
on a parlé de la spéciale
case pour un ou deux types.
Pourams Span a été
dans le table depuis que Span a été
évoqué. Et maintenant, on peut
faire un tout en général, un feature
qui est juste construit dans l'infrastructure
et les concepts qu'on a déjà introduit
avec les expressions de collection.
C'est un exemple très bon,
un autre exemple,
parfois, un feature a juste le temps.
Il s'agit de ne pas être
nard, et pas croyant.
Maintenant, quelque chose d'autre est dans le monde,
donc tout de suite, il peut
être beau.
C'est si bien quand ça s'occupe,
quand tu as un improvement, un changement
ou quelque chose qui s'évoit
beaucoup d'autres choses.
Oui, c'est super. Si je n'ai que
un de ces avec tout le réel, je serai
un bonhomme.
Un grand question
et c'est de la version de C-Sharp.
Qu'est-ce que ton préféré feature
de C-Sharp tout le temps ?
Je pense que
pour moi, c'est pour des raisons personnelles,
mais un weight est
mon préféré feature de C-Sharp,
pour plusieurs raisons.
L'un était
que c'était le premier feature de C-Sharp
que j'étais instrumental en faisant
et donc je suis très fiers de ça.
Et aussi,
c'est tellement réussi
que c'est infecté à la planète
de chaque autre language de programmation.
Je me sens comme ça, c'était
un point important
pour C-Sharp et pour moi personnellement.
Je me souviens
de l'autre,
mais pas seulement ça affecte les
languages de Mads,
ASP.NET est full de ce genre de choses.
On est basé en bas de
ASP.NET avec ce feature.
Et donc, en regardant le
new.net, et spécialement,
on a pris tous ces features et les laités
à travers toutes les fondations de la nouvelle tech.
C'est profond,
à l'intérieur et à l'extérieur.
Je peux dire
que, comme je l'ai entendu
à Mads, on parle de
features C-Sharp et de beauté intrinsique.
Je suis totalement
en train de voir
un esthétique de Mads
devant son whiteboard,
qui dit, oh, c'est un petit
C-Sharp, un petit feature.
C'est génial.
J'adore l'art
qui va dans le design de la langue.
C'est drôle,
parce que c'est...
C'est un peu incroyable,
c'est comme ça, tu fais quelque chose,
et après 3 ans,
tu regardes et tu dis, wow, c'est profond.
C'est parce que c'est un autre cas de use qui est
arrivé, et je m'écoute
de Dan en parlant de ASP.NET, je me sentais
de la même manière. C'est comme,
on a construit webforms,
MVC, web API,
et on a senti que nous avons
des choix de plethora, et qui aurait pensé
que ce qu'on a construit en blazer
quelques années plus tard,
serait coalesce et on peut
prendre les choses.
C'est la même beauté que tu parles
de C-Sharp, je pense que ça peut
exister en choses comme ASP.NET,
et quand nous avons déjà pensé
de blazer, on n'a jamais pensé,
non, je suis dans la salle
avec Steve Sanderson,
on n'a pas pensé qu'on allait
coalescer tous les
différents frameworks que nous avons
dans un truc, c'est-à-dire
un genre de réunition.
Ces choses se sont mises
à la C-Sharp, et ils se sont mises
à travers toutes les langues. Je me demande
de questions pour Mads et Dan,
c'est une question de .NET 9.
Je suis super excité
d'avoir, .NET 8 c'était la première version
où tu pouvais construire une application
de la réelle AOT.
Et ça construit des textes
que nous avons de la acquisition
de Zamarin, des choses que nous avons
faite pour blazer.
On va prendre un step en .NET 9 ?
Je sais que la injection de la différence
est l'une des choses les plus hardes
pour les AOTIs, et Mads
parle de la technologie que nous avons
fait dans les langues.
On va prendre un step en .NET 9 et faire
des choses comme routing,
et ça va être possible pour AOT
ou de la façon de la façon de la routes.
Si tu ne le sais pas, c'est bien, mais je suis curieux.
Je peux partager
sur la site ASTP.
Nous avons de la question
de la réelle web de la stack,
de la routes de stack pour comprendre
ce qu'il pourrait prendre pour utiliser
la AOT native sur
cette partie de l'application.
Il y a beaucoup de défis.
Ce n'est pas un problème simple.
Même les API minimaux
qui ont été faits dans .NET 8
ont été élevés,
d'une des efforts de la team Massive
Cross
pour faire cela.
De l'exemple de la blazer,
AOTI a été
un nombre de
les lebes techniques
pour la réflexion,
et pour comment les choses
s'opérent sous la routes
dans la stack.
Nous avons des idées pour
faire le progrès
pour comprendre comment nous
approchons ces défis.
Quels sont les solutions
qui sont vies?
Nous allons en faire
dans .NET 9
où vous pouvez prendre la blazer
et compiler complètement.
Je dirais pas
mais on aura un meilleur
compterre de la travail
qui est nécessaire pour y arriver.
Je pense que c'est une bonne réponse.
Je pense que
quelque chose comme AOTI
est un effort multi-release.
Si vous vous mettez
en la même direction pour commencer
ce sera
comme de la pêche pour y arriver.
Je pense que c'est un bon point
de la même direction où nous pouvons
l'initier,
en les choses qui ont dû être
construites en haut et à l'aide de AOTI.
Et aussi en la technologie AOTI
pour que plus et plus de choses soient
incluses et
à la hauteur et la hauteur.
C'est un grand exemple
de la synergie de les équipes
où nous évoluons les laitiers
et je pense que nous allons continuer
de voir AOTI
devenir plus et plus
capable de la version
des versions
en basseur.
Nous devons probablement être clairs
sur ce que nous devons dire
par AOTI en ce contexte
parce que, particulièrement avec Blazor,
il y a un couple de différents scénarios
qu'on peut penser à pour AOTI.
Nous avons déjà supporté Blazor
en faisant une compilation de votre code Blazor
pour le WebAssembly
pour que vous puissiez précompiler
tout ceci à WebAssembly et le poursuivre
pour que ça se débrouille plus vite.
Ce que nous parlons maintenant est
l'AOTI-server
où je veux prendre mon application
de la application de la service,
la pilote de la pilote de la pilote,
pour que vous puissiez avoir
une meilleure performance de start-up
et une meilleure consomption
de la single binary.
Nous avons supporté AOTI
pour WebAssembly.
AOTI-server
a un peu d'adaptation
pour que nous devons travailler
sur la dotnet 9, mais on ne peut pas
pas le faire tout de suite.
Je ne veux pas l'overdouer.
Je pense que c'est intéressant
que l'une des aspects de dotnet
est la facture que,
dans les années, nous avons pu
travailler partout.
Windows-only, Linux,
ARM64, Mac,
dotnet est une plateforme
vraiment incroyable, car elle touche
tous les types de apps que vous pouvez construire.
AOTI-server est un de les frontières finales.
Ce n'est pas quelque chose que nous devons prendre légèrement.
Les langues mini-langues,
ont le langage,
ou les libraries ne travaillent plus.
Je pense que la team dotnet a pris
un très cautionnel approach
en faisant surement
que vous vous vous arrêtez de faire le même que vous avez fait avant.
Vous n'avez pas de ré-arrêter le tout
et d'un autre manière de prendre l'avantage de ça.
AOTI-server
ne fait que de super curieux scénarios.
Si vous voulez avoir, comme Damien dit,
un petit membre de la France,
une superbe start-up, un petit disque,
les gens ne sont pas obligés de ça.
Si vous pensez même au grand customers
de Microsoft qui utilisent dotnet,
c'est-à-dire la team M365
ou le backing
de la team.
Ils ne sont pas tentant de faire 9 megs de executables.
Ils tentent de faire le plus vite
sur la plateforme du plan.
Ils peuvent sauver les coûts
et hoster la chose
par AOTI-server.
Je veux juste dire ça.
Les gens sur le téléphone ne vont pas dire
que je vais juste être amusant.
Je me suis donné un coup de feu
à David Fowler,
parce qu'ils ont fait ce whole spiel
sur AOTI.
Ils n'ont jamais dit pourquoi quelqu'un
n'augre à utiliser ça.
Je veux juste proposer
si vous êtes un developer
qui est un des des des des des
des gens qui veulent utiliser
ce type de stuff.
Les gens qui veulent utiliser
ce type de stuff, ils sont contents
de prendre les compromises qu'ils ont besoin
de utiliser.
Mais dotnet est si bon,
pour des objectifs de cause,
vous n'avez pas besoin de AOTI.
Si vous êtes un des des gens
qui vous semble que c'est quelque chose
que vous êtes intéressé à utiliser,
par exemple, vis-à-vis
et parlez de Github,
tout le travail que je parle de dotnet 9,
n'est pas secret, c'est tout en tractant
des issues Github pour différents parts de la stack
que nous regardons de comment nous pouvons utiliser AOTI.
Comment, commentez-nous
parce que ça nous aide à comprendre
où nous devons prioritiser,
comment nous devons faire des optimisations
pour faire cette expérience
aussi utile que possible.
Si vous êtes un des gens
des gens qui vous parlez de Hunter,
nous aimons vous parler.
Je pense qu'il y a un truc qui vous a touché
avec le fact que le dotnet ne s'est pas venu
et c'est un des choses que j'aime beaucoup.
Vous pouvez construire des appareils, des APIs, des apps mobiles,
des apps IoT,
pas AOTI, mais AOTI
et tout ça.
Vous pouvez tout faire.
Et pas beaucoup de langues ou plateformes
que vous pouvez dire.
Un truc que j'ai voulu
c'est que nous avons parlé
de performance un peu dans cette conversation.
Je ne peux pas dire
son nom, mais Steven Taub
performance blog post
Oh mon Dieu,
je vais le lien dans les notes de la show.
Comment ça va prendre ?
Je pense qu'il
l'a écrit en général
en temps. Je ne suis pas sûr
mais je crois
que
il s'est passé et
il l'a écrit en temps
quand quelque chose de nouveau est dans.
Vous devez le faire sur votre show.
Je l'ai aimé.
Je l'ai réveillé un peu en temps, mais
je n'ai pas répondu.
Il a fait un blog post
sur comment Async await
et ça serait
intéressant.
C'est une longue poste en détail.
Et je pense que ça serait intéressant
de faire un podcast pour
ne pas juste parler de ce que Async await
mais de comment ça fonctionne
dans la chambre.
Mais vous avez mentionné que vous étiez
très clairs avec Async.
Je vais juste le mettre en bas.
C'est un podcast.
Je l'ai réveillé.
C'est quand je l'ai rencontré Steven.
C'est un truc de plus pour moi.
Je travaille sur un des efforts de AI
dans Microsoft.
Et son blog post
est un peu plus de mon tech.
Je vais rencontrer un de
les équipes aujourd'hui
pour voir pourquoi son blog post
est le seul blog post que je peux
faire dans le tech.
Donc, la question est
de la question de Steven
et de la question de la question
de la performance.
Et son blog post est le seul piece de
data que je...
C'est tellement grand que ça crache notre tech.
Et nous devons trouver pourquoi.
C'est trop grand.
Je pensais que
il allait dire que il en a un avec un.
Je pense que je pense que
Tobi est derrière des modèles
générés.
Mais c'est un Tobi qui est
en train de le mettre en bas.
Je l'ai dit
quelques jours avant.
Je vais dire ça maintenant.
C'est pas que je l'ai dit.
Je l'ai dit en fait.
Je l'ai dit en fait.
Je pense que la question est
si correcte.
Mon cercle est assez d'un point de vue.
Je ne sais pas
ce qui se passe au-delà de ce cercle.
Je peux parler de ça.
Blazer a évoqué le premier temps
avec .NET Core 3.0.
C'est drôle pour moi.
On va parler des gens qui disent
Blazer est un peu nouveau.
Est-ce que Microsoft a vraiment
appris ça ?
C'est comme 5 ans plus tard.
C'est de la vie.
Je pense que
.NET 8 a vraiment
une maturity.
C'est un moment grand.
C'est
très rapidement
dans la plateforme.
On pense aussi très rapidement
que la restée de la base
de la Core.
On utilise ça
internally, Microsoft, pour des applications
de la ligne interne.
On utilise ça pour
l'employé d'employé.
L'identité du système d'identité
est construite dans Blazer.
La app de la compétition
est construite dans Blazer.
Il y a beaucoup de portes internes
et des sites admins.
Ce n'est pas un nouveau cloud native
qui a été offert.
Le dashboard pour la base
est construite dans Blazer.
Est-ce que ça va être adopté ?
Oui, absolument.
Il y a des histoires de customer
qui peuvent aller
voir qui est adopté.
Si on regarde
les web development, il y a
beaucoup de développeurs JavaScript
et beaucoup d'investissement
en JavaScript.
Est-ce qu'il y a un système de JavaScript
plus grand que le système de Blazer ?
Absolument.
Il y a un JavaScript qui a été
en train de se faire.
Microsoft, on utilise
JavaScript et investir en JavaScript
aussi.
On a beaucoup de produits qui ont été
construits en React et on a
des outils de JavaScript.
On est en Microsoft,
une compétition multilinguelle.
On ne fait pas juste .NET,
mais on fait .NET, JavaScript, Python,
Python, Rust,
et C++.
Il y a des options
dans le système de développement.
Vous devez choisir le langage
et les outils qui font le plus
sens pour votre organisation,
pour votre application, pour vos
réquiresments et scénarios.
Je dirais que avec Blazer, vous
avez une expérience
très bonne.
On essaie de faire ça pour vous,
d'être plus rapide,
d'utiliser les plus vides
de C-Sharp pour construire
votre application, d'avoir un système
très grand, pour être productive.
Est-ce qu'il y a d'autres options ?
Oui, et beaucoup de
.NET, utilisez ces options.
Vous devez évaluer et faire
le choix pour vous.
Je vais vous donner mon plus 1.
J'ai utilisé Blazer pour toutes mes
apps, et j'aime pas.
Si vous n'avez pas utilisé,
vous pouvez le voir.
Je vais vous donner un autre.
Dan et moi avons trouvé quelque chose
d'un peu plus d'une année plus tard,
un bloc pour des entreprises.
Ils ont des outils de complétation
qui n'étaient pas
compatible avec Blazer.
C'est la company en Texas.
Dan, si vous vous souvenez...
Est-ce que ce sont des downloads ?
Sonar source.
Non, c'est un code
de clenéonast,
ou des outils de s'application
pour les applications.
Ils ont eu le sens
de l'adresser.
Je pense que
quand on trouve des outils qui ne peuvent pas
utiliser Blazer, on le fait.
On a trouvé un grand customer
un peu d'années, et Dan a
regardé.
On est aussi là,
et je vais vous dire
que dans le podcast,
ce n'est pas WebTech.
Le web n'est pas allé.
Blazer est un webframework
et .NET.
Ce n'est pas un framework UI
comme un silverlight.
Web n'est pas allé.
Un autre exemple de complétences,
ce qui est ce que je pensais que vous allez dire,
c'est que l'un des sites Blazer
qui ont été travaillés,
ont utilisé Blazer
et Blazer Wasm, et il a été
downloadé par les DLLs.
Un des utilisateurs avait des problèmes avec leur company
car ils n'avaient pas pu downloader les DLLs.
Et .NET 8, ce n'est pas fixé.
Oui, ce n'est pas adressé.
Le fait que la app WebAssembly
soit installée en bas,
c'est que vous downloadez un petit .NET runtime
impliqué en WebAssembly
pour que vous puissiez ensuite
utiliser le code normal.net.
Les assemblées normales.
Les raisons historiques
sont les files de Windows P.E.
Ce qui, je pense,
fréquent des gens quand ils regardent
les wires. Ils disent que les DLLs
sont en train de faire des tests.
Ils ont pu faire des tests
dans le code de la sécurité de la salle.
Vous ne pouvez pas faire des codes
avec les DLLs que vous n'aurez pas pu faire
avec JavaScript.
C'est un modèle safe.
Mais un peu
des environnements d'organisation
qui se tracent
sur les DLLs qui sont transportés
dans plusieurs différentes manières.
Et qui causent des assemblées de WebAssembly
qui sont bloquées.
Nous avons également introduit un format de packaging
où nous prenons les assemblées de .NET
et nous étendons les files de Windows P.E.
en bas et repackageons-les
comme un module de WebAssembly.
Quand vous publiez
votre code de WebAssembly
dans la code de la salle,
vous regardez le format de WebAssembly
sur le wire.
Comme vous l'avez entendu,
ça a été adressé
à cette question.
Si vous vous rendez à des problèmes,
nous le verrons.
Nous appelons le WebCIL.
C'est un .NET IL.
C'est un WebCIL.
C'est le format de packaging que nous créons.
C'est fantastique.
Je suis très sûr que vous avez un stop
dans 1 minute.
2 minutes.
Je ne sais pas si c'est quelque chose
que vous voulez parler de.
Je pense que 2 minutes
n'a pas suffisamment de temps
pour parler d'autre.
Je veux juste dire
que je vous remercie pour vous joindre
et pour cette heure avec moi.
C'était mindblowing, vous avez été
et vous avez été géssés.
Merci pour nous avoir en place.
...
Episode suivant:
Les infos glanées
TheUnhandledExceptionPodcast
Tags
Serverless, AWS, and .NET - with James Eastham