Conversaciones en C ++: WP 21, Boost, Conferences

Hola a todos!


Recientemente, se celebró en Novosibirsk el próximo C ++ Siberia 2019. La conferencia tuvo un ambiente acogedor y muchos buenos informes. Las grabaciones en video de los informes ahora se están preparando para su publicación. Aproveché esta oportunidad para hablar con dos de nuestros oradores frecuentes que rara vez se pierden conferencias y siempre hacen excelentes informes: Anton Polukhin antoshkka y Pavel Filonov.


Anton es el representante de Rusia en ISO en las reuniones internacionales del grupo de trabajo de estandarización de C ++, el autor de varias propuestas aceptadas para el estándar de lenguaje C ++, las bibliotecas de Boost y el libro de cocina de desarrollo de aplicaciones de Boost C ++.


Pavel es desarrollador e investigador en Kaspersky Lab. Está involucrado en la aplicación de métodos de aprendizaje automático para garantizar la seguridad de los sistemas ciberfísicos y se dedica a la enseñanza. Mientras espera el video de la conferencia, le sugiero que lea la transcripción de nuestra conversación.



Sergey: Hola a todos! Este es Sergey Platonov, ahora estamos en la conferencia C ++ Siberia. Hoy estamos hablando con nuestros oradores habituales: Anton Polukhin y Pavel Filonov. Como estas


Pavel: Genial! Estamos de vuelta en Novosibirsk.


Sergey: Ahora estamos sentados frente a los bosques siberianos.


Pavel: Buena vista, buena gente, temas muy interesantes.


Anton: Y en este momento hace más calor aquí que en Moscú.


Sergey: Me gustaría hablar contigo sobre C ++ hoy, por extraño que parezca en una conferencia de C ++. Sobre cosas diferentes. Por ejemplo, estoy muy interesado en saber por qué viene a la conferencia de Moscú a Novosibirsk, y esta no es la primera vez.


Pavel: Por mi parte, puedo decir que tengo una razón principal: realmente me gusta decirle algo a alguien. No puedo guardarlo para mí. Cuando me entero de algo nuevo e interesante, por un lado, siempre dudo si es realmente bueno, interesante, tengo que ir a decirle a la gente y ver cómo reaccionarán a esto, si escupirán o les pedirán que vuelvan. Y a juzgar por el hecho de que no escupen, no tiran tomates, a la gente probablemente le gusten las cosas que están explotando conmigo. Quiero escucharlos y discutirlos. Además, siempre es un placer simplemente viajar. La primera vez que estuve en Novosibirsk fue en la conferencia C ++ Siberia, y la segunda vez también en ella. Solo así, no llegaría aquí.


Anton: Siempre es interesante viajar a otras ciudades. Es maravilloso en Novosibirsk, hace más calor aquí que en Moscú. La nieve húmeda no cae sobre la piel del cuello. Uno más!


Sergey: Por supuesto, soy falso y hago esta pregunta por una razón. Recuerdo el grupo de trabajo 21 y cómo, en mi opinión, apareció. Estoy interesado en escuchar al hombre que realmente lo hizo. ¿Cómo sucedió que Rusia ahora está representada en el comité?


Anton: Sucedió en C ++ Rusia en San Petersburgo. Recuerdo que entré en el elevador con mi esposa, Gor Nishanov ( Twitter ) ya estaba parada allí, me di cuenta de que esta es una excelente manera de descubrir cómo ingresar al comité internacional de normalización. En realidad, le pregunté sobre esto. Y Gore es así: “Sabes, hoy estás lejos de ser el primero en hacerme esta pregunta. La gente de Yandex se te acercó. Respondo que he estado trabajando por un corto tiempo en Yandex, y me pidió que describiera cómo se veían estas personas, también me acercaré a ellos. Gore me lo contó todo. Fui a las personas que él describió. Y realmente resultó que Yandex iba a crear una especie de grupo de trabajo para mantenerse al tanto de C ++ y representar los intereses de los desarrolladores rusos en un comité internacional. El grupo fue creado. No solo hay empleados de Yandex, hay empleados de otras compañías.


Pavel: Ahora, desde Kaspersky Lab como miembro del grupo, Anton Bikineev también trabaja allí. Hoy, desafortunadamente, no está con nosotros.


Anton: Por cierto, Anton hace algo genial: se subió al interior del compilador con brazos y piernas e intenta implementar una de nuestras propuestas. Incluso tiene un prototipo más o menos funcional.


Pavel: Por cierto, se queja de ti porque escribes propuestas más rápido de lo que logra implementarlas en el compilador.


Anton: Sí lo es.


