xeno_by (xeno_by) wrote,
xeno_by
xeno_by

Category:

Краткий саммари движухи за последние два месяца

Всем привет после долгого отсутствия - с февраля валит нескончаемый загруз, поэтому получается постить что-то интересное раз в сто лет, а постить неинтересное какой смысл. За пару месяцев накопилось некоторое количество веселья идей, которые было бы интересно обсудить: 1) насчет веб-девелопмента, 2) насчет Конфлакса, 3) по поводу смены языка программирования для души, 4) по поводу смены энвайронмента на более продуктивный. Теперь немного поподробнее.

---

По поводу первого. В одном из предыдущих постов я писал про внутренний проект, который делал на работе - несложный сайтик из десяти скринов (не включая круд формочки), каждый из которых либо грид с фильтром, либо представляет собой набор из нескольких виджетов. Было интересно затестить концепцию тупого сервера (который всего-то умеет отдавать статический html и "голые" реляционные данные, плюс, конечно, секьюрити, логгирование и т.д., но сейчас это не суть важно) и умного клиента на жабаскрипте. В итоге написал почти весь middle-end руками, по факту, практически переписав asp.net (получилась недопиленная хрень с не самым клевым перфомансом, но в качестве прототипа она мне нравится). Для бакэнда и транспорта данных юзалась связка ADO.NET Data Services + Entity Framework. В целом неплохо, но собрал неслабую пачку граблей.

Выводы обнадеживающие: 1) писать свою инфраструктуру можно и нужно, только надо быть менее самоуверенным, 2) жить без 3rd-party библиотек можно с большим трудом, но это неслабо окупается, 3) в целом, веб-девелопмент оказался проще и интереснее, чем я ожидал по знакомству с ASP.NET (обычным и MVC). В процессе работы я вел лог важных решений и побежденных косяков, поэтому есть желание слабать hands-on описание , но для этого надо отделить зерна от плевел. Кароче, // TODO. to be implemented.

---

Насчет Конфлакса. В этом аспекте занимался тем, что в свободное от вышеописанной активности время лабал декомпилятор шарпа. Кроме, собственно, необходимости для проекта, эта таска мне в свое время представлялась очень романтичной в плане того, что она станет первым шагом для прикручивания какого-никакого метапрограммирования к шарпу. Мечты-мечты. Не учел я одной вещи - декомпилятор это, по сути, рассмотрение чуть более, чем дохера частных случаев. Или, другими словами, кропотливая и нудная работа. Впрочем, может быть, это я что-то делаю не так и, причастившись к работам отцов индустрии, узнаю общий алгоритм для декомпиляции чего угодно. В целом, был сделан вывод о том, что надо юзать нормальные компиляторы, которые отдают AST на этапе компиляции (аля C# expression trees, но только с полной поддержкой семантики языка). В самой ближайшей видимости (ибо дотнет) находятся Boo и Nemerle - интересно будет посмотреть, как там все это сделано.

Моменты, которые бы хотелось здесь обсудить. 1) Дизайн структур данных AST и типичных сценариев работы с ними. Пока что я остановился на мутабельных нодах, которые в своей жизни могут иметь только одного парента (если у нода уже есть парент и он добавляется в чайлды другому ноду, то перед добавлением он клонируется) + клонирующих визиторах. Это наиболее удобное и робастное решение из придуманных ad-hoc, но оно порождает дофига ненужного клонирования. Интересно, как делают такие вещи по науке. 2) Навигацию и декомпозицию. Нашел интересную работу по реализации xpath над s-выражениями, но пока не добрался почитать полностью. Также интересно придумать удобный способ записи следующего запроса, необходимого для peephole-оптимизации mul+add => mad: "найти нод вида foo += bar или foo = foo + bar, где bar суть qux * baz или символ, которому присвоено значение вида qux * baz". Впрочем, может, такого способа и не существует и задача решается тупо в лоб.

---

Продвижение по описанным направлениям выдало мне окончательное понимание двух, наверное, очевидных для многих моих читателей вещей: 1) вполне можно, хоть и тяжело это, писать инфраструктурные библиотеки самому, 2) сишарп - хороший мейнстримный язык, но в последнее время все чаще натыкаюсь на то, что, хоть адвансед фичи в нем есть, но они в нем ниразу не родные (тут писал об этом чуть более подробно), также часто хочется возможности чуть-чуть подпилить язык для себя, но низя. В итоге, в обоих случаях приходится закручивать гвозди отверткой (тут об этом хорошо написал wizzard0).

Отсюда получаются два вывода: 1) в принципе, очень много вещей, к которым я привык в сишарпе можно либо написать самому, либо обойтись без них вообще, 2) поэтому, стоит посмотреть в сторону других энвайронментов и языков. Чтобы эти выводы стали чем-то большим, чем просто декларации, я решил набросать список фич, которые мне нужны от языка/ide/энвайронмента на текущем этапе, и посмотреть альтернативы. О первом и будут следующие пару постов (первый, второй, третий), второе еще in progress и по нему мне бы были очень полезны ваши советы (спасибо zamotivator за консультацию на тему разработки без IDE и крутоты линухи).
Tags: potpourri
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 1 comment