SlideShare a Scribd company logo
1 of 49
Download to read offline
Opensourceна .NET 
И О ТИГРАХ НА РАВНИНЕ
Об авторе 
Павел Новиков 
Окончил (вранье!)НГУ ФИТ, когда-то в прошлом 
Работает: фриланситна C#/.NET 
На досуге: ваяет свой opensource-проект 
Преподает: НГУ, IT-академия Сухорукова 
Любит: C#, Microsoft, ежей и хорошо поесть 
Skype: nsu_the_cjay 
Email: pavel.b.novikov@gmail.com
Суть™ 
.NET(читается «дот-нет»)Framework 
это набор инструментов для разработки программного обеспечения (программный каркас) от Microsoft. Да-да, тех самых, которые создали Windows. 
Это как STL или JRE. 
C♯(читается «си-шарп») 
это язык программирования, из которого можно быстро и удобно использовать все средства .NET Framework для создания самых разных приложений. Унаследовал многое от java, C++, C, так же имеет набор своих особенностей. 
Это как C++ или Java соответственно.
Как это все связано с Opensource?
Бытует мнение 
“The danger is that Microsoft is probably planning to force all free C# implementations underground some day using software patents.”(с) RMS
Бытует мнение 
“The danger is that Microsoft is probably planning to force all free C# implementations underground some day using software patents.”(с) RMS 
Этожевинда! Виндаглючная! 
Вендекапец! 
Акакжекроссплатформенность?!!
Бытует мнение 
“The danger is that Microsoft is probably planning to force all free C# implementations underground some day using software patents.”(с) RMS 
Ужасные расходы на лицензии 
Нужна лицензия на Visual Studio, ReSharper, и вообще на все, что делает Microsoft! Это дорого 
Этожевинда! Виндаглючная! 
Вендекапец! 
Акакжекроссплатформенность?!! 
Дорогой хостинг! 
ВСЕЗАДЕНЬГИ!! ПРОКЛЯТЫЕ КАПИТАЛИСТЫ-КОПИРАСТЫ!
Бытует мнение 
“The danger is that Microsoft is probably planning to force all free C# implementations underground some day using software patents.”(с) RMS 
Ужасные расходы на лицензии 
Нужна лицензия на Visual Studio, ReSharper, и вообще на все, что делает Microsoft! Это дорого 
Этожевинда! Виндаглючная! 
Вендекапец! 
Акакжекроссплатформенность?!! 
Дорогой хостинг! 
ВСЕЗАДЕНЬГИ!! ПРОКЛЯТЫЕ КАПИТАЛИСТЫ-КОПИРАСТЫ! 
Opensourceна продуктах Microsoft нет и быть не может!
Явление суслика народу
Явление суслика народу
Места скопления 
Спецпитомник, созданный Microsoft: www.codeplex.com 
Поддерживает Git, SVN, Mercurial, TFS 
Проектов –хренова туча, если кратко.
Места скопления 
Всеми любимый хипстерскийGitHub 
Рассказывать тут особо нечего –зайдите в Trending Repositories, сами все увидите
Места скопления 
SourceForge–статистика по C#-проектам выдает около 16 тыс. штук.
Коротко о самых известных 
Название 
Описание 
Ссылка 
Лицензия 
ASP.NETMVC 5 
Web-фреймворк, который полностьювытеснил классический WebForms 
https://aspnetwebstack.codeplex.com/ 
Apache License 
Prism 
WPF/MVVMфреймворк 
https://compositewpf.codeplex.com/ 
Apache 2.0 License 
EntityFramework 
ЛютыйORM, местами рвущий Hibernate по удобству 
https://entityframework.codeplex.com/ 
Apache 2.0 License 
Autofac 
Популярный маленький, удобный и быстрый IoC-контейнер 
https://github.com/autofac/Autofac 
MIT 
Automapper 
Удобныйи быстрый способ скопировать содержимое одного класса в другой 
http://automapper.org/ 
MIT 
Roslyn 
О нем далее 
https://roslyn.codeplex.com/ 
Apache 2.0 License 
Это первое, что пришло в голову. 
На самом деле проектов гораздо больше. 
Есть многоальтернатив, есть из чего выбрать и вообще.
Коротко о самых известных портах
Коротко о самых известных портах 
Название 
Описание 
Ссылка 
Лицензия 
NHibernate 
Впредставлениях не нуждается 
https://github.com/nhibernate 
LGPL 
NUnit 
Фреймворк дляunit-тестирования 
http://sourceforge.net/projects/nunit/ 
zlib/libpngLicense 
NVelocity 
ПортJakarta Velocity–шаблонизатор 
http://nvelocity.sourceforge.net/ 
Apache Software License 
Spring.NET 
Швейцарскийскладной нож, расширяющий возможности фреймворкав плане транзакций, IoC и много чего другого 
https://github.com/spring-projects/spring- net/ 
Apache 2.0 License 
NAnt 
Сборщикпроектов для тех, кто не освоил MSBuild 
http://nant.sourceforge.net/ 
GPL
Stratageme15 
ПОПЫТКА ПРИЛОЖИТЬ РУКУ К C#-ОПЕНСОРСУ
Проблематика 
◦Disclamer: Я не являюсь противником javascript! 
◦Команда дотнетчиковделает сайт на ASP.NET MVC и испытывает трудности с javascript-ом 
◦.NET-чикине умеют писать на javascript-е. У них слишком строго типизированное мышление 
◦Столкновение C#-программистов и javascriptведет к следующей боли: 
◦отсутствие строгой типизации, повышенная вероятность ошибок 
◦разрастание неструктурированного js-кода 
◦отсутствие productivitytool, что знатно замедляет работу 
◦отсутствие удобной документации "под рукой" (по jquery, DOM, Knockout.js) 
◦отсутствие средств для консолидации технологического опыта 
◦А вообще, конечно, черт с ним со всем, я просто хочу писать для web-а на C#, потому что люблю его. Должен же быть хоть какой-то аргумент к пафосу :)
Проблематика 
Типичный код C#-программиста наJS: 
•Функции в корне 
•Игнорирование прототипов 
•Игнорирование convention-овjQuery 
•Адское форматирование 
•Абсолютное неумение пользоваться замыканиями 
•Полный быдлокод, разврат и содомия
Решение 
Хочется писать на C#, используя возможности js-фреймворков(jQuery, underscoreetc) как интерфейсов 
Самая изюминка –в использовании LINQ, лямбда-выражений и встроенных коллекций 
Нужен транслятор! 
Возможностиязыковпримерносовпадаютвплотьдоключевыхслов. 
Следовательно, задача сводится к удобному способу трансляции обращений к фреймворками созданию удобных возможностей для преобразования существующего JS- кода в описания интерфейсов C#.
Как это работает? 
jquery-min.js 
JS Parser 
Синтаксическое дерево 
Прямые руки 
IJQuery 
Interfaces 
Translation Tactics
Как это работает? 
DOMv3.idl 
IDL Parser 
Структура IDL 
Прямые руки 
IDomWindow 
Interfaces 
Translation Tactics
Как это работает? 
IDE 
IDomWindow 
IJQuery 
.NET Framework
Как это работает? 
IDE 
IDomWindow 
IJQuery 
.NET Framework 
MyCoolScript.cs 
Csccompiler 
MyCoolScript.dll
Как это работает? 
IDE 
IDomWindow 
IJQuery 
.NET Framework 
MyCoolScript.cs 
Csccompiler 
MyCoolScript.dll 
Translator 
MyCoolScript.js
So what is Stratageme15? 
Translator 
IDL Parser 
JS Parser 
Интерфейсы 
Спеки 
Пакеты расширений 
Stratageme15
Почему название? 
«Тридцать шесть стратагем(кит.三十六計)—древнекитайский военный трактат. В более широком смысле, собрание неявных стратегических приёмов и система непрямых тактических ходов, используемая для достижения скрытой цели, получения преимущества и перехвата инициативы.» 
-Wikipedia 
«15. Сманить тигра с горы на равнину (調虎離山) 
Дождись срока, когда противник устанет. 
Используй кого-нибудь для того, чтобы заманить его в ловушку. 
Никогда не атаковать противника, преимущество которого в его позиции. Вместо этого выманить его с выигрышной позиции, тем самым отделяя от источника силы.» 
-Там же
Почему название? 
(режим повышенной четкости) 
Ну типа Javascript–это тигр, а мы его сманиваем на равнину – C#, где у нас больше преимуществ.
Deep dive 
ТЕХНИЧЕСКИЕ ВОПРОСЫ И ПРОБЛЕМЫ
Принцип работы парсера 
Coco/R –разработка ребят из университета г. Линц, что в Австрии 
◦Кто не знает –это генератор компиляторов. Такая штука, которая принимает на вход описание грамматики в EBNF (по факту –еще и с семантическими действиями)а на выходе выдает исходный код токенайзераи синтаксического анализатора 
◦Почему не ANTLR? «Так надо» (с) 
Грамматика, составленнаявручную по ECMA-262и собственным ощущениям. 
Разумеется, сварганен DOMдля кода –то есть набор классов со всеми синтаксическими нодами 
Для IDL –в процессе. Благо там она более-менее строго описана 
Приобщиться можно тут: 
https://github.com/pavel-b-novikov/Stratageme15/blob/master/CocoR/JavaScript.atg 
544 строки кода
Принцип работы парсера 
Сложные и интересные моменты: 
◦Javascript-регулярные выражения 
◦Вечно путались с делением. Проблема решена частичным переписыванием шаблона токенайзераот Coco/R–внедрен механизм возврата к началу выражения, если оно начало парситьсякак regex, но не должно бы 
◦Отсутствие точки с запятой как универсального разделителя операторов 
◦Внезапное осознание, что ЛЮБОЕ выражение JS является оператором 
◦Абсолютно адские self-calling functions и тернарные операторы 
◦И вообще не описанный в стандарте синтаксис в некоторых продуктах
Результат 
ПарситсясжатыйjQueryи много разных других фреймворков 
На скриншоте –кусок тулзыдля семантического вычленения интерфейсов. «Мы работаем над этим»
Принцип работы транслятора 
В целом -обычный обход в глубину синтаксического дерева. 
Исходник C# 
Парсер(Roslyn) 
Разобранный код –синтакс. дерево
Принцип работы транслятора 
ClassDeclaration 
MethodDeclaration 
Identifier 
ParameterList 
Block 
VariableDeclaration 
… 
PropertyDeclaration 
ClassDeclaration 
IfStatement 
WhileStatement 
… 
context = new Context(); 
while(!stackEmpty) 
{ 
node = stack.Pop(); 
reactor = Reactors.GetForNode(node); 
reactor.Process(node,context); 
} 
return context.ResultRoot; 
Репозиторийреакторов 
Тип текущего класса 
Указатель на результат 
Локальные переменные 
Текущий метод 
… 
Контекст трансляции
Ключевые особенности 
На каждый узел синтаксического дерева можно настроить разную реакцию в зависимости от имени класса, его типа, локальных переменных… Короче в зависимости от того, в каком месте кода этот узел находится. 
То есть просто писать в выходной JavaScript разный код. 
Сделать это можно не переписываятранслятор, а просто подключив к нему еще одну DLL. 
В этом и заключается основная ключевая особенность. Разработчик извне может легко повлиять на процесс трансляции, сгенерировав хоть 3 страницы кода взамен одного оператора C#. 
Это дает возможность очень легко писать расширения к транслятору для разных фреймворков, да и просто синтаксического сахара.
Ключевые особенности 
В комплекте с транслятором поставляется «базовый пакет» реакторов. 
Ну чтобы была возможность из коробки перевести хоть какой-то код – операторы, вызовы методов, объявления классов и т.п.
Промежуточные результаты
Промежуточные результаты
Промежуточные результаты
Промежуточные результаты
Промежуточные результаты
Промежуточные результаты 
Статика пока не доработана
Смертельный номер с тиграми 
Напишем вот такой код и поставим точку останова в трансляторе так, чтобы нам показали процесс трансляции вооотна этой строчке
Смертельный номер с тиграми 
В контексте локальных переменных видим все переменные и их типы. 
То есть работает type inference. Самописный. 
Оп!
Прогресс 
Translator 
IDL Parser 
JS Parser 
Интерфейсы 
Спеки 
Пакеты расширений 
Зеленым цветом я обозначил % завершенности частей проекта. Думаю, наглядно.
Что надо делать дальше? 
В хронологическом порядке: 
◦Разобраться с лямбда-выражениями и корректной трансляцией замыканий 
◦Поддержка статических классов 
◦Совершенствование системы расширений 
◦Поддержка коллекций .NET и LINQ на них 
◦Обертка в .exe, прикручивание параметров запуска/конфигурационных файлов 
◦Доработка инструментария импорта библиотек 
◦Импорт WebIDLдля браузерногоDOM 
◦Импорт jQueryи ряда других библиотек (Highcharts, Raphael, AngularJS, KnockoutJS)
Проблемы и родовые травмы 
В настоящее время испытываю некоторые проблемы с выводом типов аргументов лямбда- выражений и анонимных делегатов. Но это было сложно сделать даже спецам из JetBrains, по сему прошу снисхождения и терпения  
Проблема отладки. Дело в том, что отлаживать транслируемый код разработчикам тоже где-то надо будет. Это, пожалуй, самая серьезная проблема. Скорее всего пойду по пути GWT, сделав отдельное приложение для отладки полученного кода. Возможен вариант с организацией сервера отладки или подключения и эмуляции Trident.Но пока что я об этом предпочитаю не думать. 
Неизвестно пока что делать с Generic-классами и какое им найти место в созданной системе абстракций. То есть их не технически сложно транслировать, а сложно придумать во что их транслировать.
Вопросы?
Всем спасибо!