Sergey: ¿ Es decir, Anton Bikineev actúa aquí como un grupo central de nuestro WG de trabajo? Es bueno saber que las conferencias tuvieron algo que ver en esto. Espero que todos entiendan lo útil e interesante que es esto. ¿Resulta que no tiene que trabajar en Yandex para ingresar al grupo de trabajo?


Anton: En general, no es necesario ser parte de un grupo de trabajo para transmitir su idea al comité de estandarización de C ++ o para formar parte de las ventajas.


Pavel: Parece que puedes ir al sitio y dejar tu sugerencia.


Anton: Sí, en https://stdcpp.ru . Allí puede compartir la idea, discutir las ideas de otros participantes. Hay muchas ideas, pero no suficientes manos para asumir todo. Por lo tanto, si una persona viene y comienza a escribir borradores específicos de al menos algunas propuestas de ideas, entonces será más fácil para todos, y estas ideas llegarán rápidamente al comité.


Pavel: ¿Qué opinas, Anton, en qué propuesta u otra cosa es la mayor contribución del grupo de trabajo expresado?


Anton: Hicimos una dirección para toda la reflexión estática en los profesionales. Como recuerdo ahora: había una propuesta para hacer constexpr_vector , una clase separada que solo se puede usar en un contexto constexpr. David sale (David Vandevoorde) y habla sobre esto. Toda la sala está gritando alegremente, hagámoslo. Y él es así: “¿Pero queremos duplicar todas las clases en la biblioteca estándar de esa manera? No hay otra manera. “Quizás constexpr_new? "" No, no funciona ". Y yo soy así: desafío aceptado. Y tres meses después, Sasha Zaitsev y yo hicimos un prototipo que permite que std::vector funcione en un contexto constexpr. Funciona directamente, en clang, incluso en el compilador no tuve que jugar nada. Se lo mostramos a David, él dice: “¡Ah! Bueno asi? No, hiciste trampa aquí. Estuvimos de acuerdo Él dice: "No, bueno, por supuesto que puedes. Por cierto, ¿por qué no? Después de eso, tiró el documento con constexpr_vector y comenzó a trabajar para que todos los contenedores de la biblioteca estándar pudieran usar el contexto constexpr. Ahora ya hay mucha gente allí. Nosotros del grupo de trabajo básicamente perdimos todos los algoritmos con constexpr, Louis Dion hace que los contenedores se pierdan con constexpr, y David hace que el núcleo del lenguaje hábilmente haga algún tipo de constexpr nuevo.


Sergey: ¿Se trata de asignadores?


Anton: si. Hubo un problema en los asignadores.


Sergey: Genial! Estos parecen grandes cambios.


Anton: Otros 6 años, y aparecerán en el estándar ;-)


Pavel: No, probablemente, no tendremos tiempo de tocarlos con la punta de los dedos tan rápido.


Anton: los contenedores constexpr deben estar en el vigésimo estándar. algoritmos constexpr definitivamente golpeó.


Pavel: Es decir, ¿solo un par de años?


Sergey: Si 2019 ha comenzado ahora, entonces el vigésimo estándar estará en algún lugar en 2020. Bueno, sí, probablemente un par de años.


Pavel: Además, si recuerdo correctamente, los compiladores siempre se han quedado rezagados en comparación con los escritores estándar, ahora a menudo veo intentos de ejecutar primero algo como un experimento a través del compilador: lo que Anton está haciendo es lo que usted está diciendo. Y solo entonces tómelo en forma de estándares.


Sergey: Antes, recuerdo, todavía había TR.


Anton: Pero fueron arrojados a favor de TS. Mucho ha cambiado, sí :-)


Sergey: Es decir, ahora en los compiladores modernos también puedes conectar los espacios de nombres ts ?


Anton: Ahora se hace con casillas de verificación con extensiones para el compilador, es decir, hay Coroutines TS, puedes probarlas en Clang y Visual Studio . Hay módulos TS, y no son iguales en todas partes. Hay TS en materia de bibliotecas, subprocesos múltiples, redes.


Sergey: Este sigue siendo el núcleo del lenguaje con los asignadores, ¿está esto también establecido por una determinada bandera separada?


Anton: No se le dará una bandera separada. David (David Vandevoorde): uno de los desarrolladores del compilador, uno de los desarrolladores front-end de EDG, acaba de implementarlo. Se cree que esto está bien, no rompe nada, no queremos otros nuevos, algo no tiene sentido experimentar aquí, todo simplemente funciona. Genial, estamos tirando.


Sergey: Muy bien.


