- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
&НаКлиенте
Процедура ИмяФайла_ПроизводственнаяПрограммаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДиалогВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыборФайла.Фильтр = "Файлы Microsoft Excel (*.xls, *.xlsx, *.xlsm)|*.xls; *.xlsx; *.xlsm|Все файлы (*.*)|*.*";
ДиалогВыборФайла.Показать(Новый ОписаниеОповещения("ИмяФайла_ПроизводственнаяПрограммаНачалоВыбораЗавершение", ЭтотОбъект, Новый Структура("ДиалогВыборФайла,ИмяФайла", ДиалогВыборФайла, Элемент.Имя)));
КонецПроцедуры
&НаКлиенте
Процедура ИмяФайла_ПроизводственнаяПрограммаНачалоВыбораЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
ДиалогВыборФайла = ДополнительныеПараметры.ДиалогВыборФайла;
Если (ВыбранныеФайлы <> Неопределено) Тогда
ЭтаФорма[ДополнительныеПараметры.ИмяФайла] = ДиалогВыборФайла.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Асинхронные вызовы??? Нее.... Не слышал...
> Новый Структура
В "1С" явно не хватает алиасов Новая и Новое для таких случаев... Без них читается как речь какого-то иммигранта.
Шизофрения какая-то, блядь.
>Новый Структура
Слющий, вах Какой Адын Эс )))
Потому в отличии 100% всегда одинакового например:
Писать
или
Ради удобочитаемости просто глупо.
А вообще конечно выглядит очень смешно, когда подобные Вам люди сами кодят на далеко не идеальном языке программирования, который можно также как и 1С засрамить ниже плинтуса по другим причинам, при этом обсирают другие языки и топят за свой.
Да тут все языки равномерно обсирают, так что не принимайте наши шутки близко к сердцу ;)
Соглашусь, недостатки есть у всех языков. Но это совсем не повод обижаться, когда упоминают недостатки Вашего любимого языка. Скорее повод задуматься о том, как можно было бы сделать лучше, если бы такая возможность была. Или просто посмеяться.
Как не толерантно... А если классу не нравятся дефолтные ключевые слова, и он хочет чтобы его создавали по-другому?
Или как в руби: Одно и тоже можно сделать десятью разными способами, но девять из них запрещает rubocop (в перле примерно так же)
https://i.imgur.com/NzCNNfz.jpg — один obvious способ и пять ня obvious.
Почему я постоянно слышу какой прекрасный язык питон, какой чудесный котлин, и какие плохие кресты?
А еще Данниг с Крюгером вносят свою лепту
От коко, разумеется, веет джавой: он для этого и делался.
Был анек, как от мужика воняло говном, он побрызгался дезодорантом "лесной", и теперь пахнет так, будто кто-то под елкой насрал
Во-вторых, из-за глубокой динямичности Питона далеко ня для всех библиотек в принципе возможно сделать тайпхинты. Рассмотрим, няпример, подобие Django ORM:
— какой тайпхинт должен быть у параметра kwargs метода query()?
В-третьих, дженерики в Питоне совершенно убогие: ты ня можешь, няпример, принять (x: T, y: U) и вернуть тип (x + y).
Или вот:
— ни mypy с максимальня строгими нястройками, ни pyright с "typeCheckingMode": "strict" ня выдадут тут ни малейшего писка.
Сеанса отсоса питухона у тайпскрипта
А что это за тип?
А, няшла. Ну это нямного не то, я имела в виду:
(В этом случае decltype() ня нужен, в принципе)
Я в TS так не умею, хотя оператор typeof для получения типа там есть
Ну и Питоньи тайпхинты ня умеют.
Там любое выражение работает.
Что-нибудь в духе decltype(foo().a) должно прокатить. Ну или если у тебя уже есть объект и ты просто времянку под его поле пилишь: З.Ы. Хотя в таких случаях и тупо auto можно написать...
если говно на питоне не типизировано но покрыто тестами от души то оно может вполне успешно расти до огромных размеров
возможно и тесты и типы это просто сорта статического анализа в современном мире где можно все скомпилировать в жс и интерпретировать
Однако же тут есть лукавство: покрыть все состояния программы с высокой цикломатической сложностью нереально, так что где-то можно проебаться.
Алсо, рефакторинги с типизацией делать проще (удачи с переименованием свойства "user" или "id" без нее).
Это давно поняли скриптовики, именно потому в крупных скриптопроектах у нас тайпхинты. Или TS.
сейчас в любом проекте есть и типы, и тесты, и стат. анализ просто потому что реалии разработки изменились и надо высрать какую-то хуйню до конца спринта и желательно чтобы это ничего не сломало, а тестить долго
Речь скорее про статическую.
Тайпхинты могли бы иметь смысл, если бы ими был покрыт весь код. А он не покрыт.
Все существующие библиотеки?
И это ня высосанный из пальца пример, это практически дословная реализация того, что есть в Django ORM.
> а когда в коде есть getattr, то тут только сосат6
Да, в этом и проблема. Его, в принципе, можня на __dict__ заменить, но это шило ня мыло.
Не обязательно методы, можно просто какие-то сущности, которые где-то перечислены, чтобы их можно было представить статически.
В джанге правда эта хуита транзитивна
user__pet__second_owner__name_eq='foo'
так что можно соснуть цикла
Ты описала модель, запустила скрипт, и получила тысячу таких вот классов, все с нужными методами
не?
я могу сгенерить какой угодно код, и написать генерацию на питуринг полном языке
А для IDE это будет просто код же
Я вот поменял data-model.json например, вызвал "generate-code", и получил для него ORM (это всё в выдуманной среде)
Помнишь как генерация прокси-классов по WSDL работала для SOAP?
Или например CoreData у ябла так делает: генерирует классы по описанию модели
А как потом полученные классы править?
Ну вот хочу я добавить в User метод "is_adult()" — в питоньих ORM без кодогенярации я просто открываю user.py и просто пишу "def is_adult(self): ...".
А в системе с кодогенерацией тут же нячинаются костыли и прыжки с бубнями.
А зачем?
>Ну вот хочу я добавить в User метод
Экстеншен методы/миксины тебе в помощь.
Или можно динамически добавить метод:
В руби например это вообще элементерано делается, и повсюду используется. Да и в JS тоже легко
Или вот знаешь как C# для WinForms генерит partial классы?
Там часть класса твоя, а часть генерённая
Читни про partial classes
Чтобы в коде писать "if user.is_adult(): ", а ня "if user.age >= 18: ".
> Экстеншен методы/миксины
> partial classes
В контексте кодогенерации — это и есть те самые костыли и бубны, о которых я писала.
> Или можно динамически добавить метод
И вся статика някает.
а в чем костыли?
>И вся статика някает.
ну рубимайн как-то умеет, но в целом плохо, согласен
Так а что плохого в extension methods и partial classes?
В чем бубны?
алсо, есть кокогенерация парсеров у intellij на основе jflex, там можно сказать "в сгенеренный файл добавиь мне такой вот метод", но это конечно выглядит как говно
В том, что стоит задача: добавить в класс User метод is_adult(). Без костылей и бубнов это делается ровно одним способом: открывается файл с определеняем User, ищется определение User, в него добавляется метод is_adult().
Extension methods а-ля Коко, кстати, ня подойдут: их нужня импортировать отдельня.
Partial classes — наименее костыльный, но нам всё равно для каждого класса нужня иметь два файла: один сгенерированный, другой ручной. Более того, рефакторинг такой системы будет тем ещё удовольствием: снячала рефакторим шаблон, потом вручную чистим все partial-расширения.
и что? Почему это плохо?
> рефакторинг такой системы будет тем ещё удовольствием:
Рефакторинг модели это вообще тяжко, твои методы тут будут не самым страшным местом
Ладно, вот тебе еще вариант: отказаться от ООП вообще и генерировать тупые структуры/DAO и весь свой код держать отдельно, в функциях и процедурах
Потому что
хуже, чем
Ну, если ты не джавист, конячно. Для джависта два импорта всегда приятнее, чем один.
> Ладно, вот тебе еще вариант: отказаться от ООП вообще и генерировать тупые структуры/DAO и весь свой код держать отдельно, в функциях и процедурах
Можня ещё ня Хаскелль перейти. Ну, просто чтобы добавить метод is_adult() в класс User.
Если я пишу в Intellij, то у меня вообще автоимпорт:)
Я жму cltr+space, и мне подсказывают методы. Я могу даже не знать, что это экстеншен метод
>Можня ещё ня Хаскелль перейти
А это поможет?
В общем я не спорю, что у кококогенерации есть какие-то минусы, но имхо кокошные экстеншенметоды и шарпные парчал классы их неплохо решают.
Есть еще вариант сказать, что я срал-ебал стат типизацию, писать на пятом перле в Notepad++, и не забивать себе голову ерундой
IDE построила AST по коду, и подсказывает мне методы
откуда она знает, что при импорте класса ему добавился метод?
Или ты за запуск класса в LSP сервере? Тогда как гарантировать что там нет хальтинг проблем?
ну вот я на лету добавляю в класс метод fooN, где N это 42, если у тебя Linux, и 62 если Mac OS
Как мне поможет пайлинт?
Возьмем реальный пример из джанго.
Если у класса есть поле foo = models.ForeignKey(Bar), то у класс-метода filter есть аргумент foo__[тут_любое_поле_Bar]_eq
Выразишь мне это в pylint?
Пайлинт умеет вернуть список всех методов класса, сгенерив его динамически?
А хальтинг проблем как решается?
Как только ты пытаешься завезти туда статику, у тебя сразу начинаются проблемы
Так Котлин и есть Джава для белых аниме-девочек. Такая себе Антиджава, по анялогии с антикафе.
От "data class X(private val a: Int, var b: Double)" у настоящего джависта нячинается ломка.
Сразу хочется написать конструктор, геттеры, сеттеры, хешкод, компаратор и преобразование в строку?
И вот уже можно ня перерыв отправляться.
Реально видел интерфейс с десятком сеттеров и геттеров, и его реализацию в виде бина (ну то есть просто филды и методы)
https://kpilibrary.com/kpis/lines-of-code-per-day-2
Сайт, кстати, классный
спасибо, что вернули мой 2006-й
Да, особенно приятно, когда NULL это 0 но при этом (void *)(1-1) это не тот NULL https://govnokod.ru/26958#comment576762
Или когда std::vector<bool> оказывается какой-то сраной битоебской хуйней, а все прочие специализации ведут себя нормально.
Не забывай, что он из джавы пришёл...
Хватит уже нас путать)
2) Это как? Булы в векторе пакуются в битмаски?
Если надо именно нулевой физический адрес взять, мне nullptr не подойдет, и (void*)0 не подойдет, надо делать (void*)(1-1)
> 2) Это как? Булы в векоторе пакуются в битмаски?
Да, погугли.
https://alenacpp.blogspot.com/2005/06/vector.html
И говностандартизаторы эту "фичу" так и не пофиксили. Зато какие-то там модули выдумывают.
> Проблема с vector <bool> была замечена в конце 96-го года, Bill (PJ) Plauger (кстати, он президент той самой компании Dinkumware, которая писала реализацию STL для Visual C++ 5.0) упомянул о ней в статье C/C++ Users Journal.
Вижу. Ну в целом, а надо ли получать сырой аррей булов из вектора? Наверное не очень. Если сделать вектор страктов, то уверен — оно будет вести себя нормально. Это между прочим неплохая оптимизация по памяти, битоебство это.
Да, вполне могу представить, чтобы это было надо.
> Если сделать вектор страктов, то уверен — оно будет вести себя нормально.
Лучше б std::vector сделали нормальным, чтобы для специализации с bool-ом была та же хуйня, как и со специализации по другим типами.
То есть для разработки обобщённых алгоритмов ня векторах придётся либо всегда держать в уме, что тебе, кроме нормальных векторов, может попасть няведомая хер-ня "std::vector<bool>", либо просто забить на неё.
А как? Сделать новый std::real_vector<>, без этой говнофичи?
Здесь нужна картинка с xkcd про перегрев компа при нажатии на пробел.
Поменять. Выкинуть нахуй эту говноспециализацию из std::vector<> и сделать как с прочими типами.
Но... ею ведь кто-то пользуется. А тут вдруг потребление памяти вырастет в 8 раз и всё распидорасит.
Кресты -- не питон чтобы взять и по-быстрому* перехуячить весь язык и выбросить всё легаси.
* за десяток лет, лол
З.Ы. Хотя вот auto_ptr выпилили т.к. у него есть 100% адекватная замена.
Ну и пошли они нахуй. Пусть пробегутся по своему говнокоду регекспом, который заменит на какой-нибудь std::bitset всю ту хуйню, где этим пользуются.
Это говно с std::vector<bool> в STL еще в конце 96-го года заметили, еще до стандартизации крестов-с-STL (STL в C++98 появился) и это говно всё равно застандартизировали. Вот где багор )))
Если бы биологическая эволюция работала как эволюция крестоговна, мы бы до сих пор размножались делением, дышали бы одновременно жабрами, легкими и через кожное дыхание как лягушки. Потому что комитет по эволюции человека решил так, отказ от размножение делением и дыханием как у лягушек ломает какую-то обратную совместимость, которая очень нужна
Лебедь, рак и щука же.
Не добавите наш особый кейс в стандарт -- мы вообще его реализовывать не будем. Со "стандартом" SQL точно так же получилось.
UI не должен быть уродливым
особенно в такой сомнительной среде как прыщи
Да, последние стандарты весьма няшные по сравнению с тем, что было в 90х...
Но кресты -- это, как правило, не модные хипстерские проекты, а легаси с историей в десятки лет. Поэтому рано или поздно и auto_ptr увидишь и strstream вместо stringstream.
> битмаски
Угу. И это пиздец лагает если по ним бегать алгоритмами. Т.к. приходится каждый бит выковыривать и потом засовывать обратно.
А ты не находишь хипстерские проекты на джангопитоне или каком-нибудь node.js немного отвратительными? Имхо крестовые легаси проекты на уровне хотя бы 2003 стандарта могут быть и поприятнее таких, если там конечно реально 2003 стандарт, а не Си с классами.
К слову, если речь не о легаси — можно начинать писать новые проекты нормально.
Коллбечная лапша как в старой ноде -- это треш, конечно.
Другой вопрос, что вебщики это лалки анскильные обычно, и тебе с ними будет не интересно
Я знаю... Там же написано "в старой".
Как люди писали SPA в 2009 -- это пиздец. Разве что на GWT
К середине нулевых они все посъябывали на свои PHP, и к 10-м в крестах остались уже те, кто осознанно выбрал путь самурая
Сколько говно не посыпай сахаром, оно остается говном. Тут надо менять первоосновы. Фундамент, так сказать.
Note that the value of a null pointer in the C language does not matter on the underlying architecture. If the underlying architecture has a null pointer value defined as address 0xDEADBEEF, then it is up to the compiler to sort this mess.
При этом компилятор оптимизирует только 0 и NULL константы, а какой-нибудь mynullptr = 0xB00B5 уже, может быть, и не оптимизнёт!
как раз сишная часть крестов вполне себе проста для понимания, кмк
Сюрпризы нас ждут в тех местах, которых в няшной нету: RAII, перегрузки, и шаблоны
Yes.
j123123 28.08.2017 22:35
> Эхх, в том то и дело, проблема как раз в том, как этот ваш C++ эволюционировал. А эволюционировал он так, чтобы быть совместимым с Си. И вот это и есть основная, дерзчайшая ошибка. Нельзя строить язык высокого уровня, коим хочет быть C++, на основе C.
Про идею с DSL я вот там изгалал https://govnokod.ru/27116#comment622955
Ну вот. Тогда на кой хрен кресты?
Проблема использования двух разных языков с двумя принципиально разными компиляторами/рантаймами заключается в том, что они не могут быть совместно-оптимизируемыми, скажем так. Если у меня написано куча кода на Си, я его в одну единицу трансляции сшиваю и компилирую (т.е. link-time optimization), то у меня компилятор видит всю программу и может сделать много чего. А если у меня сишарп который вызывает хуиту на сишке, он нихуя с ней сделать не может. И сишка про сишарп тоже нихуя не знает. Ничего никуда не заинлайнится и не наанроллится.
Если сделать метаязык, который в себе охватывает разные уровни абстракции, и позволяет их адекватно (не так как кресты) совмещать и объединенно компилировать, с применением в т.ч. всяких там частичных вычислений и символьного выполнения, чтобы zero-cost абстракции - вот это будет круто.
Примерно так, но не точно и не полностью. Я против того, как в крестах смешиваются уровни абстракции. Можно сделать так, чтобы в рамках одного метаязыка описывались правила трансляции абстракций высокого уровня в абстракции низкого уровня. На абстракциях высокого уровня пишем высокоуровневый код, который не допускает абстракции низкого уровня внутри себя (но вполне можно вызывать что-то низкоуровневое в высокоуровневом коде). Через определенную систему типов и систему символьных вычислений можно выводить и/или описывать определенные свойства реализации алгоритмов. Ну скажем, что сортировка выдает массив такой, что в нем элементы с меньшим индексом всегда меньше или равны элементы с большим индексом, это можно выразить неким типом, и тогда второй раз сортировка уже никак этот сортированный массив не поменяет... Короче, почитай то, что я написал в комментарии https://govnokod.ru/27116#comment622955 и двумя комментами ниже него. Почитай про идеи суперкомпиляции (оптимизации методом частичных вычислений https://keldysh.ru/papers/2008/prep12/prep2008_12.html#_Toc193602742 ), проекции Футамуры. Вот так примерно надо это проектировать.
Проблема крестов в том, что его делали прагматики, а не идеалисты, типа вот Страуструп тот же, взял сишку, подкостылил, получил какую-то хрень, потом опять подкостылил, и еще, и потом шаблоны еще начали использовать под какую-то хуйню, под которую их изначально не придумывали, и вот так строят всякие хреновые небоскребы из говна и костылей, один костыль подпирает второй костыль, второй подпирает третий, и весь этот сраный ворох говна так и накапливается
Как петухи писали без смарт поинтеров? а без мувов как?
Это же вручную солнце закатывать в каждом классе нужно
Ти давно ВНЗ закінчив?
Тільки, чи нi?
он в жж пишет?
https://inkanusgray.livejournal.com/
на лавнхейте он есть, не?
https://github.com/sarah-walker-pcem/pcem
эмуляторы железа такие забавные:)
А, понял о чем ты.
Инканус тоже не молод
Он опенсурсный что ли?
Публичный CVS он вряд-ли стал бы держать, разве что на сурсфорж или фрешмит бы выложился
А почему ты спрашиваешь? Хочешь почитать перл образца 1998-го года?:)