Pull to refresh

Comments 77

Класс, особенно рассмешило
>[] Вы переизобрели Brainfuck, вот только в отличии от его авторов — на полном серьёзе
Спасибо за перевод.
Вы переизобрели PHP лучше, вот только никому ничего не докажете
Супер!
Только в оригинале «но это плохое оправдание».
комментарии не читай @ умничай, виноват.
UFO just landed and posted this here
UFO just landed and posted this here
А фиг его знает, как верно. Можно еще вот так: «Вы переизобрели PHP лучше, но всё-равно то что вышло пока еще отвратительно»
«Вы изобрели что-то лучше, чем PHP, но это не оправдание»
PHP – это уже худшее, что могло случиться, поэтому все попытки его переизобрести могут быть лишь лучше ;-)
Шедеврально, читал не отрываясь!
Спасибо за перевод)
Кстати, всегда задавался вопросом: неужели для описания логики работы чего либо — единственный выход привести эту логику к формализованным строкам, к коду? Может кто слышал про некие альтернативные способы описания работы чего либо?
Поясните «для описания логики работы чего либо». Чего либо?
Да, креативный подход, перформансы и арт-объекты не заставят боинг летать, сколько не трепли языком. Изыди!
То есть креатива в науке и программировании нет? Вас не возьмут работать в гугл.
Примитивно. Это я беру работать. Или не беру.
Fuzzy logic, machine learning, neural networks — выбирайте.
>> полностью понимать теорию относительности и квантовую механику
про теоркат было забавнее — это четкий намек на Хаскелл.
> [] Вам зачем-то понадобилось присутствие компилятора в рантайме
> [] Вам зачем-то понадобился рантайм в компиляторе

Лисперы и смоллтокеры негодуют!
А у меня вопрос. Почему нет языка программирования, на котором не надо писать стену для для реализации простых вещей (антипример — Java: там без фабрики, интерфейса и имплементации даже простейшую задачу не решить). Который по информативности хотя бы приблизился к естественному языку.

Например, надо сделать формочку для ввода к примеру УРЛ а при нажатии кнопки load (справа от поля УРЛ) показать в большой текстарее внизу заголовки, которые прислал в ответ сервер.

Другой пример: вывести список книг из базы данных (соритровать по имени автора, не более 30 на страницу), чтобы это выглядело как на макете bookList.psd.

У меня на русском языке описание заняло одну строчку. Сколько надо кода и дополнительных библиотек, чтобы сделать это на java, HTML/JS или C++, надеюсь, объяснять не надо. Получается, синтаксис этих языков избыточен: надо написать намного больше букв и использовать сложные абстракции вроде анонимных классов для листенеров. Объявлять приватные и публичные функции (а ведь, если подумать, какая разница, функциями и классами код там написан или одной огромной процедурой, строгая типизация или утиная — нужно чтобы программа просто работала). Миллионы людей пишут один и тот же лишний, бесполезный код. Котоырй еще получается в итоге меделенным, глючащим и неэффективным.

Почему??777

Или проще самому написать анализатор-компилятор русского языка в машиинный код, чем дождаться когда нормальный язык появится?
Другой пример: вывести список книг из базы данных (соритровать по имени автора, не более 30 на страницу), чтобы это выглядело как на макете bookList.psd.


это понятно вам, и, отчасти, мне. А вот секретарше Верочке уже не понятно, она в принципе не знает, что есть «база данных». Отбросим секретаршу Верочку (т.е. введем некий ценз на использование языка), оставим вас и меня. Вам-то наверное понятно, что вы имели ввиду под «вывести», а я теряюсь в догадках — куда и в каком виде? На печать, в качестве веб-страницы, как-то еще? Отбросим меня (т.е. введем некий дополнительный ценз на использоание языка)… дальше продолжать?
Анализатор-компилятор ориентирован на создание каких-то определенных программ (серверное приложение, десктопное, и т.д.). Значит, он должен понимать, о чем речь. Естественно, у него должны быть знания предметной области, в отличие от упомянутой вами секретарши. Он же для создания приложений сделан, а не для заваривания кофе.

Пусть скомпилирует так, как понял. Если меня что-то не устроит, я просто допишу в исходный текст программы: нет, надо сделать веб-приложение. И шрифт, пожалуйста, поставь 12 pt, а не этот слоновий. И в урле поменяй /books/ на /knigi/

