LINUX.ORG.RU
ФорумTalks

ML языки - отстой


0

0

более идиотских языков програмирования встретить сложно
людей которые их создали надо было задушить в колыбели

anonymous
Ответ на: комментарий от anonymous

обосновать могу
- это языки которые сделаны просто глупо
и крайне непрактично в использовании
возможно они и мета языки только
на земле люди хлеб растят а не занимаются вычислением количества ангелов на острие иглы ...
_______
HOL/HOLlight ?
а зачем ?
напиши мне бинарный ввод вывод на любом ML
а это задача встречающаяся на порядок чаще


anonymous
()
Ответ на: комментарий от anonymous

1) Задачи бывают разные. Каждой задаче - свой язык. Логика - дело крайне нужное, тот же HOL использовался в разработке ядра StrongARM - для верификации железа.

2) Бинарный ввод/вывод - делается тривиально, и гораздо проще, чем на императивных языках. Читать Олега Киселёва (у него, правда, на Схеме примеры).

3) про "непрактично" - ложь полная

4) про "глупо" - не тебе судить, сначала своим умом обзаведись.

anonymous
()
Ответ на: комментарий от anonymous

>> 1) Задачи бывают разные. Каждой задаче - свой язык
вот именно - но ML языки слишком для спецефических задач
>> 2) Бинарный ввод/вывод - делается тривиально, и гораздо проще, чем на императивных языках.
мил человек - ты его сделай а потом говори что тривиально
в добавок код покажи - а мы подивимся на полученное уродство
>> 3) про "непрактично" - ложь полная
полная правда - ни один ML язык не расчитан на применение в повседневной практике. только на решение своих спецефических задач.
мораль - придурков которые их пихают как языки общего назначения - топить
>> 4) про "глупо" - не тебе судить, сначала своим умом обзаведись.
..... мой ум, моя правда

_____
этот топик флэймообразующий и задуман так специально
по причине того что
МЕНЯ ДОСТАЛИ УРОДЫ КОТОРЫЕ КРИЧАТ ЧТО ML лучше всех
ML - ДЕРЬМО в качестве языка общего назначения

anonymous
()
Ответ на: комментарий от anonymous

1) Никто никогда не говорил, что ML лучше всех.

2) ML - как раз очень даже неплохой язык общего назначения (с учётом того, что вообще хороших языков общего назначения не бывает и быть не может - все - дерьмо). Если не согласен - ОБОСНУЙ. Покажи, какой язык "общего назначения" - лучше. На конкретных примерах. И о какой реализации ML идёт речь.

3) Удавись насмерть, мразь.

anonymous
()
Ответ на: комментарий от anonymous

>>1) Никто никогда не говорил, что ML лучше всех.

возможно и нет. но один очень известный в негкоторых кругах человек
утверждал что с++ по сравнени с ним - отстой

>>2) ML - как раз очень даже неплохой язык общего назначения (с учётом того, что вообще хороших языков общего назначения не бывает и быть не может - все - дерьмо).

что все дерьмо согласен
но некоторые просто пытаются быть "используемыми" а другие
только кичатся своей правильностью

пример - напиши перекодировку big endian <-> little endian на ML
напиши макроподстановку типа #define X 1 на ML

реализация ML - caml

>> 3) Удавись насмерть, мразь.
не буду так как не хочу

anonymous
()
Ответ на: комментарий от anonymous

1) C++ - таки реально отстой в сравнении с ML. По всем абсолютно параметрам.

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

anonymous
()
Ответ на: комментарий от anonymous

1) C++ - таки реально отстой в сравнении с ML. По всем абсолютно параметрам.

возможно - но перекодировку и чтение бинарных данных в нем
сделать очень и очень просто
в ML - ....
а я уже говорил - такого рода задачи встречаются на порядок чаще ...
чем "преобразования и макры "

2) Про преобразования и макры - читать Харрисона

ok
только почему в с++
для этого мне не надо читать Харрисона ?
у меня простая задача - нужна макроподстановка
МНЕ НЕ НУЖЕН ПАРСЕР !!!!! черт возьми
(и регулярные выражения тоже, мать моя)
зачем для
#define X 1
нужно изучать построение формальных граматик ?

anonymous
()
Ответ на: комментарий от anonymous