More Related Content

What's hot

13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...IT-Portfolio
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
Презентация «Drupal и SEO» с московской DrupalConf 2011
Презентация «Drupal и SEO» с московской DrupalConf 2011Презентация «Drupal и SEO» с московской DrupalConf 2011
Презентация «Drupal и SEO» с московской DrupalConf 2011Alexey Kostin
 
Кэширование в веб-приложениях: что? где? когда?
Кэширование в веб-приложениях: что? где? когда?Кэширование в веб-приложениях: что? где? когда?
Кэширование в веб-приложениях: что? где? когда?CUSTIS
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"Dev2Dev
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
UI Kit and design developig workflow
UI Kit and design developig workflowUI Kit and design developig workflow
UI Kit and design developig workflowArtem Molokov
 
терминология vol.2
терминология vol.2терминология vol.2
терминология vol.2SBTech
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word pressvovasik
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...SBTech
 
Ликбез для HR'ов в IT
Ликбез для HR'ов в ITЛикбез для HR'ов в IT
Ликбез для HR'ов в ITAlexander Krass
 
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.IT-Доминанта
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковAlex Tumanoff
 
Никита Цуканов - "Avalonia UI Cross-platform Open Source UI Framework"
Никита Цуканов - "Avalonia UI Cross-platform Open Source UI Framework"Никита Цуканов - "Avalonia UI Cross-platform Open Source UI Framework"
Никита Цуканов - "Avalonia UI Cross-platform Open Source UI Framework"Elias Fofanov
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruYandex
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesAliaksandr Ikhelis
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
 