Pavel: Por cierto, volviendo al tema de las conferencias. Anton, eres un orador frecuente no solo en C ++ Rusia, sino que también asistes a CPP Con, Meeting CPP, CPP Now, tal vez algo más. ¿Puedes de alguna manera comparar y decir lo que ves la diferencia? ¿Son las mismas personas, los mismos temas o siente que, dependiendo de cómo se mueva, cambia el tema o el idioma de trabajo de la conferencia?


Anton: En principio, se considera que en las conferencias en Rusia hay desarrolladores muy fuertes. Puedes contarles temas muy complejos. Intenté contar un tema extremadamente difícil, magic_get, en algún lugar de otra conferencia, y recuerdo a un tipo que, mientras hablaba, dejó de responder a estímulos externos. Simplemente se sienta y no parpadea. Pensé que tal vez podría insertar un chiste, lo inserté, bromeé, ni siquiera parpadeó. Luego se dio la vuelta. Pero probablemente sea mejor contar ese hardcore solo aquí en alguna parte.


Sergey: Y solo a Anton Bikineev . Es solo que recordamos la historia justo a la hora de la cena, cuando estabas hablando de magic_get en una de las reuniones.


Pavel: Anton asistió a esta reunión y le hizo una pregunta tan difícil que claramente fue más allá de lo que le dijo. Parece que la búsqueda en la lista de tipos no es lineal, sino con la ayuda de la búsqueda binaria. Le respondiste y le preguntaste cómo lo sabía. A lo que Anton mencionó que había estado leyendo las fuentes de magic_get , que está en su GitHub, toda la noche antes de su informe y tratando de descubrir cómo funciona.


Anton: Tenemos una vieja historia extraña con Anton Bikineev. Vi cómo hizo un par de confirmaciones en Boost, incluso antes de que nos conociéramos. Y después de eso, vi que hizo una solicitud de extracción tanto en Clang como en constexpr. Vi esta solicitud de extracción, y por alguna razón recordé el nombre en ese momento. ¡Probablemente porque el tipo de Boost comprometido con Clang es genial! Luego hablo en C ++ Siberia sobre el 17 más, sobre si constexpr, y el tipo grita desde la audiencia: "Sí, incluso hice esto un poco en Clang". Soy como: "¡Eres Anton Bikineev!"


Sergey: C ++ Siberia se conecta.


Pavel: Además, si no recuerdo mal, fue en Siberia donde comenzamos a configurar los primeros experimentos en clases magistrales. Al principio intentaron probarlos, para ver si este formato funcionaría. Y como muestra la práctica de las últimas 3-4 conferencias, si se cuenta C ++ Rusia, me parece que el nuevo formato funcionó muy bien. Por ejemplo, ahora tengo la oportunidad, no en 40 minutos, de tratar de abordar un tema, sino con calma durante 6 horas para decirle a la gente todo lo que creo que es necesario. Si la gente está lista, le cuento todo lo que puedo, incluso más de seis horas.


Anton: Los talleres son divertidos. A veces hacen preguntas como estas: "Maldición, ¿por qué?" Y durante varios días intentas comprender por qué esto no funciona en este compilador en particular, en este portátil infeliz en particular. Y hay algún tipo de error en el compilador u otra cosa. Parece que vienes a la clase magistral solo para decir algo, pero en cambio obtienes una retroalimentación útil que ayuda a arreglar algo, a mejorar algo.


Sergey: Desde el punto de vista del organizador de la conferencia y el curador de la comunidad, diré que los talleres son muy útiles para mí, porque a veces las personas acuden a él, adquieren algunos conocimientos básicos, los desarrollan más, los aplican y regresan con un informe al respecto. Varias personas se acercaron a mí y me dijeron que iban a una clase magistral con uno de ustedes, que estaban muy interesados ​​en el tema e hicieron su propio informe.


Pavel: Anton, recuerdo que tú también eres el autor del libro sobre Boost , ahora la segunda edición ya está disponible. Dime cómo decidiste escribirlo? Por ejemplo, todavía no me comprometeré a expresar mis pensamientos en un formato tan complicado, en mi opinión.


Anton: Fue un mes muy ocupado en Boost, estaba discutiendo con alguien allí, maldiciendo con alguien y diciendo qué debería hacerse mal. Me convencieron y, al parecer, me convencieron. Y el editor solo buscaba personas que escribieran un libro sobre Boost. Parece que buscaron en la lista de correo de Boost, observaron al participante más activo que hablaba con más confianza que todos los demás y me eligieron.


Pavel: ¿Cómo empezaste a contribuir a Boost? ¿Era un trabajo o solo un pasatiempo?


