metaclass: (Default)
[personal profile] metaclass
Вопрос на собеседование:
Вам дается 100 проектов, содержащих t4 шаблоны, написанные старообрядческими псоглавцами.
Ваша задача написать MSBuild скрипт, который перегенерирует весь код, созданный из этих шаблонов.

Смех тут в том, что студия перегенерирует код только если зайти в t4 шаблон и пересохранить его, чтобы время изменилось. А изменение файлов, включенных через include не вызывает перегенерацию.

Date: 2014-02-15 11:11 am (UTC)
From: [identity profile] bydlorus.livejournal.com
Из того, что я успел заметить в этом вашем чятике, решение очевидно - переписать всё на кложуре. Ну или на руби. Но обязательно переписать!

Date: 2014-02-15 11:47 am (UTC)
From: [identity profile] metaclass.livejournal.com
Если переписывание упростит жизнь на десять лет вперед - обязательно переписать.

Date: 2014-02-15 11:54 am (UTC)
From: [identity profile] bydlorus.livejournal.com
Конечно же упростит. Этот вопрос даже не обсуждается. Очевидно, что основная проблема любой разработки на 100 подпроектов - это выбранный язык.

Date: 2014-02-15 12:01 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Если нужны функции высшего порядка, лямбды и метапрограммирование, а выбрана жаба - то это действительно проблема.

Я не знаю, может у вас на лавке запасных сидит сотня мидлов с джуниорами и всем похер, будут они код писать один день или неделю. А у меня сокращение трудозатрат на фигню вида "как сымитировать на дотнете лисп" сильно упрощает жизнь.

Date: 2014-02-15 12:06 pm (UTC)
From: [identity profile] bydlorus.livejournal.com
> сымитировать на дотнете лисп

Да просто странные задачи в вашей предметной области. Обычно нужно что-то вроде "написать сайт". Из требований обычно сроки и затраты, "функции высшего порядка" в требованиях не встречал. Особенно после 10 лет разработки и при наличии 100 проектов.

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-02-15 12:16 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-15 12:29 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-02-15 12:41 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-15 12:44 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-02-15 12:52 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-15 01:11 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-02-15 01:24 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-15 03:30 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-02-15 04:23 pm (UTC) - Expand

(no subject)

From: [identity profile] fraks-nsk.livejournal.com - Date: 2014-02-15 04:35 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-02-15 04:50 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-15 04:59 pm (UTC) - Expand

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2014-02-15 06:47 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-15 07:09 pm (UTC) - Expand

(no subject)

From: [identity profile] berezovsky.livejournal.com - Date: 2014-02-15 07:13 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-15 07:18 pm (UTC) - Expand

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2014-02-16 08:14 am (UTC) - Expand

(no subject)

From: [identity profile] berezovsky.livejournal.com - Date: 2014-02-16 08:21 am (UTC) - Expand

(no subject)

From: [identity profile] osdm.livejournal.com - Date: 2014-02-17 09:51 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-02-17 10:27 am (UTC) - Expand

(no subject)

From: [identity profile] osdm.livejournal.com - Date: 2014-02-17 10:32 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-02-17 11:16 am (UTC) - Expand

Date: 2014-02-16 05:26 am (UTC)
From: [identity profile] mudasobwa.livejournal.com
А писать подпроекты на разных языках — запрещено директивой №125887432504?

Date: 2014-02-16 07:53 am (UTC)
From: [identity profile] bydlorus.livejournal.com
Все на разных или можно комбинировать? Сколько должно быть подязыков в подпроектах, чтобы хипстеры остались довольны, есть какие-то критерии? А то хипстеры не спрашивают ведь, какие и что... слышат С++ и сразу "переписать!" орут, ручки трясутся, жилка синяя на лбу бьётся, слюна в уголке рта...

(no subject)