Естественно, какая-то адекватность и здравый смысл должен быть заложен изначально: компилятор не должен пытаться в приложении писать белым по белому или использовать нечитаемый шрифт по умолчанию. Он должен понимать такие слова, как список, чекбокс, инпут, окошечко, крестик и так далее.

Блин, вот 100 000 человек пишет наверняка в эту минуту очередной SELECT * FROM database, а не проще ли один раз обучить компьютер это делать и больше никогда не повторяться???

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

В ответ на комментарий honeyman:

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

Кто мешает собрать 10 лучших экспертов по разработке приложений и дизайну (ну и меня за компанию :) ), записать их мнение о принципах подхода к интерфейсу и архитектуре кода и вбить его в этот сверхкомпилятор? Чтобы, если дизайнер сказал «по умолчанию лучше использвоать шрифт 12pt, на белом фоне цветом #333», программа так и делала по умолчанию.

В любом случае, если что-то получится не совсем так, ничего старшного, я просто открою исходник и допишу, например: «требуется поддерживать протоколоы http и https (без проверки сертификатов)». Если компиляция приложения производится мгновенно (8-ядерный процессор и SSD, так уж и быть под это дело куплю) — это не проблема. Человек как раз тут и нужен, чтобы наставить тупую машину на путь истинный.

По поводу 200-страничных техзаданий (видел и такие) — их пишут подробно, так как разработчики часто лентяи и стремятся сделать все как можно проще (чтобы меньше напрягаться), а потом сказать, мол, этого нет в ТЗ. В случаи с машиной такой проблемы нет — машина искренне стремится сделать работу как можно лучше, ей неведома жадность, глупость и хитрость.
> Пусть скомпилирует так, как понял. Если меня что-то не устроит, я просто допишу в исходный
> текст программы: нет, надо сделать веб-приложение. И шрифт, пожалуйста, поставь 12 pt,
> а не этот слоновий. И в урле поменяй /books/ на /knigi/

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

Ха-ха-ха! Спасибо, повеселили.

Ну а для избавления от рутинных задач существуют фреймворки.
Фреймворки часто неудачно спроектированы, загоняют разработчика в рамки, заставляют изучать и принимать чуждую идеологию, требуют глубоких знаний, в особо печальных случаях приходится тратить силы на борьбу с их кривизной.
Сверхязык будет иметь ровно те же проблемы. Только бороться с кривизной будет сложнее.
По сути человек говорит о наборе библиотек или как уже сказали — фреймворке, который позволит решать часто требующиеся задачи на очень высоком уровне. Это, кстати очень часто нужно, ибо иначе просто не писали бы десятки либ для вычислений или даже просто загрузки картинок.
Именно это же реализовано в том же питоне или дельфи — когда монотонную тупую работу по рефакторингу уже готового когда берёт на себя оболочка или хитрый интерпретатор и программер быстро пишет то что ему нужно, а не изобретает костыли в сотый раз.

Да, на все случаи либ не изобретешь, но 95% случаев покрыть можно.
У меня на русском языке описание заняло одну строчку… Почему??777


Потому что «дьявол в деталях». И описание у вас заняло только одну строчку только потому, что вы в описании задачи опустили очень много пунктов, которые предположительно должны быть очевидными из контекста. В заказе «формочки для запросов сервера» вы не то что не сказали, какие протоколы/методы/схемы/способы обращения должны поддерживаться (будем поддерживать file://? mailto:? sip:?), но даже не сказали, что какой-то запрос надо вообще слать!

А для кого-то контексты могут быть другими. То поведение, которое вы «умолчали», для кого-то является неочевидным, а для кого-то вообще неожиданным. В вашем контексте наверняка есть «умолчанные» личные критерии, что вы считаете правильным, а что нет: например, если нажатие клавиши в поле ввода УРЛ приведёт к синему экрану системы, наверняка вы это посчитаете некорректным поведением, хотя в описании задачи этого не было. А вот что должно произойти при невозможности установить соединение с сервером по мириаду различных причин, от отсутствия сервера до отсутствия на вашем компьютере сетевой карты — точнее, что бы вы хотели, что должно произойти, предугадать вообще нереально.
Ну и так, вкусовщина наподобие того «а при ресайзе формы должна ресайзиться текстареа?»

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

И вот к тому моменту окажется, что стандартные библиотеки в любых языках наверняка учитывают основную часть этих пожеланий — потому что вряд ли вы придумали что-нибудь с нуля, скорее, мыслили так же, как мыслят все остальные пользователи, для удовлетворения потребностей которых и сделали эти библиотеки.

И ваше техзадание на двух тетрадках в клеточку будет решено программой в пару десятков строк.

… Кстати, когда-то я писал на Perl, и с тех пор у меня осталось впечатление, что задача про «формочку для URL» на Perl/Tk решилась бы как раз в строку-две. Ну, или на Tcl/Tk.
> И описание у вас заняло только одну строчку только потому, что вы в описании задачи опустили очень много пунктов, которые предположительно должны быть очевидными из контекста.

Кто мешает собрать 10 лучших экспертов по разработке приложений и дизайну (ну и меня за компанию :) ), записать их мнение о принципах подхода к интерфейсу и архитектуре кода и вбить его в этот сверхкомпилятор? Чтобы, если дизайнер сказал «по умолчанию лучше использвоать шрифт 12pt, на белом фоне цветом #333», программа так и делала по умолчанию.