Anton: Esto se debió al hecho de que no entendía cómo funciona Boost. Utilizamos Boost en el trabajo. Uno de mis primeros trabajos fue Boost, y ni siquiera sabía cómo funciona allí, por qué funciona así.


Paul: Boost es una biblioteca mágica hasta ahora.


Anton: Y comencé a mirar, entender, y en algún momento me di cuenta de que aquí en lexical_cast puedes hacerlo mejor. Luego le escribí a ese mantenedor, Alexey de lexical_cast , apliquemos este parche, pero no me respondió. Le escribí dos o tres parches más.


Pavel: Si no recuerdo mal, debes ser firme en la promoción de tus parches.


Anton: por supuesto. Con código abierto siempre. Como resultado, el mantenedor dijo que ahora está cosiendo completamente, que tiene mucho que hacer y se ofreció a convertirse en un mantenedor de lexical_cast mí. Estaba encantado y acepté. Y luego Boost. Cualquier Boost. Variante. Me colgué lentamente. En ese momento escribió un par de sus bibliotecas, Boost.TypeIndex, Boost.Stacktrace, que ahora se acepta como estándar.


Pavel: ¿De dónde sacas ideas para nuevas funciones en bibliotecas listas para usar?


Anton: Algunas cosas, por ejemplo, Boost.DLL: esta persona escribió en la lista de correo de Boost, dicen, mira, qué biblioteca tan genial tengo, hace muchas cosas muy aterradoras, complejas e interesantes. La miré así: "Bueno, sí, sí, sí, ¡oh, pero me gustaría eso!" Me puse en contacto con este tipo y le sugerí que sacara alguna pieza para trabajar con complementos por separado. Lo sacaron por separado, y resultó que esta pieza llegó a Boost mucho antes de lo que hace el hombre. Con Stacktrace, en algún momento me di cuenta de que no hay ningún mecanismo para obtener Stacktrace. Sí, a veces me llega lentamente. Y ese fue el momento en que me di cuenta de que en los profesionales no hay forma de obtener Stacktrace.


Pavel: Parece que en dos trabajos diferentes escribí una biblioteca similar dos veces para imprimir trazas de pila en el otoño.


Anton: Y así que lo tomé, lo probé, se lo lancé a la gente de Boost, me dijeron que no, que no lo haría. Luego lo intenté dos veces más, y aquí está una de las versiones, ella arregló todo y echó raíces.


Pavel: ¿ Pero de alguna manera lo usas en tu trabajo?


Anton: Sí, en Yandex.Taxi estamos usando Boost.Stacktrace de forma muy activa, es muy bueno con las mismas acciones, por ejemplo. ¿Tienes algo en común? Trabajar con JSON, por ejemplo. El usuario en algún momento accede al campo JSON que no está allí. ¿Solo lanzar una excepción? Bueno, en algún lugar por encima se atrapará. En general, el usuario ¿a dónde llamó? Ahí, en todo el código para trabajar con JSON, ¿tiene el usuario el campo exacto donde no lo ha alcanzado? ¿En qué punto lo solicitó? Y Stacktrace ayuda perfectamente a comprender qué y dónde está mal, dónde el usuario se equivocó.


Pavel: ¿ A menudo las versiones que usas en el trabajo comienzan a dispersarse con lo que hay en código abierto? ¿O estás constantemente intentando transferir funciones de un lado a otro?


Anton: transfiero características de un lado a otro. Por supuesto, con el permiso del liderazgo. Y diré que esta es una interacción muy útil. Por ejemplo, en Yandex.Taxi, notamos que falta la función toString () para Stacktrace. Está en la propuesta de estandarización, se describe en todas partes, pero no está en Boost. A pesar de que me parecía que ella estaba allí, arranqué toda la propuesta de estandarización de Boost. Añadido a Boost. Todos son felices


Pavel: Por cierto, volviendo al grupo de trabajo. Probablemente, ¿inmediatamente vas a la próxima reunión después de C ++ Siberia?


Anton: Sí, abordaré el avión mañana por la mañana, 40 horas de vuelo, y el mismo día volaré a Kona. En la agenda de la reunión, todo el comité tiene que decidir cómo se verá C ++ 20. Qué implicará. La última parada antes de C ++ 20 seguirá siendo solo una corrección de errores. Los módulos y las rutinas están en la agenda ahora.


Pavel: Dos características importantes sobre las cuales hay largos y ardientes debates.


Anton: Todo está más o menos claro con los módulos, parecerán aceptados, pero con las rutinas es completamente incomprensible, porque justo en esta reunión apareció la tercera propuesta competitiva para las corutinas. Es completamente diferente, completamente diferente de lo que está en el Coroutines TS, y hay puntos fuertes. Hay, por supuesto, los débiles. No está claro cómo irá en absoluto. Y con qué frecuencia las personas están sintonizadas con las corutinas.