В ML - это сделать проще, чем в C++. Для C++, однако, тебе надо читать Шалдта, Страуса, Ёккеля, и прочих лохов. Уж лучше читать Харрисона.

И ещё - как ты препроцессор, который умеет #define X 1 понимать, напишешь хотя бы и на C++, не зная, что такое регулярные выражения?!?

anonymous
()
Ответ на: комментарий от anonymous

домой пойду
интересно что на все это скажут
защитники "функционала"
еще раз
этот топик флэймообразующий
и создан для того чтобы попробовать найти:
- чем и как ML языки могут быть лучше с++ в решении
простых задач программирования
- сомнения у меня жутко сильные. вот и высказываю их сдесь
- может найдется человек который меня переубедит
PS
знаю что никто не обязан меня переубеждать
но так вышло что я столкнулся с горой Ocaml кода
и просто ВЫНУЖДЕН с ним работать
- ничего хорошего пока не увидел .... - одни только маты

anonymous
()
Ответ на: комментарий от anonymous

>> В ML - это сделать проще, чем в C++. Для C++, однако, тебе надо читать Шалдта, Страуса, Ёккеля, и прочих лохов. Уж лучше читать Харрисона.

не знаю - читал, ничего страшного - жив
а если проще то как ?
не забудь что int 31 битный .... :(

>> И ещё - как ты препроцессор, который умеет #define X 1 понимать, напишешь хотя бы и на C++, не зная, что такое регулярные выражения?!?

просто напишу - в системе есть cpp ...
(тоько он с ocaml и тп работать не будет - знаешь почему ?
- идиоты не подумали что такой препроцессор легко можно было бы использовать для повседневных задач и реализовали синтаксис параметрического полиморфизма через задницу)
это раз
два - если бляха муха для такой простой вещи мне надо использовать
регулярные выражения - то ..... (напомню что написание препроцессора - одна из "слабых" задач из К&R )

anonymous
()
Ответ на: комментарий от anonymous

В решении любых, и простых, и сложных задач ML будет лучше, чем C++ - потому как это решение будет короче и читабельнее. Код, который тебе попал, вполне может быть и плохим, а может - просто у тебя неправильно мозги заточены, так, что тот же STL ты худо-бедно понимаешь, а на фига нужен List.fold_left - не догоняешь. Ну так когда догонишь - на убогий и кривенький STL тебе смотреть не захочется. И на boost - тоже...

anonymous
()
Ответ на: комментарий от anonymous

Используй boxed int, и всё те же битовые операции.

Про CPP - ты бы задачи проще формулировал. Я думал, ты хочешь сам аналог CPP написать. А так - юзай CamlP4, он на порядки мощнее, чем CPP.

anonymous
()
Ответ на: комментарий от anonymous

let rec iter f = function
[] -> ()
| a::l -> f a; iter f l

let rec fold_left f accu l =
match l with
[] -> accu
| a::l -> fold_left f (f accu a) l

let rec fold_right f l accu =
match l with
[] -> accu
| a::l -> f a (fold_right f l accu)

let rec map2 f l1 l2 =
match (l1, l2) with
([], []) -> []
| (a1::l1, a2::l2) -> let r = f a1 a2 in r :: map2 f l1 l2
| (_, _) -> invalid_arg "List.map2"

let rev_map2 f l1 l2 =
let rec rmap2_f accu l1 l2 =
match (l1, l2) with
| ([], []) -> accu
| (a1::l1, a2::l2) -> rmap2_f (f a1 a2 :: accu) l1 l2
| (_, _) -> invalid_arg "List.rev_map2"
in
rmap2_f [] l1 l2
;;


читабельнее ???? %(
ну может быть но о literate програмировании
кто нибудь в стане функциональщиков слышал
?
или великим людям не до этого ?

anonymous
()
Ответ на: комментарий от anonymous

boost я кстати не люблю
и примером его приводить не буду
____
я согласен что функциональное программирование позволяет
компактно записывать функторы
НО !
представь - необходимость в кунструкциях второго порядка
возникает на порядок реже (прости те за каламбур)
чем простые задачи ...
в которых ML слабы или глупо переусложнены

_______
я бы с радостью воспользовался ocamlp4
но для этого надо ломать билд всей системы
идиотский принцип
что препроцессор это модификатор граматики языка .....
Я НЕ ХОЧУ ЕЕ МОДИФИЦИРОВАТЬ
И НЕ ХОЧУ ПИСАТЬ СОБСТВЕННЫЙ ПРЕПРОЦЕССОР
я хочу просто заменить 64 слова на 64 соотвествующих подстановки
существует cpp (c pre processor ) который стандарт де факто
КАКОГО ЛЯДА ФУНКЦИОНАЛЬЩИКИ ПРОИГНОРИРОВАЛИ ПРОСТОЕ РЕШЕНИЕ ?
что бы заставить писать меня много и сложно ?
в этом суть функционального програмирования и програмирования вообще ?
- суть в том что cpp не может работать с ocaml файлом так как
выражением для полиморфного определения было выбрано 'a
а то что это пересекается с определением строки
никого не волновало
гениям позволено не думать о реальности, идиоты бля
___
в окамле нет боксинга -
объектная система откровенно тормознутая
и сделана из принцыпа - "как угодно дерьмово но не реализация не как в С"
- просто протестируйте ее - и увидете насколько она плоха
поэто я не могу сделать свою обертку - дурная задача
Int32 - приводит к откровенно грязному коду
____
кстати функциональщики когда либо слышали о "Конкретных типах"
или гениальным людям можно заниматься исключительно любованием
своей гениальности (генитальности ...) в зеркале
и срать на простые решения для простых задач

anonymous
()
Ответ на: комментарий от anonymous

Дорогой мой, если не умеете, просто помолчите, зачем кичиться собственной безграмотностью?

anonymous
()
Ответ на: комментарий от anonymous

Вы о боксинге ?
ну зачем так голословно ?
просто продемострируйте его пример ....
желательно без конструкций типа Int32.add x1 x2 в последствии
и со скоростью операции сложения не медленне чем в два раза
по сравненинию хотя бы просто с вызовом функции сложения
____
а если о препроцессоре - тогда
пожалуста продемонстрируйте решение в одну строку
#define X 1

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

anonymous
()
Ответ на: комментарий от anonymous

Слабый закос под Луговского. Не пыжься.

anonymous
()
Ответ на: комментарий от anonymous

> ни один ML язык не расчитан на применение в повседневной практике. только на решение своих спецефических задач. Есть пиринговая программа mldonkey для Линукса (есть и виндовый порт, впрочем). Написана на ocaml. Чем тебе не практическое применение?

anonymous_incognito ★★★★★
()
Ответ на: комментарий от anonymous

да
и извините кто-нибудь может привести объяснение тому факту
что для того что-бы подключить модуль нужно записать
open Module - Module обязательно с большой буквы
а вот файл должен называться module, обязательно с маленькой буквы

не могу понять высшего сысла - никак
как ни пытался грамматику составить - везде без разницы ...

и кажись это "фича" только окамля (может всех мл'эй ?)
и
зачем делает динамическую посылку сообщения к методу класса
даже если тот не виртуальный и отсутствуют способы делать
этот вызов посредством хотя-бы рефлексии? -
это типа - "зато-крута! - нам удалось
доказать что ООП хуже функционального программирования"
?

anonymous
()
Ответ на: комментарий от anonymous_incognito

если то мне- я не собираюсь косить под луговского
я все жду что он придет и объяснит мне в чем я не прав
____
mldonkey - хорошо согласен
но у меня такая думка -
написан или для того что-бы доказать что на ocaml
можно писать
или кем-то кто был увлечен окамлем
- в обоих случаях это сродни фанатизму
а фанатики и не такое могут вытворить

мало применений языка который , как утверждается
в 4 раза поднимает производительность труда програмиста
- это ж золотое дно для буржуев
они ж за каждый оплачиваемый час работы трясуться

anonymous
()
Ответ на: комментарий от anonymous

Про странную систему модулей спрашивать с Ксавье Лероя. Он так и не объяснил внятно, зачем это надо. Имя модуля с большой буквы - хинт компилятору, что объект - модуль. Типа, упростили так, незнамо зачем. В SML таких выгребонов нет.

anonymous
()
Ответ на: комментарий от anonymous

Применений не мало - как раз во всяких закрытых штучных проектах, где время разработки особенно важно. Понятно, что информация о таких проектах наружу редко выходит...

anonymous
()
Ответ на: комментарий от anonymous

>читабельнее ???? %( ну может быть но о literate програмировании кто нибудь в стане функциональщиков слышал

Ну ты, блин, даешь. Я про *ML за всю жизнь прочел страницы 3 на всех - и как полностью некомпетентный в них человек заявляю:

Это не нужно документировать. Ибо оно тривиально. Следовательно читаемость хороша. (Хотя они (MLи) мне тоже не нравятся)

DonkeyHot ★★★★★
()
Ответ на: комментарий от anonymous

ладно ребята
звиняйте за наезды
---
сколько бы я тут не жалился - работать надо
- попробуем что нибудь с этим недозрелым лимоном что-нить сделать
__
я в конце концов хотел бы уточнить свою точку зрения
-- с++ это язык который развивался исходя из необходимости того
или иного использования
он такой потому-что он нужен таким и никаким другим
он вынужден быть корявым что бы дать мне все то что мне _реально_ может понадобится
он позволяет делать простые вещи - просто
__
ML же равивался не исходя из практики, а исходя из научных интересов
потому база использования для него маленькая
потому и он крив в реальном использовании
(кстати разказ о закрытых-тайных проектах очень похож на байку о неуловимом Джо ....)

PS
в конце концов наверное придется перелопатить его грамматику
и модули и сделать что то приличное а не ту дурь которая есть сейчас
- не визжать ! - это мое личное IMHO
__
что бы называться языком общего назначения надо быть как минимум простым для простого
PPS
и уберите же из него сборщик мусора наконец - достали :)))

anonymous
()
Ответ на: комментарий от anonymous_incognito

> Есть пиринговая программа mldonkey для Линукса (есть и виндовый порт, впрочем).

Слухи о виндовом порте явно преждевременны, и тут не вина mldonkey или ocaml, вина скорей виндов.

anonymous
()
Ответ на: комментарий от DonkeyHot

:))
это так - обдумав
- выражения в программе не должны быть короткими
они должны быть в меру длинными
и способность кратко записать сложное выражение -
не та способность которой язык программирования может гордиться
APL тому пример (его смерть - точнее)
__
а сократительные абревиатуры в интерфейсе стандартной библиотеки
- хамство
и не уважение к возможным
(ну к функциональным языкам это наверное не относится)
милионам пользователей
- вы же в приличном обществе по фене не болтаете ?