В любом случае, если что-то получится не совсем так, ничего старшного, я просто открою исходник и допишу, например: «требуется поддерживать протоколоы http и https (без проверки сертификатов)». Если компиляция приложения производится мгновенно (8-ядерный процессор и SSD, так уж и быть под это дело куплю) — это не проблема. Человек как раз тут и нужен, чтобы наставить тупую машину на путь истинный.

По поводу 200-страничных техзаданий (видел и такие) — их пишут подробно, так как разработчики часто лентяи и стремятся сделать все как можно проще (чтобы меньше напрягаться), а потом сказать, мол, этого нет в ТЗ. В случаи с машиной такой проблемы нет — машина искренне стремится сделать работу как можно лучше, ей неведома жадность, глупость и хитрость.
То есть каждый из таких программистов должен быть безооговорчно грамотным.

А копилятор должен разруливать ситуации типа:
— устойчивые выражение
— слова которые зависят по значению от ударения (еще ко всему и меняющие смысл слов вокруг)

и еще несколько смешных примеров типо

«пила пила»
«вести вести»
«жгут жгут»
«казнить нельзя помиловать»

Обычно такие темы предлагают, ребята с небольшим опытом разработки вцелом.
Но ничего вы поднатореете и все поймете.
Как не собирай лучших дизайнеров, всегда какому-нибудь заказчику захочется сделать зеленым шрифтом на розовом фоне, потому что… ну вот хочется и все тут.

А вообще правильно заметили, для упрощения большинства типовых задач есть фреймворки, если они чем-то не устраивают можно подумать над идеальным для себя.
UFO just landed and posted this here
Другой пример: вывести список книг из базы данных (соритровать по имени автора, не более 30 на страницу), чтобы это выглядело как на макете bookList.psd.

Поздравляю, вы только что изобрели SQL.
Я в курсе про SQL, но он недостаточно гибок: не позволяет переставлять местами ORDER и GROUP BY например (жутко бесит). И не позволяет вывести материал в виде списка или иконок например.
Потому что за вывод «куда-то» он не отвечает. Он отвечает на запросы к БД. А уж вывести их — дело программы, которая его использует.
Ибо бессмысленно сортировать то, что потом группиоваться должно. Сортировать ВСЕГДА имеет смысл лишь готовые группы.
И ещё понадобятся корованы.
> вызовы по адресу
Там еще дальше вызов с продолжением (call-cc)
> [] Программирование на этом языке — самое адекватное наказание Вам за его изобретение.

самый правильный вывод :)
Да как-то создатели языков программируют и не жалуются…
Смешно. А какой практический смысл статьи? При решении любой задачи аналогичной сложности возникнет не меньше проблем. Перенесите в ХабраЮмор, что-ли…
Ну а что тут смешного? Разработчику языка реально придётся столкнуться с этим всем. Этот список просто даёт возможность заранее увидеть все препятствия и прикинуть, как их решать.
Какой-то очень вольный перевод получился.

[ ] We already have a safe statically-typed eager functional language

[] Уже существует функциональный язык
«Unsupported claims of ease of use» это не «нечего ответить на просьбу упростить язык», а «необоснованные заявления о простоте использования». И подобных моментов, к сожалению, много. Хотя, конечно, это мелочи, но на мой взгляд исходный текст достаточно лаконичен и точен, чтобы передать его в первозданном виде.
Я знаю. Более того, это сделано умышленно. Меня от подобных длинных запутанных формулировок в дрожь бросает. А проблема в том, что короткие английские слова в дословном переводе на русский почему-то удлиняются в 5 раз («use»->«использования»).

