«Не умножай сущности сверх необходимого»
Немного волнуюсь. Когда я стал программировать на C# и немножко java, то думал, что вот она вершина программирования.
В отдел выписывали RSDN пока выделяли деньги, потом денег не стало, а журнал перестал печататься.
Помню как пролистывал статьи по Nemerle, а полгода назад вернулся к ним и удивился, что не замечал этого чуда 10 лет назад,
а ведь спокойно можно было писать и под винду и веб на немерле того времени.
Но произошло это осознание только после начала увлечения ФП. Во многом благодаря F#.
Учите F#, но будьте внимательны. Язык этот противоречив, его синтаксис прекрасен, а вот эко-система подкачала.
Так вот, написал тут для повседневных дел небольшую программу на немерле, которая грабит с веб-страницы данные и выводит таблицу за день
и строит диаграмму за месяц.
Все бы ничего, но немерл в какой-то момент был удален из студии, а строчек стало много и итоговая не помещалась на экран.
А в качестве источника данных для гридвью использовался немерловский list[T].
Естественно, никакой сортировки. Чтобы поправить требовалась установка немерла на студию. Заниматься этим не хотелось.
И я решил продолжить изучение F#. Казалось, что с провайдерами типов(киллер-фича фшарпа) я быстро сграблю нужные данные.
И тут ТАДАМ! HtmlProvider вместо предоставления списка таблиц, выдает именованные св-ва используя при этом тэги H1-H5 над таблицой,
это была первая засада, т.к. заголовок меняется регулярно(в зависимости от параметров запроса). Заменами тегов HX на span проблема решилась.
Но осадок остался. Дальше начался треш, оказалось что текст в ячейках закодирован в html, но провайдер русские коды не знает и преобразовывает в текст неправильно. Настроек этого дела я не нашел. Спустя час, скрепя сердце, я открыл исходники немерла и стал тупо копипастить — регексом вырезал TBODY
и распрасил XmlProvider-ом как и ожидалось этот провайдер кодировку (#303;#343
осилил. А дальше был использован Xplot google chart для построения графиков,
но здесь меня ждало еще большее разочарование, ведь это была банальная обертка над html+javascript — во временный каталог кидается файл в который напиханы данные по которым гугловый скрипт строит графики. Функция Chart.show делает самое сложное — открывает html в браузере! УХ!
Но и это ничего, а главное, для трушности были описаны типы в которые складывались данные. Строгая надо сказать типизация!
Но гуглу она не нужна! Для графиков нужны словари в итого вся красота сторогой типизации превратилась в мап t.Key, t.Value |> :value |> Chart.....
Да, подумал я, в итоге уже сонный, в потьмах качнул немерл 4.5 зиповый и настроил компиляцию и командной строки.
Так думаю, добавлю радиокнопок для задания сотрировки. открыл в n++ и смотрю на код формы. ААА! Плюнул, перегнал в DataTable,
задал в конструкторе сортировку по умолчанию для грида и готово.
После этого я сделал грустный вывод в строго-типизированных языках огромная часть работы заключается длинных цепочках конвертации данных из одной формы в другую.
Другой подход используется в динамически-типизируемых языках javascript, clojure, common lisp
Данные определяются по месту, и здесь важнейшее значение имеют не типы, а имена.
Пример:
var p1 = new Person(1,2,3,"Alice");
var p2 = new Person(Name: "Bob", Age: 10, Hands : 2, Foots : 1);
var p3 = new Person { Name = "Cooper", Age= 11, Hands : 3, Foots = 5}:
Аналогично в кложе:
(def p {:name "Alice" :age 10})
В лиспе конечно смотрится похуже, но зато лисп не привязана к JVM в отличии от кложи.
(defparameter *my-hash* #H(:name "Eitaro Fukamachi"))
(getf *my-hash* :name)
Ну и развивая на днях веб-интерфейс пришлось покодить на js+html, это был как глоток свежего воздуха.
Динамика рулит.
ПС Как думаете все таки CL или Clojure?
Здравствуйте, varenikAA, Вы писали:
AA>После этого я сделал грустный вывод в строго-типизированных языках огромная часть работы заключается длинных цепочках конвертации данных из одной формы в другую.
В ассемблере не надо конвертировать
А строго он или не очень типизированный в некотором роде зависит от точки зрения.
Здравствуйте, Michael7, Вы писали:
M>Здравствуйте, varenikAA, Вы писали:
AA>>После этого я сделал грустный вывод в строго-типизированных языках огромная часть работы заключается длинных цепочках конвертации данных из одной формы в другую.
M>В ассемблере не надо конвертировать
M>А строго он или не очень типизированный в некотором роде зависит от точки зрения.
У него фатальный недостаток, на лиспе я могу GTK-3 форму с парой кнопок за 5 минут наклепать(соизмеримо с WinForms + кроссплатформа),
а на асме сомневаюсь что в 5 минут кто-то уложится.
еще 10 минут ушло на установку SBCL,SLIME, QUICKLISP
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, varenikAA, Вы писали:
AA>>У него фатальный недостаток, на лиспе я могу GTK-3 форму с парой кнопок за 5 минут наклепать(соизмеримо с WinForms + кроссплатформа),
AA>>а на асме сомневаюсь что в 5 минут кто-то уложится.
I>А на тайпскрипте за это же время можно сделать и форму, и бакенд для неё, за 10 — задеплоить докерный образ в амазон.
Сегодня как раз прочел новость про тайпскрипт:
Здравствуйте, varenikAA, Вы писали:
AA>>>После этого я сделал грустный вывод в строго-типизированных языках огромная часть работы заключается длинных цепочках конвертации данных из одной формы в другую.
M>>В ассемблере не надо конвертировать
M>>А строго он или не очень типизированный в некотором роде зависит от точки зрения.
AA>У него фатальный недостаток, на лиспе я могу GTK-3 форму с парой кнопок за 5 минут наклепать(соизмеримо с WinForms + кроссплатформа),
AA>а на асме сомневаюсь что в 5 минут кто-то уложится.
AA>Image: Annotation 2020-05-16 112636.png
На асме короче получается:
.386
.model flat, stdcall
ExitProcess PROTO ,:DWORD
MessageBoxA PROTO ,:DWORD, :DWORD, :DWORD, :DWORD
.data
MsgBoxCaption db "Пример окна сообщения",0
MsgBoxText db "Программировать на Ассемблере под Win32 очень просто!",0
.const
NULL equ 0
MB_OK equ 0
.code
Main:
INVOKE MessageBoxA, NULL, ADDR MsgBoxText, ADDR MsgBoxCaption, MB_OK
INVOKE ExitProcess, NULL
end Main