Pavel: ¿Cuáles son tus planes para la próxima C ++ Rusia? ¿Quieres un informe tuyo?


Anton: Sí, definitivamente. Se me ocurrirá algo. Tal vez sobre Pilorama.


Sergey: Bueno, muchas gracias amigos! No te detendré más. ¡Adiós a todos! Nos vemos en C ++ Rusia .


Algunas palabras sobre los entrenamientos en la conferencia C ++ Rusia


Como Pavel dijo correctamente en esta entrevista, los entrenamientos y las clases magistrales tienen una ventaja innegable: el moderador tiene la oportunidad de presentar todo el tema en unas pocas horas, en lugar de tratar de mantenerlo en 50 minutos como en un informe regular.


Poco a poco, las clases magistrales se están convirtiendo en una tradición. Los celebramos por primera vez en 2017, luego los probamos en C ++ Siberia. Este año habrá tres clases magistrales. Ya conociste a los líderes de dos de ellos en esta entrevista.


Una clase magistral es de seis horas, combinando información teórica y ejercicios prácticos. Un pequeño número de participantes proporciona trabajo individual con cada uno. Esto es, en primer lugar, por supuesto, práctica. Por lo tanto, todas las clases magistrales requerirán una computadora portátil con el compilador C ++ moderno instalado.


Se ofrecieron tres clases magistrales para elegir: “La programación funcional aplicada en C ++” será dirigida por Ivan Čukić, y la “Integración continua para el desarrollador de C ++” y “C ++ inteligente y moderno” será el trabajo de nuestros desarrolladores, Pavel Filonov y Anton Polukhin.


La clase magistral de Ivan no es para el nivel de entrada, será adecuada para los medios que desean abrir más las puertas de la percepción. Ivan es investigador en la Universidad de Belgrado, mantenedor de KActivities, Contour daemon, Lancelot y otros proyectos de KDE. Será, como pueden entender, sobre programación funcional. Por si acaso, se aconseja a los participantes que tengan las últimas versiones de GCC y Clang. Un poco más tarde, presentaremos una imagen de VirtualBox con todo lo que necesita. Los siguientes temas se tratarán en la clase maestra: es el STL lejos de la programación funcional, qué son los objetos funcionales, std :: invoke y mónadas, mónadas, mónadas. Y algunas mónadas más.


Ya estás familiarizado con este investigador desarrollador en Kaspersky Lab Pavel Filonov . Invitará a los participantes a construir su CI con conan y travis. Pavel también explicará el método de integración continua y, en la parte práctica, enseñará cómo resolver problemas utilizando ejemplos de un proyecto / trabajo en el hogar de código abierto y un proyecto de trabajo con código fuente cerrado.


Naturalmente, debería poder programar en C ++, traer una computadora portátil con cualquier sistema operativo, uno de los principales compiladores, cmake nuevo (necesita comprender la sintaxis de CMakeLists.txt), git, python 3 y pip3 y un montón de cuentas. Más detalles sobre esto están en la descripción en el sitio .


Y finalmente, una clase magistral de antoshkka está dedicada a las habilidades de optimización adecuada. Por si acaso, le recuerdo: es un desarrollador senior del servicio Yandex.Taxi, un representante de WP 21 en reuniones internacionales del comité de estandarización de C ++, autor de propuestas aceptadas para un estándar de lenguaje, desarrollador de Boost, etc. Anton considerará ejemplos con errores frecuentes de optimización prematura, luego los participantes considerarán algoritmos y complejidades de la biblioteca estándar, contenedores con características, semántica de movimiento y su comportamiento inesperado, subprocesamiento múltiple. Dado que el curso es práctico, todos los temas se investigarán experimentalmente utilizando la biblioteca C ++ para los puntos de referencia de Google. Para el curso, solo necesitará conocimientos básicos de C ++ y el último compilador compatible con C ++ 11.


Todo lo anterior es, por supuesto, solo una breve referencia para su referencia. La única fuente verdadera de verdad es el sitio de la conferencia , donde todo está detallado y claramente establecido. Por ejemplo, enumera claramente el software necesario en su computadora portátil junto con sus versiones.


La Conferencia C ++ Rusia se llevará a cabo del 19 al 20 de abril de 2019 en Moscú. Las entradas se pueden comprar en el sitio web oficial . Importante: a partir del 1 de marzo, los precios de las entradas aumentarán. Si desea comprar a precios de febrero, debe hacerlo ahora.

Source: https://habr.com/ru/post/441800/


All Articles