Считайте литературным переводом ну или вольным пересказом.
>>«необоснованные заявления о простоте использования»
Нечитабельно и непонятно. Заявления кого? кому?
А, что хороший чеклист для тех, кто решит изобрести свой эзотерический язык и переплюнуть INTERCAL/Brainfuck/Malbolge :)
Спасибо за перевод. Больше никогда не буду писать компиляторов… Хоть и пробовал только 1 раз в школе еще. Super Randomizer v2.0 получился тогда. Исходники сгорели правда вместе с жестким диском на 2м курсе, но смотреть порой на сие «чудо» забавно…
ЗЫ: с обменников уже удалена видимо…
Каждый уважающий себя программист в молодости должен попытаться написать свой «самый лучший» язык программирования. Или операционку. Или движок форума \ CMS. Для профессионального развития это очень полезно, главное — знать, когда остановиться.
к сожалению в истории остаются лишь единицы, которые так и не смогли остановиться: Гослинги, Торвальдсы, Таненбаумы, Хейлсберги…
Если бы Хейлсберги и Торвальдсы изобретали бы велосипеды, не внося никаких значимых преимуществ, мы бы вряд ли что-нибудь о них узнали.
UFO just landed and posted this here
Идея, благодаря которой твое решение отличается от аналогичных, должно быть изначально. Наоборот как правило не бывает — если вы знаете много случаев, когда хотели сделать копию и случайно превзошли оригинал — с удовольствием их послушаю.
В одной диссертации встретил обоснование почему был разработан очередной самопальный язык:

… Существуют языки [2,3,7] для решения подобных задач, но все они непригодны.

Понятно? Все до одного абсолютно непригодны, и нечего тут рассуждать.
Programmers should not need to understand category theory to write «Hello, World!»

Программисты не обязаны полностью понимать теорию относительности и квантовую механику чтобы написать на Вашем языке «Hello, World!»


Неудачный перевод, теория категорий появилась в оригинале совершенно не случайно.
Не случайно. Но вот даже я (какой-никакой, а программист) слабо представляю, что это такое — ну потому что не пишу на Хаскеле. А значит 50% аудитории Хабра (а на самом деле 90%) не поймет о чем речь. С другой стороны сложность квантовой механики является общеизвестной и с ней предложение становится понятным. А кому нужна чистая правда — пусть читают оригинал (это правило для любого перевода работает).
Я бы так не делал. Вы переводите, а не статью пишете. Авторам бы вряд ли понравилось такой вольный «перевод» этого пункта.
Это интересная тема. Вам знакомы Гоблин и Кураж-Бамбей? Вот уж кто издевается над оригиналами без всякой совести. А однако их переводы пользуются популярностью. У топика +150 — значит людям нравится.
Да, я негодяй и перевираю правду. Но это не Википедия, это Хабр. Сюда заходят почитать то, что интересно, а за точными формулировками и дотошной скурпулёзностью — это не сюда.
Гоблин таки переводил всё 1 к 1 в своих серьезных переводов. А К.Б. озвучивает по субтитрам каких-то малограмотных чуваков.
Теперь нужно внедрить это в программу универов (:

Спасибо за перевод!
Целую минуту смеялся:

Название Вашего языка делает невозможным его поиск в Гугле


Писал как-то код на J.
Скорее, это мягкий наезд на Go
Поправьте (пропущенные слова помечены полужирным):
  1. *внаглую
  2. Уже существует безопасный объектно-ориентированный императивный язык
  3. Уже существует безопасный статически-типизированный функциональный язык с «энергичными» вычислениями

Мне кажется, «переизобрести» звучит немного неуклюже, я бы использовал «заново изобрести».
Весело :)
Правда, иногда все же новые языки удаются, хоть тот же Python взять :)
Я нередко интересовался, в чём же преимущества Python перед Tcl. Кроме батареек мне почему-то никто ничего ни разу сказать не смог.

Так что, человек изобрёл новый язык и смог доказать что он лучше имеющихся аналогов, а так ли это на самом деле — неважно.

