OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 13:12

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: Пятница, 06 Октябрь, 2017 21:39 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
У меня (уже год наверно) варится в голове одна мысль.
Коротко звучать примерно так будет: Почему большинство ЯП сделаны не для программистов?

Я серьезно. Если взять Оберон, то он создан явно для роботов. А если взять Lua, то на ней писать без ошибок сможет только сверхчеловек.
Мне реально сложно назвать язык, который был бы создан с учетом целевой аудитории. Некоторые хипстерские языки на это претендуют (питон, к примеру), но там масса ошибок уже другого плана (поощрение бряков в циклах, например)
Лично мне нужна середина. Что-то между Oberon и Lua. И размышляя о своем языке я стараюсь думать именно в этом направлении.

Related пример из жизни:
Недавно с коллегой разговаривали и статическом анализе кода 1С. Что нужно проверять, а что нет.
Говорили конкретно о двух вещах (все про язык 1С):
1. Авто-переменные без объявления.
2. Передача параметров по ссылке.

Пример по первому пункту:
В 1С не нужно объявлять локальные переменные. Они создаются автоматически при первом присваивании.
Код:
Var y;
Function Foo()
    x = 1 // тут будет создана новая локальная переменная
    y = 1 // тут будет выполнено присваивание переменной уровня модуля
EndFunction

В среде 1С-ников никто не объявляет локальные переменные (хотя Var в функциях тоже есть).
Из-за этого периодически бывают проблемы, т.к. в глобальном контексте постоянно что-то меняется в процессе развития прикладного решения. Эти присваивания без объявления начинают внезапно присваивать новым глобальным переменным и свойствам (в 1с свойства объектов дополняют глобальный контекст модуля, который связан с объектом). Более того новые глобальные свойства еще и в платформе появляются от версии к версии.
И хорошо если такое присваивание в новом окружении вызывает исключение, а ведь бывает что и исключения нет как и присваивания! Ну в общем я думаю понятно. Погружаться во все тонкости не буду.

Пример по второму пункту:
В 1С по дефолту все параметры передаются по ссылке:
Код:
x = 1
y = 1
Function Foo(x, Val y)
    x = 2 // изменили внешнюю переменную
    y = 2 // это локальная переменная
EndFunction
// x == 2; y == 1


Ну так вот. Эти два примера довольно занятны. Авто-переменные - это сейчас во всех скриптовых языках. И это ведь очевидное дерьмо. Но все упорно продолжают так делать. Сделано типа для человека, но сделать неправильно гораздо легче чем правильно. При добавлении нового свойства коллега не будет шерстить твой код на предмет совпадений. Это очевидно. Люди в 99% случаев идут по менее затратному пути к ближайшему банану.
И по той же причине никто не будет использовать Var в функциях. Ведь авто-переменные - это легче!
И самое смешное, что реально гораздо легче. Ведь в 1С нельзя при объявлении сразу присвоить значение. Вам придется не только написать эти три буквы "Var", но еще и продублировать название переменной (а они в 1С длиннючие). Это все довольно действительно существенные затраты, если вы пишете много кода. И программеров можно понять. На мой взгляд эта ошибка дизайна языка примечательна тем, что авторы не учли целевую аудиторию. Т.е. (как бы это странно не звучало), что языком будет пользоваться человек.
Странный вывод, да? Как такая хрень могла произойти вообще? Автор явно думал о чем-то другом, когда проектировал язык. Но блин почему???

По второму примеру еще эпичнее. Наверно многие знают, что в хорошем языке параметры по дефолту должны быть по значению. Это даже и не обсуждается особо. Умолчательная передача по ссылке - это зло. И в 1С конечно же допустили эту ошибку дизайна и сделали передачу по ссылке более легкой для программиста, чем передачу по значению. Никто не хочет к каждому параметру Val приписывать! Ведь так?! Или нет?
А истина заключается в том, что это не создает проблем в 1С. Я за всю практику (8 лет) ни разу не столкнулся с проблемами из-за передачи по ссылке. И этому есть объяснение. Программист - существо разумное. И в части логики наверно разумнее представителей большинства других профессий. Другими словами, просто нет идиотов, которые будут портить без надобности пришедшие параметры. Не роботы же за клавиатурой. Вы ведь даете своему ребенку вилку в полной уверенности, что он не станет ею выколупывать себе глаз. Но вот программистов почему-то негласно принято считать полными идиотами. Почему это так?
И тут в 1С как это не странно нет ошибки дизайна. Практически никто не пишет Val. И это работает. Просто тут (возможно случайно) учтена целевая аудитория.