What's hot (20)

13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Презентация «Drupal и SEO» с московской DrupalConf 2011
Презентация «Drupal и SEO» с московской DrupalConf 2011Презентация «Drupal и SEO» с московской DrupalConf 2011
Презентация «Drupal и SEO» с московской DrupalConf 2011
 
Кэширование в веб-приложениях: что? где? когда?
Кэширование в веб-приложениях: что? где? когда?Кэширование в веб-приложениях: что? где? когда?
Кэширование в веб-приложениях: что? где? когда?
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
UI Kit and design developig workflow
UI Kit and design developig workflowUI Kit and design developig workflow
UI Kit and design developig workflow
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
терминология vol.2
терминология vol.2терминология vol.2
терминология vol.2
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...
 
Ликбез для HR'ов в IT
Ликбез для HR'ов в ITЛикбез для HR'ов в IT
Ликбез для HR'ов в IT
 
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 
Никита Цуканов - "Avalonia UI Cross-platform Open Source UI Framework"
Никита Цуканов - "Avalonia UI Cross-platform Open Source UI Framework"Никита Цуканов - "Avalonia UI Cross-platform Open Source UI Framework"
Никита Цуканов - "Avalonia UI Cross-platform Open Source UI Framework"
 
Kranonit s16 (python). dmitry furzenko
Kranonit s16 (python). dmitry furzenkoKranonit s16 (python). dmitry furzenko
Kranonit s16 (python). dmitry furzenko
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 