anonymous
()
Ответ на: комментарий от anonymous_incognito

> Как это? Что же, по-твоему, я использовал в виндах?

Либо только клиентскую часть, либо глючную и покоцанную серверную, которая не идёт ни в какое сравнение с ослом запущенным под операционной системой.

anonymous
()
Ответ на: комментарий от anonymous

> а сократительные абревиатуры в интерфейсе стандартной библиотеки

А где ты их увидел в _интерфейсе_? Приведенный код был реализацией. Причем дедсадовского уровня сложности, документировать _это_ - все равно что требовать развернутого комментария к i++;

> вы же в приличном обществе по фене не болтаете

А вы i,j,k для счетчиков цыклов не используете никогда?

anonymous
()
Ответ на: комментарий от anonymous

>Применений не мало - как раз во всяких закрытых штучных проектах, где время разработки особенно важно. Понятно, что информация о таких проектах наружу редко выходит...

Не надо ляля, секретные ученые пишут на фортране http://www.compitech.ru/html.cgi/arhiv/03_05/stat_12.htm ...рассказывает член Ядерного общества России, один из создателей Комплекса графических программ на Фортране (ГРАФОР)...

anonymous
()
Ответ на: комментарий от anonymous

>выражения в программе не должны быть короткими они должны быть в меру длинными