А вот еще пример: В 1С и присваивание и равенство - это один и тот же символ "=". И никаких проблем из-за этого нет! Вот ну ни капельки. Мы (человеки) так легко распознаем контекст, в котором стоит этот символ, что даже не замечаем этого. Так нахрена в языках делают разные символы??? Это для кого? Для роботов? Так ведь даже компилятор прекрасно знает контекст и технической трудности в распознавании нет совершенно (за исключением присваиваний в выражении как в C).
Не иначе это для инопланетян. Потому как разумное объяснение этому придумать сложно.

Ну и вдогонку: Нафига точки с запятыми? Это ж бред. Lua - пример синтаксиса, где они тупо не нужны. Там нет ни костылей, ни хитрых схем вставки точек с запятыми во время компиляции как в Go. Просто синтаксис спроектирован таким образом, что необходимости в них просто нет. Их там оставили только для оформительных вещей (т.е. для человека). Вот это пример дизайна, ориентированного на человека.

Я в голове держу такую мантру:
1. Язык программирования это для человека в первую очередь (т.е. допускаю даже чисто оформительные синтаксические элементы)
2. Работать должны роботы (например, порядок объявления процедур должен быть удобным для человека, а не для компилятора)
3. Очень важную (никем видимо не понятую) роль при проектировании языка играет целевая аудитория.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 06 Октябрь, 2017 22:36 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Я раз в год перечитываю известную статью: http://translatedby.com/you/why-pascal- ... e/into-ru/
Весьма полезно (без всяких намеков)
Такой грамотной критики очень мало встречается.