From: [identity profile] mudasobwa.livejournal.com - Date: 2014-02-16 09:27 am (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-16 09:58 am (UTC) - Expand

Date: 2014-02-15 02:23 pm (UTC)
From: [identity profile] jakobz.livejournal.com
Если что, эти ваши джавы, на которых эти ваши 10 джуниоров с эффективностью в -0.01% от метакласса пилят опердени, придумали такие же точно метаклассы. Нет ничего плохого и невозможного в том, что умный чувак напилит себе уютный язык/фреймворк/тулзу/генератор кода, который позволит ему делать работу в 10 раз быстрее. И ничего плохого нет в том, что эта тулза будет сыроватая и пропиетарная, и юзабельна только автором. В конечном итоге все библиотеки выкристализовываются из такого вот опыта.

А позиция "я буду херачить дрова на яве, а эти дебилы пусть дальше изобретают бензопилу, пойду обосру их" - она глупо выглядит банально. Со скудоумием можно уметь жить достойно, и трудоустраивать скудоумных - тоже хорошая тема. Но возводить скудоумие в идеал - это уже смешно выглядит.

Date: 2014-02-15 03:23 pm (UTC)
From: [identity profile] bydlorus.livejournal.com
Речь идёт о том, что люди советуют переписать проект, которому 10-15 лет, в котором 10 миллионов строк кода, который активно продаётся, портируется на другие платформы, и над которым трудятся сотни уже обученных программистов, с С++ на их уютный лямбда-язык. Потому что С++ это же фуфуфу. Ну типа перепишем всё это на руби и сразу наступит щасте.

Date: 2014-02-15 03:35 pm (UTC)
From: [identity profile] jakobz.livejournal.com
Во-первых, нигде выше в камментах нету упоминания про этот проект.

Во-вторых 10 миллионов строк кода на C++, которые еще и продаются, определенно стоит если не переписать, то потихоньку переписывать. Вынимать high-level логику в более приспособленный язык. Этот путь уже прошли даже игры, где производительность и память в абсолюте. Если у вас какой-нибудь QT на плюсах для UI - вы просто слоупоки.

Date: 2014-02-15 03:38 pm (UTC)
From: [identity profile] bydlorus.livejournal.com
И на чём переписывают C++, чтобы производительность выросла, а потребление памяти упало?

(no subject)

From: [identity profile] jakobz.livejournal.com - Date: 2014-02-15 03:42 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-15 03:47 pm (UTC) - Expand

(no subject)

From: [identity profile] jakobz.livejournal.com - Date: 2014-02-15 03:49 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-15 03:57 pm (UTC) - Expand

(no subject)

From: [identity profile] blackyblack.livejournal.com - Date: 2014-02-16 08:22 am (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-16 08:50 am (UTC) - Expand

(no subject)

From: [identity profile] blackyblack.livejournal.com - Date: 2014-02-16 05:30 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-16 05:40 pm (UTC) - Expand

(no subject)

From: [identity profile] blackyblack.livejournal.com - Date: 2014-02-16 05:51 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-16 05:58 pm (UTC) - Expand

(no subject)

From: [identity profile] blackyblack.livejournal.com - Date: 2014-02-16 06:04 pm (UTC) - Expand

(no subject)

From: [identity profile] bydlorus.livejournal.com - Date: 2014-02-16 06:08 pm (UTC) - Expand

Date: 2014-02-15 03:56 pm (UTC)
From: [identity profile] anonim-legion.livejournal.com
САПР какой-то пишете?

Date: 2014-02-15 03:58 pm (UTC)

Date: 2014-02-15 04:21 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Переписывать в таком виде нахрен не надо, да.
Но может оказаться, что трудозатраты на поддержку и доработку некоторых подсистем можно сократить, втащив лямбды и прочую чернягу, тогда нужно будет сравнивать - то ли лучше долго, медленно, но без потрясений писать на С++, то ли втянуть одноразово что-нибудь более вменяемое, с учетом потенциальных затрат на поддержку в будущем.

Date: 2014-02-17 07:02 am (UTC)
From: [identity profile] bydl0coder.livejournal.com
Если вы такие умные, почему строем не ходите? Почему на хаскеле, скале и окамле ни одного продукта нет?

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-02-17 07:30 am (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2014-02-17 09:59 am (UTC) - Expand

Date: 2014-02-15 03:27 pm (UTC)
From: [identity profile] avnik.livejournal.com
Даже на lein скорее, а не просто на кложури.

Date: 2014-02-15 02:05 pm (UTC)
From: [identity profile] cottidianus.livejournal.com
> Смех тут в том, что студия перегенерирует код только если зайти в t4 шаблон и пересохранить его, чтобы время изменилось.
gmake умеет --always-make или .PHONY targets для вещей, которые надо пересобрать не смотря на таймштампы

Date: 2014-02-15 10:42 pm (UTC)
From: [identity profile] berezovsky.livejournal.com
PONY targets O_O

Date: 2014-02-15 03:18 pm (UTC)
From: [identity profile] anonim-legion.livejournal.com
А вы вроде с F# работали, у него есть мощнейшая система макросов. На ней кодогенерацию не делали?

Date: 2014-02-15 03:22 pm (UTC)
From: [identity profile] metaclass.livejournal.com
В F# вроде макросов нет же? TypeProvider-ы и то начиная с какой-то версии, которую я у себя на 2010 студию воткнуть не могу.

Date: 2014-02-15 03:38 pm (UTC)
From: [identity profile] jakobz.livejournal.com
Да в дотнете не сильно проблема генерировать MSIL налету - все имеется. Там написать компилятор какого-нибудь своего паскаля - задача для продвинутого студента. Нахер T4 - не ясно вообще.

Date: 2014-02-16 08:46 am (UTC)
From: [identity profile] nikon-nlg.livejournal.com
Говорят, powershell (ls your-file-name-here).LastWriteTime = Get-Date помогает
Хотя find..touch конечно было бы проще

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 1st, 2025 08:27 am
Powered by Dreamwidth Studios