Similar to Opensource на .NET

PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#Andrey Karpov
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbitjskonst
 
[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivationbeched
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибкиAndrey Karpov
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаSergey Platonov
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Stfalcon Meetups
 
О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?Tatyanazaxarova
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Кирилл Толкачёв
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Anthony Marchenko
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Ontico
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьAndrey Bibichev
 

Similar to Opensource на .NET (20)

PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbit
 
[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибок
 
New Android NDK & JNI
New Android NDK & JNINew Android NDK & JNI
New Android NDK & JNI
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кода
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
 
запахи кода
запахи кодазапахи кода
запахи кода
 
О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 
PVS-Studio vs Chromium
PVS-Studio vs ChromiumPVS-Studio vs Chromium
PVS-Studio vs Chromium
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
 

Opensource на .NET

  • 1. Opensourceна .NET И О ТИГРАХ НА РАВНИНЕ
  • 2. Об авторе Павел Новиков Окончил (вранье!)НГУ ФИТ, когда-то в прошлом Работает: фриланситна C#/.NET На досуге: ваяет свой opensource-проект Преподает: НГУ, IT-академия Сухорукова Любит: C#, Microsoft, ежей и хорошо поесть Skype: nsu_the_cjay Email: pavel.b.novikov@gmail.com
  • 3. Суть™ .NET(читается «дот-нет»)Framework это набор инструментов для разработки программного обеспечения (программный каркас) от Microsoft. Да-да, тех самых, которые создали Windows. Это как STL или JRE. C♯(читается «си-шарп») это язык программирования, из которого можно быстро и удобно использовать все средства .NET Framework для создания самых разных приложений. Унаследовал многое от java, C++, C, так же имеет набор своих особенностей. Это как C++ или Java соответственно.
  • 4. Как это все связано с Opensource?
  • 5. Бытует мнение “The danger is that Microsoft is probably planning to force all free C# implementations underground some day using software patents.”(с) RMS
  • 6. Бытует мнение “The danger is that Microsoft is probably planning to force all free C# implementations underground some day using software patents.”(с) RMS Этожевинда! Виндаглючная! Вендекапец! Акакжекроссплатформенность?!!
  • 7. Бытует мнение “The danger is that Microsoft is probably planning to force all free C# implementations underground some day using software patents.”(с) RMS Ужасные расходы на лицензии Нужна лицензия на Visual Studio, ReSharper, и вообще на все, что делает Microsoft! Это дорого Этожевинда! Виндаглючная! Вендекапец! Акакжекроссплатформенность?!! Дорогой хостинг! ВСЕЗАДЕНЬГИ!! ПРОКЛЯТЫЕ КАПИТАЛИСТЫ-КОПИРАСТЫ!
  • 8. Бытует мнение “The danger is that Microsoft is probably planning to force all free C# implementations underground some day using software patents.”(с) RMS Ужасные расходы на лицензии Нужна лицензия на Visual Studio, ReSharper, и вообще на все, что делает Microsoft! Это дорого Этожевинда! Виндаглючная! Вендекапец! Акакжекроссплатформенность?!! Дорогой хостинг! ВСЕЗАДЕНЬГИ!! ПРОКЛЯТЫЕ КАПИТАЛИСТЫ-КОПИРАСТЫ! Opensourceна продуктах Microsoft нет и быть не может!
  • 11. Места скопления Спецпитомник, созданный Microsoft: www.codeplex.com Поддерживает Git, SVN, Mercurial, TFS Проектов –хренова туча, если кратко.
  • 12. Места скопления Всеми любимый хипстерскийGitHub Рассказывать тут особо нечего –зайдите в Trending Repositories, сами все увидите
  • 13. Места скопления SourceForge–статистика по C#-проектам выдает около 16 тыс. штук.
  • 14. Коротко о самых известных Название Описание Ссылка Лицензия ASP.NETMVC 5 Web-фреймворк, который полностьювытеснил классический WebForms https://aspnetwebstack.codeplex.com/ Apache License Prism WPF/MVVMфреймворк https://compositewpf.codeplex.com/ Apache 2.0 License EntityFramework ЛютыйORM, местами рвущий Hibernate по удобству https://entityframework.codeplex.com/ Apache 2.0 License Autofac Популярный маленький, удобный и быстрый IoC-контейнер https://github.com/autofac/Autofac MIT Automapper Удобныйи быстрый способ скопировать содержимое одного класса в другой http://automapper.org/ MIT Roslyn О нем далее https://roslyn.codeplex.com/ Apache 2.0 License Это первое, что пришло в голову. На самом деле проектов гораздо больше. Есть многоальтернатив, есть из чего выбрать и вообще.
  • 15. Коротко о самых известных портах
  • 16. Коротко о самых известных портах Название Описание Ссылка Лицензия NHibernate Впредставлениях не нуждается https://github.com/nhibernate LGPL NUnit Фреймворк дляunit-тестирования http://sourceforge.net/projects/nunit/ zlib/libpngLicense NVelocity ПортJakarta Velocity–шаблонизатор http://nvelocity.sourceforge.net/ Apache Software License Spring.NET Швейцарскийскладной нож, расширяющий возможности фреймворкав плане транзакций, IoC и много чего другого https://github.com/spring-projects/spring- net/ Apache 2.0 License NAnt Сборщикпроектов для тех, кто не освоил MSBuild http://nant.sourceforge.net/ GPL
  • 17. Stratageme15 ПОПЫТКА ПРИЛОЖИТЬ РУКУ К C#-ОПЕНСОРСУ
  • 18. Проблематика ◦Disclamer: Я не являюсь противником javascript! ◦Команда дотнетчиковделает сайт на ASP.NET MVC и испытывает трудности с javascript-ом ◦.NET-чикине умеют писать на javascript-е. У них слишком строго типизированное мышление ◦Столкновение C#-программистов и javascriptведет к следующей боли: ◦отсутствие строгой типизации, повышенная вероятность ошибок ◦разрастание неструктурированного js-кода ◦отсутствие productivitytool, что знатно замедляет работу ◦отсутствие удобной документации "под рукой" (по jquery, DOM, Knockout.js) ◦отсутствие средств для консолидации технологического опыта ◦А вообще, конечно, черт с ним со всем, я просто хочу писать для web-а на C#, потому что люблю его. Должен же быть хоть какой-то аргумент к пафосу :)
  • 19. Проблематика Типичный код C#-программиста наJS: •Функции в корне •Игнорирование прототипов •Игнорирование convention-овjQuery •Адское форматирование •Абсолютное неумение пользоваться замыканиями •Полный быдлокод, разврат и содомия
  • 20. Решение Хочется писать на C#, используя возможности js-фреймворков(jQuery, underscoreetc) как интерфейсов Самая изюминка –в использовании LINQ, лямбда-выражений и встроенных коллекций Нужен транслятор! Возможностиязыковпримерносовпадаютвплотьдоключевыхслов. Следовательно, задача сводится к удобному способу трансляции обращений к фреймворками созданию удобных возможностей для преобразования существующего JS- кода в описания интерфейсов C#.
  • 21. Как это работает? jquery-min.js JS Parser Синтаксическое дерево Прямые руки IJQuery Interfaces Translation Tactics
  • 22. Как это работает? DOMv3.idl IDL Parser Структура IDL Прямые руки IDomWindow Interfaces Translation Tactics
  • 23. Как это работает? IDE IDomWindow IJQuery .NET Framework
  • 24. Как это работает? IDE IDomWindow IJQuery .NET Framework MyCoolScript.cs Csccompiler MyCoolScript.dll
  • 25. Как это работает? IDE IDomWindow IJQuery .NET Framework MyCoolScript.cs Csccompiler MyCoolScript.dll Translator MyCoolScript.js
  • 26. So what is Stratageme15? Translator IDL Parser JS Parser Интерфейсы Спеки Пакеты расширений Stratageme15
  • 27. Почему название? «Тридцать шесть стратагем(кит.三十六計)—древнекитайский военный трактат. В более широком смысле, собрание неявных стратегических приёмов и система непрямых тактических ходов, используемая для достижения скрытой цели, получения преимущества и перехвата инициативы.» -Wikipedia «15. Сманить тигра с горы на равнину (調虎離山) Дождись срока, когда противник устанет. Используй кого-нибудь для того, чтобы заманить его в ловушку. Никогда не атаковать противника, преимущество которого в его позиции. Вместо этого выманить его с выигрышной позиции, тем самым отделяя от источника силы.» -Там же
  • 28. Почему название? (режим повышенной четкости) Ну типа Javascript–это тигр, а мы его сманиваем на равнину – C#, где у нас больше преимуществ.
  • 29. Deep dive ТЕХНИЧЕСКИЕ ВОПРОСЫ И ПРОБЛЕМЫ
  • 30. Принцип работы парсера Coco/R –разработка ребят из университета г. Линц, что в Австрии ◦Кто не знает –это генератор компиляторов. Такая штука, которая принимает на вход описание грамматики в EBNF (по факту –еще и с семантическими действиями)а на выходе выдает исходный код токенайзераи синтаксического анализатора ◦Почему не ANTLR? «Так надо» (с) Грамматика, составленнаявручную по ECMA-262и собственным ощущениям. Разумеется, сварганен DOMдля кода –то есть набор классов со всеми синтаксическими нодами Для IDL –в процессе. Благо там она более-менее строго описана Приобщиться можно тут: https://github.com/pavel-b-novikov/Stratageme15/blob/master/CocoR/JavaScript.atg 544 строки кода
  • 31. Принцип работы парсера Сложные и интересные моменты: ◦Javascript-регулярные выражения ◦Вечно путались с делением. Проблема решена частичным переписыванием шаблона токенайзераот Coco/R–внедрен механизм возврата к началу выражения, если оно начало парситьсякак regex, но не должно бы ◦Отсутствие точки с запятой как универсального разделителя операторов ◦Внезапное осознание, что ЛЮБОЕ выражение JS является оператором ◦Абсолютно адские self-calling functions и тернарные операторы ◦И вообще не описанный в стандарте синтаксис в некоторых продуктах
  • 32. Результат ПарситсясжатыйjQueryи много разных других фреймворков На скриншоте –кусок тулзыдля семантического вычленения интерфейсов. «Мы работаем над этим»
  • 33. Принцип работы транслятора В целом -обычный обход в глубину синтаксического дерева. Исходник C# Парсер(Roslyn) Разобранный код –синтакс. дерево
  • 34. Принцип работы транслятора ClassDeclaration MethodDeclaration Identifier ParameterList Block VariableDeclaration … PropertyDeclaration ClassDeclaration IfStatement WhileStatement … context = new Context(); while(!stackEmpty) { node = stack.Pop(); reactor = Reactors.GetForNode(node); reactor.Process(node,context); } return context.ResultRoot; Репозиторийреакторов Тип текущего класса Указатель на результат Локальные переменные Текущий метод … Контекст трансляции
  • 35. Ключевые особенности На каждый узел синтаксического дерева можно настроить разную реакцию в зависимости от имени класса, его типа, локальных переменных… Короче в зависимости от того, в каком месте кода этот узел находится. То есть просто писать в выходной JavaScript разный код. Сделать это можно не переписываятранслятор, а просто подключив к нему еще одну DLL. В этом и заключается основная ключевая особенность. Разработчик извне может легко повлиять на процесс трансляции, сгенерировав хоть 3 страницы кода взамен одного оператора C#. Это дает возможность очень легко писать расширения к транслятору для разных фреймворков, да и просто синтаксического сахара.
  • 36. Ключевые особенности В комплекте с транслятором поставляется «базовый пакет» реакторов. Ну чтобы была возможность из коробки перевести хоть какой-то код – операторы, вызовы методов, объявления классов и т.п.
  • 43. Смертельный номер с тиграми Напишем вот такой код и поставим точку останова в трансляторе так, чтобы нам показали процесс трансляции вооотна этой строчке
  • 44. Смертельный номер с тиграми В контексте локальных переменных видим все переменные и их типы. То есть работает type inference. Самописный. Оп!
  • 45. Прогресс Translator IDL Parser JS Parser Интерфейсы Спеки Пакеты расширений Зеленым цветом я обозначил % завершенности частей проекта. Думаю, наглядно.
  • 46. Что надо делать дальше? В хронологическом порядке: ◦Разобраться с лямбда-выражениями и корректной трансляцией замыканий ◦Поддержка статических классов ◦Совершенствование системы расширений ◦Поддержка коллекций .NET и LINQ на них ◦Обертка в .exe, прикручивание параметров запуска/конфигурационных файлов ◦Доработка инструментария импорта библиотек ◦Импорт WebIDLдля браузерногоDOM ◦Импорт jQueryи ряда других библиотек (Highcharts, Raphael, AngularJS, KnockoutJS)
  • 47. Проблемы и родовые травмы В настоящее время испытываю некоторые проблемы с выводом типов аргументов лямбда- выражений и анонимных делегатов. Но это было сложно сделать даже спецам из JetBrains, по сему прошу снисхождения и терпения  Проблема отладки. Дело в том, что отлаживать транслируемый код разработчикам тоже где-то надо будет. Это, пожалуй, самая серьезная проблема. Скорее всего пойду по пути GWT, сделав отдельное приложение для отладки полученного кода. Возможен вариант с организацией сервера отладки или подключения и эмуляции Trident.Но пока что я об этом предпочитаю не думать. Неизвестно пока что делать с Generic-классами и какое им найти место в созданной системе абстракций. То есть их не технически сложно транслировать, а сложно придумать во что их транслировать.