Clojure перед Common Lisp имеет тоже ровно одно преимущество — батарейки (Java), и их популярность уже сравнима. Но это хоть немного обоснованно, т.к. для Clojure батарейки достались от Java, в отличии от Python.
CL это наслоение древностей.
Как по мне, Clojure имеет более приятный синтаксис, а поддержка Java кода и библиотек ставит его на другой уровень.
Большинство комментарии с минусом для меня + (они разумны, человек думал), а с плюсом комментарии не о чем, просто стёб. Вы хоть пробовали хоть один язык разработать.
(
        Using("W.Expressions.FuncDefs_Excel, WExpr"),
        Using("W.Expressions.FuncDefs_Report, WExpr"),
        Using("W.Expressions.FuncDefs_Ora, WExprSql"),
	Using("W.Util.FuncDefs_Solver, WUtil"),
	Using("PalmCalcs.FuncDefs, PalmCalcs"),
	UseOraSqlFuncsFrom("Queries.sql").PrintLn(),
	let(nOraConnections, 4),
	let(oraConn, OraNewConnection(
		'user/pass@oraclesrv:1521/database'
		, nOraConnections
		, { 'ALTER SESSION SET CURSOR_SHARING = SIMILAR', 'ALTER SESSION SET NLS_TERRITORY = cis' }
	)),
	let(semaParQueries, Semaphore(nOraConnections)),
	PrintLn("WellStock('')"),
	let(wells, WellStock('')),
	let(WELL_ID_OISP, wells['WELL_ID_OISP']
		. Where(wells['SHOP_NAME']='ЦДНГ')
	),  
	let(AT_TIME__XT, DATEVALUE('2013-10-31')),
	let(outsPalm, {
		"SHOP_NAME", "OILFIELD_NAME", "WELL_NAME",
		"RESERVOIR_TEMPERATURE_OISP_C",
		"PERFTOP_DEPTH_MX",
		"PUMP_DEPTH_MX",
		"CASING_DIAMETER_MX_MM",
		"TUBING_DIAMETER_MX_MM",
		"BUFFER_PRESSURE_OISP_ATM",
		"RESERVOIR_PRESSURE_OISP_ATM",
		"LIQUID_WATERCUT_OISP",
		"GAS_VOLFACTOR_OISP",
		"LIQUID_VOLRATE_OISP",
		"BOTTOMHOLE_PRESSURE_OISP_ATM",
		"ANNULAR_PRESSURE_OISP_ATM",
		"DYNLEVEL_DEPTH_OISP",
		"STATLEVEL_DEPTH_OISP",
		"OILSEP_VISCOSITY_OISP",
		"WATER_VISCOSITY_OISP",
		"OIL_VOLFACTOR_OISP",
		"SATURATION_PRESSURE_OISP_ATM",
		"GAS_DENSITY_OISP_TPCM",
		"OILSEP_DENSITY_OISP_TPCM",
		"WATER_DENSITY_ANY_TPCM",
		"BOTTOMHOLE_PRESSURE_OPTWELL_ATM",
		"INTAKE_PRESSURE_OPTWELL_ATM",
		"INTAKE2_PRESSURE_OPTWELL_ATM",
		"OUTLET_PRESSURE_OPTWELL_ATM"
	}),
	let(test, {"WELL_ID_OISP","OILFIELD_NAME","WELL_NAME","TINCL_OBJ_OPTWELL"}),
	let(solution, FindSolutionExpr({}, outsPalm )),
	let(outFile, NewFileStreamWriter('Test_Solver.log')),
	let(msg, "Solution is: " & solution),
	PrintLn(msg),
	outFile.StreamWriterAppendText(msg),
        let(partMaxSize,1000),
	PartsOfLimitedSize(WELL_ID_OISP, partMaxSize)
	..let(parts),
	startTiming(),
        _For(
                ( let(n,COLUMNS(parts)), let(i,0) ),
                i<n,
                _EvalWithSemaphore( semaParQueries,
			let(WELL_ID_OISP, parts[i]),
			let(results, ExprToExecutable(solution)),
			_ForEach(r, results, r._ToStr()..StreamWriterAppendText(outFile) ),
			Print('.'),
                        let(i,i+1)
               )
        )
	.stopTiming(),
	outFile.StreamWriterAppendText(OraGetStatMsg()),
	outFile.StreamWriterClose(),
	'wells=' & COLUMNS(WELL_ID_OISP)
)
(подумал, что статья в чём-то про меня))
А «это», для «привлечения внимания» — пример скрипта на «компилируемом», поддерживающем «ленивость»/многопоточность/асинхронность псевдоязыке с синтаксисом, как у формул Excel (+небольшое количество «синтаксического сахара»).
Используется как DSL.
Недавно переведён с .Net 2.0 на .Net 4.5 (уж очень захотелось приобщиться к async/await вместо AsyncEnumerator)…
Нет проблемы в создании языка. Есть проблема в создании компилятора для него. Тот, кто научится компилировать ТЗ сразу в исполняемый код заработает миллиарды ;)
Sign up to leave a comment.

Articles

Change theme settings