Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kouzdra ([info]kouzdra)
@ 2012-11-08 08:36:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Скала катится в сраное говно:
[info]vit-r@lj навел на дивное: Скалу решили улучшить макросами. Я макросы люблю, но это умиляет и поражает:

Но это ладно. Что меня действительно удивляет это отношение к макросам как к игрушке для психов. Мне прямо стыдно это упоминать в надцатый раз, но макросы в Скале и макросы в плюсах это совершенно разные вещи. На эту тему предлагаю пролистать наш туториал: http://scalamacros.org/documentation/gettingstarted.html.

Разумеется разные. С-шные - штука полезная, а это - сраное неюзабельное говно [неоригинальное к тому же - PPS], которым будут пользоваться только маньяки. Причем явление это я наблюдаю в -надцатый раз. Оно случается как правило, когда людьми обалдевают Большие Мысли™.

FP, к сожалению, в качестве побочного эффекта провоцирует увлечение Большими Мыслями.

PS: Макросы - вещь нужная, потому в первую очередь, что в программе даже на самом-самом-самом языке всегда найдется какая-нибудь регулярность, параметризуемая часто еще, которая средствами языка не выражается. И тут без макросов никак (ну кроме как руками писать одно и тоже 20 раз).

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

Но редизайн редизайном, а работать-то надо.

PPS: Если кто думает, что то, что то, что эти скальщики выдумали - это "прогресс по сравнению с С": это PL/I #$%ть, 1967 год*, промышленный язык, С тогда только в проекте был (и оказалось есс-но никому не
нужно):

%DECLARE (A,B,C) CHARACTER;
%ACTIVATE CAT;
%A = 'AAA';
%B = 'BBB';
%C = 'CCC';
RES_STRING_3 = CAT(A,B,C);
RES_STRING_2 = CAT (A,B);
RES_STRING_1 = CAT(A);
%CAT: PROCEDURE(X,Y,Z) RETURNS(CHAR);
DECLARE (X,Y,Z) CHAR;
DECLARE S CHAR;
IF PARMSET(Z) THEN S = ''''||X||Y||Z||'''';
ELSE IF PARMSET(Y) THEN S = ''''||X||Y||'''';
ELSE S = ''''||X||'''';
RETURN(S); 
%END CAT;


*) Я дал ссылку на микрофокусоский мануал, уверяю вас - у птичек IBM в 1967 было тоже самое, скальные опыты "с деревом" тоже тыщу раз делали - последний раз я это видел в HaXe, но страдать этим начали с времен Lisp - с результатом, отличающимся завидным постоянством.


(Добавить комментарий)


[info]gregory_777
2012-11-08 08:40 (ссылка)
Ты не закрыл PRE

(Ответить)


[info]i.dluciv.name
2012-11-08 10:52 (ссылка)
Да Скала как-то ничем, кроме типа Any и ко- и контравариантных типовых параметров, не вставляла.

Ну да, что-то более кондовое, чем Java, сейчас тяжело вообразить. Лет 10-12 назад она купила себе популярность в общем-то хорошим фреймворком, в котором столько всего было, что больше ничем пользоваться не хотелось. А язык-то сам никакой... Ну зачем ему быть мощным, если сам-то язык делался для программирования микроволновок?..

Scala в плане кондовости языка по сравнению с Java является большим рывком вперёд. Но против тех же языков семейства ML она почти так же кондова, как и Java.

(Ответить)


[info]ifp5
2012-11-08 13:15 (ссылка)
По-моему, как раз C-шные это сраное неюзабельное говно. Они фактически решают две задачи:
1) условная компиляция на разных платформах (сишная и ассемблерная проблема - больше такой необходимости нет нигде). Ну худо-бедно справляется, да, хотя чаще всего такая необходимость возникает от плохо декомпозированного кода.
2) сокращение boilerplate (не знаю, как это по-русски). Тут нужен только честный multi-stage и чем честнее тем лучше. Категорически несогласен, что опыт был неудачен - даже кривущие шаблоны в C++ тому примером.

(Ответить) (Ветвь дискуссии)


[info]qwerty
2012-11-08 14:28 (ссылка)
Нежно люблю препроцессор в стиле Ц и всюду его пользую как средство легковесного расширения языка с ясно определенной текстовой семантикой. Например, в той же долбаной Жабе. Хочется одни и те же исходники компилировать с разными опциями, в зависимости от них добавляя поля, методы, меняя типы и т.д.

Разделение препроцессорной и языковой семантик - это модульно и потому хорошо.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ifp5
2012-11-09 12:44 (ссылка)
Эта "модульность" хороша только для писателей компиляторов, разделил и думать не надо.

Для программиста это горе и ужас, ибо представляет собой не модульность (разделение на интерфейс и реализацию), а антимодульность - когда все время следить за происходящим внутри макроса, ибо при малейших изменениях в коде легко меняется семантика поведения того что внутри. Не говоря уже о том, что даже как средство генерации текста cpp крайне убог - нет ни циклов ни ветвлений, например.

А можно, кстати, поподробнее про практику использования cpp в java? Как, например, такой код проходит code review, интегрируется в систему сборки и пр.?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2012-11-09 13:12 (ссылка)
Ну конечно же, чем лучше писателям компиляторов, тем хуже всем остальным. Дисклэймер: я именно писатель компиляторов и исправлению это не подлежит.

Для программиста это горе и ужас
Прикладным программистам не следует пользоваться методами системных. См. бородатый анекдот про билеты и сортир.

Не говоря уже о том, что даже как средство генерации текста cpp крайне убог - нет ни циклов ни ветвлений, например
Да-да, я тоже предпочитаю препроцессор с разнообразными циклами, ветвлениями, многострочными макросами, перегрузеой макросов по числу параметров и встроенными функциями. Что не мешает ему быть препроцессором в стиле Ц.

Как, например, такой код проходит code review, интегрируется в систему сборки и пр.?
А в чем, собственно, проблема? Товарищи смотрят на код глазами и обычным слегка формализованным образом выказывают восхищение или его отсутствие. В процессе билда есть опция либо прокачать результат препроцессора компилятору через трубу, либо сохранить в файле.

Куда более неприятно то, что в Жабе ни в тексте, ни в бинарниках не предусмотрена нетривиальная привязка к исходникам. Поэтому приходится, тихо матерясь, максимально сохранять нумерацию строк в ущерб читаемости. Новый Кобол должен быть уничтожен.

(Ответить) (Уровень выше)