Определение "в меру": выражения должны быть как можно короче, при условиях 1.достаточной различимости символов в их области видимости и 2.соответствия описания алгоритма "предмету".

Во многих языках глобальные символы настолько популярны, что приходится придумывать длинные имена. Многие языки не поддерживают достаточно высокого уровня абстракии, потому приходится писать длинные выражения.

В приведеном примере нет ни того, ни другого. Поэтому они могут (и должны) писать именно так (коротко). Я бы еще посокращал(-: rev_, _left и _right излишне длинны:-)

DonkeyHot ★★★★★
()
Ответ на: комментарий от anonymous

ok -
берем

let rev_map2 f l1 l2 =
let rec rmap2_f accu l1 l2 =
match (l1, l2) with
| ([], []) -> accu
| (a1::l1, a2::l2) -> rmap2_f (f a1 a2 :: accu) l1 l2
| (_, _) -> invalid_arg "List.rev_map2"
in
rmap2_f [] l1 l2
;;

интерфейсная часть
let rev_map2 f l1 l2 =

вы мне можете сказать что это такое исходя только из строки
let rev_map2 f l1 l2 =
????
что такое rev_map2 - реверсированние списка ? вы уверены ?
почему цифра 2 - два раза это делать ?
l1 & l2 это списки ? уверены ?
зачем ?
f функция - точно ? а зачем ?

anonymous
()
Ответ на: комментарий от DonkeyHot

я верю что вы умный человек
.....
можете дальше любоваться собой в зеркале
.....
но проблема что просматривая 7 мегабайт кода я в конце концов могу устать расшифровывать ваши абревиатуры
пожалейте людей которые вас будут читать ......
мальчиков которые не думают о том что их код будут читать
еще раз - ЧИТАТЬ
надо выгонять немедленно
просто 20 минут его работы выльется в 5 часов работы
человека после него - ЭТО ВРЕДИТЕЛИ - гоните их в шею
___
да кстати - долбанутый принцип выведения типов ......
очень тяжело с ходу сообразить что происходит в этом модуле
если он использует типы из другого
- очень много лишних движений
если это еще и сдобрить "гениальными" абревиатурами
возникает мысль о том что жаль что чей-то отец не был бесплодным ...

anonymous
()
Ответ на: комментарий от anonymous

чаще всего я использую count
иногда iter
- это коротко и читабельно
__чрезвычайно__ редко использую более одного цикла
в одном блоке

anonymous
()
Ответ на: комментарий от DonkeyHot

>> Во многих языках глобальные символы настолько популярны, что
>> приходится придумывать длинные имена. Многие языки не поддерживают >> достаточно высокого уровня абстракии, потому приходится писать
>> длинные выражения.

не знаком с такими языками
- наверное это QBasic ? никогда на нем ничего не писал, не знаю
__
кстати почему то из за долбаной системы модулей Вирта-(Modula мертва !)
не развитости объектной системы
ocaml как раз и провоцирует на глобальные определения

так что - длинные имена удел окамля - не зачем
скрывать их абревиатурами - и делать вид что все Ok

PS
lambda - не есть высокий уровень абстракции - это к слову.

anonymous
()
Ответ на: комментарий от anonymous

Да уж блинь, System.Threading.Mutex.ReleaseMutex() - внятнее?!? Жопу рвать за такие длинные и подробные идентификаторы - даже IDE с автокомплитом не защищает такой многословный язык от ненависти пользователей. Уж лучше окамловый Mutex.lock, Mutex.unlock...

anonymous
()
Ответ на: комментарий от anonymous

>А вы i,j,k для счетчиков цыклов не используете никогда?

1. Только когда код не будет использован вторично и только при наличии не более 2х таких переменных в функции.

linux_newbe
()
Ответ на: комментарий от anonymous

Конечно кулпрогерам некогда писать идентификаторы. Пох что потом люди это читают и анализируют. Давайте пихать всё в одну кучу, а лучше вообще без идентификаторов.

linux_newbe
()
Ответ на: комментарий от anonymous

во первых
mutex.release ()

во вторых
в осамле
Mutex.lock mutex
вмеcто краткого mutex.lock

:(

anonymous
()
Ответ на: комментарий от anonymous

> интерфейсная часть
let rev_map2 f l1 l2 =

Неа.

> l1 & l2 это списки ? уверены ? зачем ?

 ([], []) -> ...
| (a1::l1, a2::l2) -> ...
| (_, _) -> ...

^^^^^
Вот интерфейсная часть. 

>  f функция - точно ? а зачем ? 

А какая разница?

anonymous
()
Ответ на: комментарий от anonymous

>вы мне можете сказать что это такое исходя только из строки let rev_map2 f l1 l2 =

В даном конкретном случае я угадал правильно:-) Хотя то, что они "zipWith" назвали "map2"-ом - и нарисовали отдельную ф-ю вместо "reverse . zipWith" еще больше "дискредитировало" ocaml в моих глазах.

DonkeyHot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.