Эту тоже (: http://citforum.ru/programming/digest/wirth/


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 07 Октябрь, 2017 00:04 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Котлин ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 07 Октябрь, 2017 00:42 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Madzi писал(а):
Котлин ?

Что-то они пытаются человеческое делать. Но яиц для отказа от ущербного сишного синтаксиса им не хватило.
Да что уж там... Я даже сам порывался делать сишный синтаксис в угоду народу. Но ощущение ветхости и несуразности операторных скобок склонило меня обратно к подходу Модула/Оберон.
Ну и наличие двух операторов == и === у меня вызывает только недоумение.
Даже не могу вспомнить где бы мне равенство структур понадобилось.
Но я могу чего-то недопонимать, конечно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 07 Октябрь, 2017 01:38 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
ilovb писал(а):
Я раз в год перечитываю известную статью: http://translatedby.com/you/why-pascal- ... e/into-ru/

Вы - смеётесь, что ли?
Даже на момент выхода статьи, она отстала от жизни на несколько лет.
Для такого признанного специалиста в области ИТ, как автор статьи положение равноценно "сесть в лужу".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 07 Октябрь, 2017 11:36 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Вы думаете я об этом не знаю? И что это меняет?
Ценность текста от этого не уменьшается.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 07 Октябрь, 2017 12:56 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
ilovb писал(а):
Ну и вдогонку: Нафига точки с запятыми?
В новом компиляторе Активного Оберона есть режим, при котором точки с запятой не ставятся. Как в компиляторе, так и в интерпретаторе.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 07 Октябрь, 2017 14:06 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
ilovb писал(а):
Ценность текста от этого не уменьшается.
Да бог с вами. Какая ценность. Критика трупа.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 07 Октябрь, 2017 18:41 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Цитата:
Я нахожу относительно мало применений для указателей.
:?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 07 Октябрь, 2017 18:52 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Я тоже этот вброс не понял :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 07 Октябрь, 2017 19:01 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Info21 писал(а):
ilovb писал(а):
Ценность текста от этого не уменьшается.
Да бог с вами. Какая ценность. Критика трупа.


Критику трупов полезно читать, чтобы не воскрешать эти самые трупы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 08 Октябрь, 2017 00:40 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Умно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 08 Октябрь, 2017 06:19 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Паскаль уж точно используется активнее всех вместе взятых оберонов


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 08 Октябрь, 2017 11:49 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Это не тот Паскаль, разве не очевидно?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 08 Октябрь, 2017 15:51 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Comdiv писал(а):
Это не тот Паскаль, разве не очевидно?
Стандартный(ISO) Паскаль, Стандартный паскаль + расширизмы для МК, вариации на тему стандартного паскаля... разве не очевидно?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 08 Октябрь, 2017 21:07 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Kemet писал(а):
Стандартный(ISO) Паскаль, Стандартный паскаль + расширизмы для МК, вариации на тему стандартного паскаля... разве не очевидно?

Когда писалась статья, о которой идёт речь ISO Паскаля не было. Всё ещё не понятно?
А так-то оригинальный Паскаль давно нигде не используется. Даже в моём школьном детстве так было, но, возможно, кто-то живёт в ином мире.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 09 Октябрь, 2017 06:56 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Мир существует, независимо от чьего-то представления и знания о нём. Так и Паскаль.
Тот Паскаль от стандартного чем-то сильно и кардинально отличался? Может там скобочки вместо бегина? может еще чего страшного?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 09 Октябрь, 2017 07:25 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Цитата:
Стандарт языка был разработан Никлаусом Виртом в 1974 году совместно с Кетлин Йенсен (Kathleen Jensen).[11] В дальнейшем, были приняты международный стандарт от ISO и американский от ANS


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 09 Октябрь, 2017 09:43 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Тема топика напомнила мне http://compiler.su/len-dvigatel-progressa.php
Цитата:
Прошло совсем немного времени, и скоро обнаружилось, что программисты такие же лодыри, как и все. Вместо того, чтобы в поте лица своего кодировать свои программы, они начали искать, где и как можно сачкануть. Взамен кодов команд они придумали мнемонические обозначения для них. Вместо того, чтобы вспомнить код операции и адреса аргументов и записать, например,

01101010 00101110 00000101

они стали писать

ADD A,B

что означало «сложить A и B». Для трутней-программистов сделали так называемые ассемблеры, т.е. программы, которые переводили мнемонические обозначения в коды компьютера. И вы думаете, этим дело кончилось? Не надо себя обманывать! Появились языки программирования Фортран, Кобол, Лисп, Алгол, Бейсик, Си, Паскаль и тысячи других. И все они были предназначены для того, чтобы писать не «ADD A,B», а «A+B». Торг идет за пару лишних символов! Чтобы перевести программы с этих языков программирования в машинные коды, эти халтурщики смастерили всякие трансляторы, компиляторы, интерпретаторы.

Компьютерная индустрия просто сошла с ума, старясь перещеголять друг друга в угождении лентяям. США против Японии, IBM против SUN, Microsoft против Apple, iPad против Android. И на каждом витке противостояний появлялись всё новые и новые технологии для лежебок и тунеядцев. Лень-матушка стала образом жизни.

Охреневающие от безделья программисты придумали технологию так называемых «ленивых вычислений». Это не шутка и не анекдот: в программе написано, что надо сделать то-то и то-то, но программа оттягивает выполнение этих предписаний до последнего. Эти инструкции выполняются только тогда, когда без них уже совсем невозможно обойтись! Представляете, программы ленятся так же, как и их творцы.

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


А если серьёзно, то мне больше нравится подход из проекта GIPSY (можно поискать в электронной библиотеке ETH), где они используют аттрибутивную грамматику для генерации текстового редактора, инкрементального компилятора и т.д., то есть по аттрибутивной грамматике фактически генерируют всё необходимое для IDE для этого языка. Еще в этом проекте встречается, что аттрибутивная грамматика позволяет находить противоречия в языке (https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/141241/eth-22335-01.pdf):
Цитата:
4. Applications
In order to use EAGs in practice, only the actual enhancements of a grammar with respect to
the base grammar need be defined. Therefore, only newly-added parts (alphabet, productions,
attributes, attribution rules) require definition. Furthermore, it is convenient to define the
extension relation explicitly, as this greatly simplifies the decision whether an extension is
correct
. For practical applications, it makes sense to restrict the set of valid extension relations.
For instance, one might require that it is acyclic and that every non-terminal of the extended
grammar to be associated with only one non-terminal of the base grammar (single inheritance)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 09 Октябрь, 2017 11:48 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Kemet писал(а):
Мир существует, независимо от чьего-то представления и знания о нём. Так и Паскаль.
Тот Паскаль от стандартного чем-то сильно и кардинально отличался? Может там скобочки вместо бегина? может еще чего страшного?

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB